EventBusConfiguration   A
last analyzed

Complexity

Total Complexity 10

Size/Duplication

Total Lines 51
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 51
ccs 25
cts 25
cp 1
rs 10
c 0
b 0
f 0

2 Methods

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