classFinder = $classFinder; $this->injectableFactory = $injectableFactory; } /** * Create a job. * * @return Job|JobDataLess * @throws Error */ public function create(string $name): object { $className = $this->getClassName($name); if (!$className) { throw new Error("Job '{$name}' not found."); } return $this->createByClassName($className); } /** * Create a job by class name. * @return Job|JobDataLess * @throws Error */ public function createByClassName(string $className): object { $job = $this->injectableFactory->create($className); if ( !$job instanceof Job && !$job instanceof JobDataLess ) { throw new TypeError(); } return $job; } /** * Whether a job has prepare method. Prepare method creates job records from a scheduled job record. * * @throws Error */ public function isPreparable(string $name): bool { $className = $this->getClassName($name); if (!$className) { throw new Error("Job '{$name}' not found."); } if (method_exists($className, 'prepare')) { return true; } return false; } private function getClassName(string $name): ?string { return $this->classFinder->find('Jobs', ucfirst($name)); } }