Completed
Push — master ( 1d9788...8a00e7 )
by Ross
03:13 queued 01:37
created

TacticianExtension::injectMethodNameInflector()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 2.0116

Importance

Changes 0
Metric Value
dl 0
loc 11
ccs 6
cts 7
cp 0.8571
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 6
nc 2
nop 2
crap 2.0116
1
<?php namespace League\Tactician\Bundle\DependencyInjection;
2
3
use League\Tactician\Bundle\Security\Voter\HandleCommandVoter;
4
use Symfony\Component\Config\FileLocator;
5
use Symfony\Component\DependencyInjection\ContainerBuilder;
6
use Symfony\Component\DependencyInjection\Definition;
7
use Symfony\Component\DependencyInjection\Loader;
8
use Symfony\Component\DependencyInjection\Reference;
9
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;
10
11
class TacticianExtension extends ConfigurableExtension
12
{
13
    /**
14
     * Configures the passed container according to the merged configuration.
15
     *
16
     * @param array $mergedConfig
17
     * @param ContainerBuilder $container
18
     */
19 18
    protected function loadInternal(array $mergedConfig, ContainerBuilder $container)
20
    {
21 18
        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__ . '/../Resources/config/services'));
22 18
        $loader->load('services.yml');
23
24 18
        $this->configureCommandBuses($mergedConfig, $container);
25 18
        $this->configureSecurity($mergedConfig, $container);
26 18
    }
27
28 18
    public function getAlias()
29
    {
30 18
        return 'tactician';
31
    }
32
33
    /**
34
     * @param array $mergedConfig
35
     * @param ContainerBuilder $container
36
     */
37 18
    private function configureCommandBuses(array $mergedConfig, ContainerBuilder $container)
38
    {
39 18
        foreach ($mergedConfig['commandbus'] as $commandBusName => $commandBusConfig) {
40 18
            $middlewares = array_map(
41 18
                function ($middlewareServiceId) {
42 18
                    return new Reference($middlewareServiceId);
43 18
                },
44 18
                $commandBusConfig['middleware']
45 12
            );
46
47 18
            $serviceName = 'tactician.commandbus.' . $commandBusName;
48 18
            $definition = new Definition($container->getParameter('tactician.commandbus.class'), [$middlewares]);
49 18
            $container->setDefinition($serviceName, $definition);
50
51 18
            if ($commandBusName === $mergedConfig['default_bus']) {
52 18
                $container->setAlias('tactician.commandbus', $serviceName);
53 12
            }
54 12
        }
55 18
    }
56
57
    /**
58
     * Configure the security voter if the security middleware is loaded.
59
     *
60
     * @param array $mergedConfig
61
     * @param ContainerBuilder $container
62
     */
63 18
    private function configureSecurity(array $mergedConfig, ContainerBuilder $container)
64
    {
65 18
        foreach ($mergedConfig['commandbus'] as $commandBusConfig) {
66 18
            if (in_array('tactician.middleware.security', $commandBusConfig['middleware'])) {
67 10
                return $this->configureCommandSecurityVoter($mergedConfig, $container);
68
            }
69 8
        }
70 12
    }
71
72
    /**
73
     * Configure the security voter.
74
     *
75
     * @param array $mergedConfig
76
     * @param ContainerBuilder $container
77
     */
78 6
    private function configureCommandSecurityVoter(array $mergedConfig, ContainerBuilder $container)
79
    {
80 6
        if (!$container->has('tactician.middleware.security_voter')) {
81 6
            $definition = new Definition(
82 6
                HandleCommandVoter::class,
83
                [
84 6
                    new Reference('security.access.decision_manager'),
85 6
                    $mergedConfig['security']
86 4
                ]
87 4
            );
88 6
            $definition->addTag('security.voter');
89 6
            $container->setDefinition('tactician.middleware.security_voter', $definition);
90 4
        }
91 6
    }
92
}
93