Completed
Pull Request — master (#2)
by
unknown
09:05
created

EventBusConfiguration   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 4

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 10
lcom 0
cbo 4
dl 0
loc 52
ccs 34
cts 34
cp 1
rs 10
c 0
b 0
f 0

2 Methods

Rating   Name   Duplication   Size   Complexity  
A configureEventBus() 0 24 5
A 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
     */
28 4
    public function configureEventBus($buses, ContainerBuilder $container)
29
    {
30 4
        foreach ($buses as $busName => $busConfig) {
31 4
            $resolverServiceId = "narrator.event_bus.$busName.resolver";
32 4
            $resolverConfig = isset($busConfig['resolver']) ? $busConfig['resolver'] : [];
33 4
            $resolver = $this->buildResolver($resolverConfig);
34
35 4
            if ($resolver instanceof Definition) {
36 3
                $container->setDefinition($resolverServiceId, $resolver);
37 4
            } elseif ($resolver instanceof Alias) {
38 1
                $container->setAlias($resolverServiceId, $resolver);
39 1
            }
40 4
            $container->setDefinition(
41 4
                "narrator.event_bus.$busName",
42 4
                new Definition(
43 4
                    BasicEventBus::class,
44
                    [
45 4
                        new Reference($resolverServiceId),
46 4
                        []
47 4
                    ]
48 4
                )
49 4
            );
50 4
        }
51 4
    }
52
53
    /**
54
     * @param array $resolverConfig
55
     * @return Alias|Definition
56
     */
57 4
    private function buildResolver($resolverConfig)
58
    {
59 4
        $resolverType = isset($resolverConfig['type']) ? $resolverConfig['type'] : 'name';
60
        switch ($resolverType) {
61 4
            case 'instanceof':
62 1
                return new Definition(InstanceOfResolver::class);
63 4
            case 'service':
64 1
                return new Alias($resolverConfig['service_id'], false);
65 3
            default:
66 3
                $nameExtractorId = isset($resolverConfig['name_extractor']) ? $resolverConfig['name_extractor'] : "narrator.name_extractor.class_name";
67 3
                return new Definition(
68 3
                    NameBasedResolver::class,
69 3
                    [new Reference($nameExtractorId)]
70 3
                );
71 3
        }
72
    }
73
}
74