Group::__invoke()   A
last analyzed

Complexity

Conditions 5
Paths 1

Size

Total Lines 31
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 5

Importance

Changes 0
Metric Value
cc 5
eloc 14
nc 1
nop 0
dl 0
loc 31
ccs 15
cts 15
cp 1
crap 5
rs 9.4888
c 0
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
10
/**
11
 * @immutable
12
 *
13
 * @template TKey
14
 * @template T
15
 */
16
final class Group extends AbstractOperation
17
{
18
    /**
19
     * @return Closure(iterable<TKey, T>): Generator<int, list<T>>
20
     */
21 6
    public function __invoke(): Closure
22
    {
23 6
        return
24
            /**
25
             * @param iterable<TKey, T> $iterable
26
             *
27
             * @return Generator<int, list<T>>
28
             */
29 6
            static function (iterable $iterable): Generator {
30 6
                $last = [];
31
32 6
                foreach ($iterable as $current) {
33 4
                    if ([] === $last) {
34 4
                        $last = [$current];
35
36 4
                        continue;
37
                    }
38
39 4
                    if (current($last) === $current) {
40 4
                        $last[] = $current;
41
42 4
                        continue;
43
                    }
44
45 4
                    yield $last;
46
47 4
                    $last = [$current];
48
                }
49
50 6
                if ([] !== $last) {
51 4
                    yield $last;
52
                }
53 6
            };
54
    }
55
}
56