Completed
Pull Request — master (#67)
by Ross
04:58
created

BusBuilders::createBlankRouting()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php
2
declare(strict_types=1);
3
4
namespace League\Tactician\Bundle\DependencyInjection\Compiler\BusBuilder;
5
6
use League\Tactician\Bundle\DependencyInjection\DuplicatedCommandBusId;
7
use League\Tactician\Bundle\DependencyInjection\HandlerMapping\Routing;
8
use League\Tactician\Bundle\DependencyInjection\InvalidCommandBusId;
9
10
final class BusBuilders implements \IteratorAggregate
11
{
12
    /**
13
     * @var BusBuilder[]
14
     */
15
    private $busBuilders = [];
16
17
    /**
18
     * @var string
19
     */
20
    private $defaultBusId;
21
22 96
    public function __construct(array $busBuilders, string $defaultBusId)
23
    {
24 96
        foreach ($busBuilders as $builder) {
25 96
            $this->add($builder);
26
        }
27
28 93
        $this->assertValidBusId($defaultBusId);
29 90
        $this->defaultBusId = $defaultBusId;
30 90
    }
31
32 72
    public function createBlankRouting(): Routing
33
    {
34 72
        return new Routing(array_keys($this->busBuilders));
35
    }
36
37 72
    public function defaultBus(): BusBuilder
38
    {
39 72
        return $this->get($this->defaultBusId);
40
    }
41
42 72
    private function get(string $busId): BusBuilder
43
    {
44 72
        $this->assertValidBusId($busId);
45
46 72
        return $this->busBuilders[$busId];
47
    }
48
49 78
    public function getIterator()
50
    {
51 78
        return new \ArrayIterator($this->busBuilders);
52
    }
53
54 93
    private function assertValidBusId($busId)
55
    {
56 93
        if (!isset($this->busBuilders[$busId])) {
57 3
            throw InvalidCommandBusId::ofName($busId, array_keys($this->busBuilders));
58
        }
59 90
    }
60
61 96
    private function add(BusBuilder $builder)
62
    {
63 96
        $id = $builder->id();
64
65 96
        if (isset($this->busBuilders[$id])) {
66 3
            throw DuplicatedCommandBusId::withId($id);
67
        }
68
69 96
        $this->busBuilders[$id] = $builder;
70 96
    }
71
}
72