1 | <?php |
||
10 | class Runner |
||
11 | { |
||
12 | private $app; |
||
13 | private $mapping; |
||
14 | |||
15 | 3 | public function __construct(Application $app) |
|
16 | { |
||
17 | 3 | $this->app = $app; |
|
18 | 3 | } |
|
19 | |||
20 | 3 | public function getMapping() |
|
21 | { |
||
22 | 3 | if(!$this->mapping) { |
|
23 | |||
24 | 3 | $classes = array_merge( |
|
25 | 3 | $this->app->get(Filesystem::class)->listClasses('Jobs'), |
|
26 | 3 | $this->app->get(Framework::class)->listClasses('Jobs') |
|
27 | ); |
||
28 | |||
29 | 3 | $jobs = []; |
|
30 | 3 | foreach($classes as $class) { |
|
31 | 3 | list($name, $group) = array_map('lcfirst', array_reverse(explode("\\", $class))); |
|
32 | 3 | $nick = "$group.$name"; |
|
33 | |||
34 | 3 | if(!array_key_exists($nick, $jobs)) { |
|
35 | 3 | $jobs[$nick] = $class; |
|
36 | 3 | $jobs[strtolower($nick)] = $class; |
|
37 | } |
||
38 | } |
||
39 | |||
40 | 3 | $this->mapping = $jobs; |
|
41 | } |
||
42 | |||
43 | 3 | return $this->mapping; |
|
44 | } |
||
45 | |||
46 | 3 | public function getJobClass($nick) |
|
47 | { |
||
48 | 3 | if(!strstr($nick, '.')) { |
|
49 | throw new LogicException("Incorrect nick - $nick"); |
||
50 | } |
||
51 | |||
52 | 3 | $mapping = $this->getMapping(); |
|
53 | 3 | if(!array_key_exists($nick, $mapping)) { |
|
54 | throw new LogicException("No job $nick"); |
||
55 | } |
||
56 | |||
57 | 3 | $class = $mapping[$nick]; |
|
58 | |||
59 | 3 | if(!class_exists($class)) { |
|
60 | throw new LogicException("No class for job $nick"); |
||
61 | } |
||
62 | 3 | return $class; |
|
63 | } |
||
64 | |||
65 | 3 | public function dispatch($nick, $arguments = []) |
|
81 | |||
82 | 1 | private function castArguments($class, $arguments) |
|
95 | } |
||
96 |