Skip to content

Commit

Permalink
unpack
Browse files Browse the repository at this point in the history
  • Loading branch information
rodber committed Feb 14, 2025
1 parent 3a5c082 commit f8065e4
Showing 1 changed file with 17 additions and 3 deletions.
20 changes: 17 additions & 3 deletions src/Job.php
Original file line number Diff line number Diff line change
Expand Up @@ -169,14 +169,19 @@ private function setArguments(mixed ...$argument): void

return;
}
$values = [];
$isPositional = array_is_list($argument);
$lastKey = array_key_last($this->parameters->keys());
$lastName = $this->parameters->keys()[$lastKey] ?? null;
foreach ($this->parameters as $name => $parameter) {
if ($name === $lastName && $this->parameters->isVariadic()) {
if ($isPositional) {
/** @var int $lastKey */
$variadicKeys = array_slice($argument, $lastKey);
$sliceAt = count($this->parameters) - 1;
$variadicKeys = array_slice($argument, $sliceAt);
$variadicKeys = array_combine(
range($sliceAt, $sliceAt + count($variadicKeys) - 1),
$variadicKeys
);
} else {
$variadicKeys = array_diff_key(
$argument,
Expand All @@ -193,11 +198,20 @@ private function setArguments(mixed ...$argument): void
break;
}

if (! array_key_exists($name, $argument)) {
$named = strval($name);
$name = array_search($name, $this->parameters->keys());
if ($name === false) {
continue;
}
$name = strval($name);
}

if (array_key_exists($name, $argument)) {
$value = $argument[$name];
$values[$name] = $value;
$this->inferDependencies($value);
$this->assertParameter($name, $parameter, $value);
$this->assertParameter($named ?? $name, $parameter, $value);
}
}
$this->arguments = $values;
Expand Down

0 comments on commit f8065e4

Please sign in to comment.