Skip to content

Commit

Permalink
Now ::until() uses a variadic argument.
Browse files Browse the repository at this point in the history
  • Loading branch information
drupol committed Jan 9, 2020
1 parent b325505 commit 34b62c4
Show file tree
Hide file tree
Showing 3 changed files with 18 additions and 12 deletions.
4 changes: 2 additions & 2 deletions src/Collection.php
Original file line number Diff line number Diff line change
Expand Up @@ -527,9 +527,9 @@ public static function times($number = INF, ?callable $callback = null): Collect
*
* @return \loophp\collection\Contract\Collection
*/
public function until(callable $callback): BaseInterface
public function until(callable ...$callbacks): BaseInterface
{
return $this->run(new Until($callback));
return $this->run(new Until(...$callbacks));
}

/**
Expand Down
4 changes: 2 additions & 2 deletions src/Contract/Untilable.php
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@
interface Untilable
{
/**
* @param callable $callable
* @param callable ...$callbacks
*
* @return \loophp\collection\Contract\Collection<mixed>
*/
public function until(callable $callable): Base;
public function until(callable ...$callbacks): Base;
}
22 changes: 14 additions & 8 deletions src/Operation/Until.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,32 +14,38 @@
final class Until implements Operation
{
/**
* @var callable
* @var array<callable>
*/
private $callable;
private $callbacks;

/**
* Until constructor.
*
* @param callable $callable
* @param callable ...$callbacks
*/
public function __construct(callable $callable)
public function __construct(callable ...$callbacks)
{
$this->callable = $callable;
$this->callbacks = $callbacks;
}

/**
* {@inheritdoc}
*/
public function on(iterable $collection): Closure
{
$callable = $this->callable;
$callbacks = $this->callbacks;

return static function () use ($callable, $collection): Generator {
return static function () use ($callbacks, $collection): Generator {
foreach ($collection as $key => $value) {
yield $key => $value;

if (true === $callable($value, $key)) {
$result = true;

foreach ($callbacks as $callback) {
$result &= $callback($value, $key);
}

if (1 === $result) {
break;
}
}
Expand Down

0 comments on commit 34b62c4

Please sign in to comment.