QueueExtension::addStorage()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 13
ccs 8
cts 8
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 7
nc 2
nop 2
crap 2
1
<?php
2
3
namespace SymfonyBundles\QueueBundle\DependencyInjection;
4
5
use Symfony\Component\DependencyInjection\Reference;
6
use Symfony\Component\DependencyInjection\Definition;
7
use Symfony\Component\DependencyInjection\ContainerBuilder;
8
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;
9
10
class QueueExtension extends ConfigurableExtension
11
{
12
    /**
13
     * {@inheritdoc}
14
     */
15 3
    protected function loadInternal(array $configs, ContainerBuilder $container)
16
    {
17 3
        $this->addService($configs, $container);
18 3
        $this->addStorage($configs, $container);
19 2
    }
20
21
    /**
22
     * @param array            $configs
23
     * @param ContainerBuilder $container
24
     */
25 3
    private function addService(array $configs, ContainerBuilder $container)
26
    {
27 3
        $alias = $this->getAlias();
28 3
        $storageReference = new Reference('sb_queue.storage');
29
30 3
        $service = new Definition($configs['service']['class']);
31 3
        $service->addMethodCall('setName', [$configs['settings']['queue_default_name']]);
32 3
        $service->addMethodCall('setStorage', [$storageReference]);
33
34 3
        $container->setDefinition($alias, $service);
35 3
        $container->setAlias($configs['service']['alias'], $alias);
36 3
    }
37
38
    /**
39
     * @param array            $configs
40
     * @param ContainerBuilder $container
41
     */
42 3
    private function addStorage(array $configs, ContainerBuilder $container)
43
    {
44 3
        if (false === isset($configs['storages'][$configs['service']['storage']])) {
45 1
            throw new \InvalidArgumentException(sprintf('Not available storage `%s`.', $configs['service']['storage']));
46
        }
47
48 2
        $parameters = $configs['storages'][$configs['service']['storage']];
49
50 2
        $storage = new Definition($parameters['class']);
51 2
        $storage->addArgument(new Reference($parameters['client']));
52
53 2
        $container->setDefinition('sb_queue.storage', $storage);
54 2
    }
55
56
    /**
57
     * {@inheritdoc}
58
     */
59 4
    public function getAlias()
60
    {
61 4
        return 'sb_queue';
62
    }
63
}
64