Completed
Push — master ( 52c567...98dc60 )
by Edwin
04:32
created

BroadcasterPass   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 60
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 6
Bugs 0 Features 1
Metric Value
wmc 10
c 6
b 0
f 1
lcom 1
cbo 3
dl 0
loc 60
ccs 29
cts 29
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A process() 0 14 3
A createAliasses() 0 14 3
A createDefault() 0 7 2
A addBroadcaster() 0 15 2
1
<?php
2
3
namespace EdwinLuijten\EkkoBundle\DependencyInjection;
4
5
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
6
use Symfony\Component\DependencyInjection\ContainerBuilder;
7
use Symfony\Component\DependencyInjection\Definition;
8
use Symfony\Component\DependencyInjection\Reference;
9
10
class BroadcasterPass implements CompilerPassInterface
11
{
12
13
    /**
14
     * @param ContainerBuilder $container
15
     */
16 4
    public function process(ContainerBuilder $container)
17
    {
18
19 4
        if (!$container->hasDefinition('ekko.broadcast.manager')) {
20 2
            return;
21
        }
22
23 2
        $definition     = $container->getDefinition('ekko.broadcast.manager');
24 2
        $taggedServices = $container->findTaggedServiceIds('ekko.broadcaster');
25
26 2
        foreach ($taggedServices as $id => $tags) {
27 2
            $this->createAliasses($id, $tags, $definition, $container);
28
        }
29 2
    }
30
31 2
    private function createAliasses($id, $tags, Definition $definition, ContainerBuilder $container)
32
    {
33 2
        foreach ($tags as $attributes) {
34 2
            $reference   = new Reference($id);
35 2
            $broadcaster = $container->getDefinition($reference->__toString());
36
37
            // Set default broadcaster if defined
38 2
            if (isset($attributes['default'])) {
39 1
                $this->createDefault($broadcaster, $reference, $definition, $container);
40
            }
41
42 2
            $this->addBroadcaster($broadcaster, $attributes, $reference, $definition, $container);
43
        }
44 2
    }
45
46 1
    private function createDefault($broadcaster, Reference $reference, Definition $definition, ContainerBuilder $container)
47
    {
48 1
        if (!$container->hasDefinition('ekko.broadcaster.default')) {
49 1
            $definition->addMethodCall('setDefaultBroadcaster', [$broadcaster]);
50 1
            $container->setAlias('ekko.broadcaster.default', $reference->__toString());
51
        }
52 1
    }
53
54 2
    private function addBroadcaster($broadcaster, array $attributes, Reference $reference, Definition $definition, ContainerBuilder $container)
55
    {
56 2
        $definition->addMethodCall(
57 2
            'add',
58
            [
59 2
                $attributes['alias'],
60 2
                $broadcaster
61
            ]
62
        );
63
64
        // Register an alias for each broadcaster
65 2
        if (!$container->hasDefinition('ekko.broadcaster.' . $attributes['alias'])) {
66 2
            $container->setAlias('ekko.broadcaster.' . $attributes['alias'], $reference->__toString());
67
        }
68 2
    }
69
}
70