Passed
Push — master ( 4e0120...c40ba3 )
by Pol
15:03
created

Iterate::on()   A

Complexity

Conditions 2
Paths 1

Size

Total Lines 8
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
eloc 5
nc 1
nop 1
dl 0
loc 8
rs 10
c 1
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace loophp\collection\Operation;
6
7
use Closure;
8
use Generator;
9
use loophp\collection\Contract\Operation;
10
11
/**
12
 * Class Iterate.
13
 */
14
final class Iterate implements Operation
15
{
16
    /**
17
     * @var callable
18
     */
19
    private $callback;
20
21
    /**
22
     * @var array
23
     */
24
    private $parameters;
25
26
    /**
27
     * Iterate constructor.
28
     *
29
     * @param callable $callback
30
     * @param array $parameters
31
     */
32
    public function __construct(callable $callback, array $parameters = [])
33
    {
34
        $this->callback = $callback;
35
        $this->parameters = $parameters;
36
    }
37
38
    /**
39
     * {@inheritdoc}
40
     */
41
    public function on(iterable $collection): Closure
42
    {
43
        $callback = $this->callback;
44
        $parameters = $this->parameters;
45
46
        return static function () use ($callback, $parameters): Generator {
47
            while (true) {
48
                yield $parameters = $callback(...(array) $parameters);
49
            }
50
        };
51
    }
52
}
53