Completed
Pull Request — master (#115)
by Šimon
08:06
created

BusBuilders::createBlankRouting()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4

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
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 ArrayIterator;
7
use League\Tactician\Bundle\DependencyInjection\DuplicatedCommandBusId;
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
    public function __construct(array $busBuilders, string $defaultBusId)
23 102
    {
24
        foreach ($busBuilders as $builder) {
25 102
            $this->add($builder);
26 102
        }
27
28
        $this->assertValidBusId($defaultBusId);
29 99
        $this->defaultBusId = $defaultBusId;
30 96
    }
31 96
32
    public function defaultBus(): BusBuilder
33 78
    {
34
        return $this->get($this->defaultBusId);
35 78
    }
36
37
    private function get(string $busId): BusBuilder
38 78
    {
39
        $this->assertValidBusId($busId);
40 78
41
        return $this->busBuilders[$busId];
42
    }
43 78
44
    /**
45 78
     * @return ArrayIterator|BusBuilder[]
46
     */
47 78
    public function getIterator()
48
    {
49
        return new ArrayIterator($this->busBuilders);
50
    }
51
52
    private function assertValidBusId($busId)
53 84
    {
54
        if (!isset($this->busBuilders[$busId])) {
55 84
            throw InvalidCommandBusId::ofName($busId, array_keys($this->busBuilders));
56
        }
57
    }
58 99
59
    private function add(BusBuilder $builder)
60 99
    {
61 3
        $id = $builder->id();
62
63 96
        if (isset($this->busBuilders[$id])) {
64
            throw DuplicatedCommandBusId::withId($id);
65 102
        }
66
67 102
        $this->busBuilders[$id] = $builder;
68
    }
69
}
70