-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathAddScheduleCommand.php
More file actions
60 lines (49 loc) · 1.61 KB
/
AddScheduleCommand.php
File metadata and controls
60 lines (49 loc) · 1.61 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php
namespace RonasIT\Larabuilder\Visitors\AppBootstrapVisitors;
use PhpParser\Node\Arg;
use PhpParser\Node\Expr\MethodCall;
use PhpParser\Node\Expr\StaticCall;
use PhpParser\Node\Identifier;
use PhpParser\Node\Name;
use PhpParser\Node\Stmt\Expression;
use RonasIT\Larabuilder\Support\NodeValueFactory;
use RonasIT\Larabuilder\ValueOptions\ScheduleOption;
class AddScheduleCommand extends AbstractAppBootstrapVisitor
{
protected Expression $scheduleStatement;
protected array $options = [];
public function __construct(
protected string $command,
ScheduleOption ...$options,
) {
$this->options = $options;
$this->scheduleStatement = $this->buildScheduleCall();
parent::__construct(
parentMethod: 'withSchedule',
targetMethod: 'command',
);
}
protected function buildScheduleCall(): Expression
{
$call = new StaticCall(
class: new Name('Schedule'),
name: new Identifier('command'),
args: [
new Arg(NodeValueFactory::make($this->command)->node),
],
);
foreach ($this->options as $option) {
$arguments = array_map(fn ($argument) => new Arg(NodeValueFactory::make($argument)->node), $option->arguments);
$call = new MethodCall(
var: $call,
name: new Identifier($option->method),
args: $arguments,
);
}
return new Expression($call);
}
protected function getInsertableNode(): Expression
{
return $this->scheduleStatement;
}
}