Skip to content

Commit 7ed0347

Browse files
qschmickroshangautam
authored andcommitted
[feature] support single hyphen parameters
- adds support for single hyphen parameters
1 parent d7582ae commit 7ed0347

File tree

2 files changed

+50
-10
lines changed

2 files changed

+50
-10
lines changed

src/Task.php

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -81,26 +81,44 @@ public function compileParameters($console = false)
8181
preg_match_all($regex, $this->parameters, $matches, PREG_SET_ORDER, 0);
8282

8383
$argument_index = 0;
84-
$parameters = collect($matches)->mapWithKeys(function ($parameter) use ($console, &$argument_index) {
84+
85+
$duplicate_parameter_index = function (array $carry, array $param, string $trimmed_param) {
86+
if (! isset($carry[$param[0]])) {
87+
$carry[$param[0]] = $trimmed_param;
88+
} else {
89+
if (! is_array($carry[$param[0]])) {
90+
$carry[$param[0]] = [$carry[$param[0]]];
91+
}
92+
$carry[$param[0]][] = $trimmed_param;
93+
}
94+
95+
return $carry;
96+
};
97+
98+
return collect($matches)->reduce(function ($carry, $parameter) use ($console, &$argument_index, $duplicate_parameter_index) {
8599
$param = explode('=', $parameter[0]);
86100

87101
if (count($param) > 1) {
88102
$trimmed_param = trim(trim($param[1], '"'), "'");
89103
if ($console) {
90-
return starts_with($param[0], '--') ?
91-
[$param[0] => $trimmed_param] :
92-
[$argument_index++ => $trimmed_param];
104+
if (starts_with($param[0], ['--', '-'])) {
105+
$carry = $duplicate_parameter_index($carry, $param, $trimmed_param);
106+
} else {
107+
$carry[$argument_index++] = $trimmed_param;
108+
}
109+
110+
return $carry;
93111
}
94112

95-
return [$param[0] => $trimmed_param];
113+
return $duplicate_parameter_index($carry, $param, $trimmed_param);
96114
}
97115

98-
return starts_with($param[0], '--') && ! $console ?
99-
[$param[0] => true] :
100-
[$argument_index++ => $param[0]];
101-
})->toArray();
116+
starts_with($param[0], ['--', '-']) && ! $console ?
117+
$carry[$param[0]] = true :
118+
$carry[$argument_index++] = $param[0];
102119

103-
return $parameters;
120+
return $carry;
121+
}, []);
104122
}
105123

106124
return [];

tests/Feature/CompileParametersTest.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,26 @@ public function test_all_mixed_arguments_console()
124124
$this->assertSame('yes', $parameters['--option']);
125125
$this->assertSame('warm', $parameters['--someplace']);
126126
}
127+
128+
public function test_single_dash()
129+
{
130+
$task = factory(Task::class)->create();
131+
$task->parameters = '-osTeSt';
132+
$parameters = $task->compileParameters(true);
133+
134+
$this->assertCount(1, $parameters);
135+
$this->assertSame('-osTeSt', $parameters[0]);
136+
}
137+
138+
public function test_array_argument()
139+
{
140+
$task = factory(Task::class)->create();
141+
$task->parameters = '--id=1 --id=2';
142+
$parameters = $task->compileParameters(true);
143+
144+
$this->assertCount(1, $parameters);
145+
$this->assertIsArray($parameters['--id']);
146+
$this->assertSame('1', $parameters['--id'][0]);
147+
$this->assertSame('2', $parameters['--id'][1]);
148+
}
127149
}

0 commit comments

Comments
 (0)