MenuEvent::__construct()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
nc 1
nop 1
dl 0
loc 5
rs 10
c 2
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Braunstetter\MenuBundle\Events;
6
7
use Braunstetter\MenuBundle\Contracts\MenuItemInterface;
8
use Closure;
9
use Symfony\Contracts\EventDispatcher\Event;
10
11
class MenuEvent extends Event
12
{
13
    /**
14
     * @var iterable<MenuItemInterface>
15
     */
16
    public iterable $items;
17
18
    public function __construct(Closure $items)
19
    {
20
        /** @var iterable<MenuItemInterface> $result */
21
        $result = call_user_func($items);
22
        $this->items = $result;
23
    }
24
25
    public function append(callable $callable): void
26
    {
27
        /** @var iterable<MenuItemInterface> $result */
28
        $result = call_user_func($callable);
29
        $this->items = $this->append_iterators($this->items, $result);
30
    }
31
32
    public function prepend(callable $callable): void
33
    {
34
        /** @var iterable<MenuItemInterface> $result */
35
        $result = call_user_func($callable);
36
        $this->items = $this->append_iterators($result, $this->items);
37
    }
38
39
    /**
40
     * @param iterable<MenuItemInterface> ...$iterators
41
     * @return iterable<MenuItemInterface>
42
     */
43
    private function append_iterators(iterable ...$iterators): iterable
44
    {
45
        foreach ($iterators as $iterator) {
46
            foreach ($iterator as $row) {
47
                yield $row;
48
            }
49
        }
50
    }
51
}
52