Skip to content

Commit 4d80d27

Browse files
committed
Updated compile parameters to properly handle multiple arguments passed without override as well as named arguments
1 parent 96f13ab commit 4d80d27

File tree

2 files changed

+62
-10
lines changed

2 files changed

+62
-10
lines changed

src/Task.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ class Task extends TotemModel
1919
'description',
2020
'command',
2121
'parameters',
22+
'logpath',
2223
'expression',
2324
'timezone',
2425
'is_active',
@@ -71,12 +72,12 @@ public function compileParameters($console = false)
7172
$regex = '/(?=\S)[^\'"\s]*(?:\'[^\']*\'[^\'"\s]*|"[^"]*"[^\'"\s]*)*/';
7273
preg_match_all($regex, $this->parameters, $matches, PREG_SET_ORDER, 0);
7374

74-
$parameters = collect($matches)->mapWithKeys(function ($parameter) use ($console) {
75+
$argument_index = 0;
76+
$parameters = collect($matches)->mapWithKeys(function ($parameter) use ($console, &$argument_index) {
7577
$param = explode('=', $parameter[0]);
7678

77-
return count($param) > 1 ?
78-
($console ? ((starts_with($param[0], '--') ? [$param[0] => $param[1]] : [$param[1]])) : [$param[0] => $param[1]])
79-
: (starts_with($param[0], '--') && ! $console ? [$param[0] => true] : $param);
79+
return count($param) > 1 ? [$param[0] => $param[1]]
80+
: (starts_with($param[0], '--') && ! $console ? [$param[0] => true] : [$argument_index++ => $param[0]]);
8081
})->toArray();
8182

8283
return $parameters;

tests/Feature/CompileParametersTest.php

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,15 @@
77

88
class CompileParametersTest extends TestCase
99
{
10-
/** @test */
11-
public function no_paramters()
10+
public function test_no_paramters()
1211
{
1312
$task = factory(Task::class)->create();
1413
$parameters = $task->compileParameters();
1514

1615
$this->assertEmpty($parameters);
1716
}
1817

19-
/** @test */
20-
public function multiple_paramters()
18+
public function test_multiple_paramters()
2119
{
2220
$task = factory(Task::class)->create();
2321
$task->parameters = '--parameter-1=value --parameter-2=value --parameter-3=value';
@@ -29,7 +27,7 @@ public function multiple_paramters()
2927
$this->assertEquals('value', $parameters['--parameter-3']);
3028
}
3129

32-
public function flag_and_paramter()
30+
public function test_flag_and_paramter()
3331
{
3432
$task = factory(Task::class)->create();
3533
$task->parameters = '--parameter-1=value --dry-run';
@@ -41,7 +39,7 @@ public function flag_and_paramter()
4139
$this->assertEquals('value', $parameters['--parameter-1']);
4240
}
4341

44-
public function multiple_flags()
42+
public function test_multiple_flags()
4543
{
4644
$task = factory(Task::class)->create();
4745
$task->parameters = '--dry-run --debug --log-output';
@@ -55,4 +53,57 @@ public function multiple_flags()
5553
$this->assertTrue($parameters['--debug']);
5654
$this->assertTrue($parameters['--log-output']);
5755
}
56+
57+
public function test_multiple_arguments()
58+
{
59+
$task = factory(Task::class)->create();
60+
$task->parameters = 'arg1 arg2 arg3';
61+
$parameters = $task->compileParameters();
62+
63+
$this->assertCount(3, $parameters);
64+
$this->assertSame('arg1', $parameters[0]);
65+
$this->assertSame('arg2', $parameters[1]);
66+
$this->assertSame('arg3', $parameters[2]);
67+
}
68+
69+
public function test_multiple_named_arguments()
70+
{
71+
$task = factory(Task::class)->create();
72+
$task->parameters = 'arg1=name arg2=airport arg3=100';
73+
$parameters = $task->compileParameters();
74+
75+
$this->assertCount(3, $parameters);
76+
$this->assertSame('name', $parameters['arg1']);
77+
$this->assertSame('airport', $parameters['arg2']);
78+
$this->assertSame('100', $parameters['arg3']);
79+
}
80+
81+
public function test_multiple_mixed_arguments()
82+
{
83+
$task = factory(Task::class)->create();
84+
$task->parameters = 'arg1 arg2=test arg3=15 arg4';
85+
$parameters = $task->compileParameters();
86+
87+
$this->assertCount(4, $parameters);
88+
$this->assertSame('arg1', $parameters[0]);
89+
$this->assertSame('test', $parameters['arg2']);
90+
$this->assertSame('15', $parameters['arg3']);
91+
$this->assertSame('arg4', $parameters[1]);
92+
}
93+
94+
public function test_all_mixed_arguments()
95+
{
96+
$task = factory(Task::class)->create();
97+
$task->parameters = 'arg1 arg2=test arg3=15 arg4 --flag --flag2 --option=yes --someplace=warm';
98+
$parameters = $task->compileParameters();
99+
100+
$this->assertCount(8, $parameters);
101+
$this->assertSame('arg1', $parameters[0]);
102+
$this->assertSame('test', $parameters['arg2']);
103+
$this->assertSame('15', $parameters['arg3']);
104+
$this->assertSame('arg4', $parameters[1]);
105+
$this->assertSame('warm', $parameters['--someplace']);
106+
$this->assertTrue($parameters['--flag']);
107+
$this->assertArrayHasKey('--flag', $parameters);
108+
}
58109
}

0 commit comments

Comments
 (0)