Completed
Push — master ( 395bc6...59d003 )
by Daniel
01:28
created

EventBusConfiguration   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Test Coverage

Coverage 96.88%

Importance

Changes 0
Metric Value
wmc 10
c 0
b 0
f 0
lcom 0
cbo 4
dl 0
loc 52
ccs 31
cts 32
cp 0.9688
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
B configureEventBus() 0 24 5
B buildResolver() 0 16 5
1
<?php
2
/**
3
 * Narrator Bundle
4
 *
5
 * @link      http://github.com/mleko/narrator-bundle
6
 * @copyright Copyright (c) 2017 Daniel Król
7
 * @license   MIT
8
 */
9
10
11
namespace Mleko\Narrator\Bundle\DependencyInjection\Configuration;
12
13
14
use Mleko\Narrator\BasicEventBus;
15
use Mleko\Narrator\ListenerResolver\InstanceOfResolver;
16
use Mleko\Narrator\ListenerResolver\NameBasedResolver;
17
use Symfony\Component\DependencyInjection\Alias;
18
use Symfony\Component\DependencyInjection\ContainerBuilder;
19
use Symfony\Component\DependencyInjection\Definition;
20
use Symfony\Component\DependencyInjection\Reference;
21
22
class EventBusConfiguration
23
{
24
    /**
25
     * @param $buses
26
     * @param ContainerBuilder $container
27 3
     */
28
    public function configureEventBus($buses, ContainerBuilder $container)
29 3
    {
30 3
        foreach ($buses as $busName => $busConfig) {
31 3
            $resolverServiceId = "narrator.event_bus.$busName.resolver";
32 3
            $resolverConfig = isset($busConfig['resolver']) ? $busConfig['resolver'] : [];
33 3
            $resolver = $this->buildResolver($resolverConfig);
34 3
35 3
            if ($resolver instanceof Definition) {
36
                $container->setDefinition($resolverServiceId, $resolver);
37 3
            } elseif ($resolver instanceof Alias) {
38 3
                $container->setAlias($resolverServiceId, $resolver);
39 3
            }
40 3
            $container->setDefinition(
41
                "narrator.event_bus.$busName",
42 3
                new Definition(
43 3
                    BasicEventBus::class,
44 3
                    [
45 3
                        new Reference($resolverServiceId),
46 3
                        []
47 3
                    ]
48 3
                )
49
            );
50 3
        }
51
    }
52 3
53
    /**
54 3
     * @param array $resolverConfig
55 1
     * @return Alias|Definition
56 3
     */
57
    private function buildResolver($resolverConfig)
58 3
    {
59 3
        $resolverType = isset($resolverConfig['type']) ? $resolverConfig['type'] : 'name';
60 3
        switch ($resolverType) {
61 3
            case 'instanceof':
62 3
                return new Definition(InstanceOfResolver::class);
63 3
            case 'service':
64 3
                return new Alias($resolverConfig['service_id'], false);
65
            default:
66
                $nameExtractorId = isset($resolverConfig['name_extractor']) ? $resolverConfig['name_extractor'] : "narrator.name_extractor.class_name";
67
                return new Definition(
68
                    NameBasedResolver::class,
69
                    [new Reference($nameExtractorId)]
70
                );
71
        }
72
    }
73
}
74