Completed
Push — master ( ef74c4...7e6611 )
by Alessandro
03:26
created

addFactoryToContainer()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 9
ccs 6
cts 6
cp 1
rs 9.6666
c 0
b 0
f 0
cc 1
eloc 6
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Facile\CrossbarHTTPPublisherBundle\DependencyInjection;
4
5
use Symfony\Component\DependencyInjection\ContainerBuilder;
6
use Symfony\Component\DependencyInjection\Definition;
7
use Symfony\Component\DependencyInjection\Reference;
8
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
9
use Facile\CrossbarHTTPPublisherBundle\Publisher\Publisher;
10
use Facile\CrossbarHTTPPublisherBundle\Publisher\Factory;
11
12
/**
13
 * Class FacileCrossbarHTTPPublisherExtension
14
 * @package Facile\CrossbarHTTPPublisherBundle\DependencyInjection
15
 */
16
class FacileCrossbarHTTPPublisherExtension extends Extension
17
{
18
    /**
19
     * {@inheritDoc}
20
     */
21 1
    public function load(array $config, ContainerBuilder $container)
22
    {
23 1
        $configuration = new Configuration();
24 1
        $config = $this->processConfiguration($configuration, $config);
25
26 1
        $this->loadConnections($container, $config);
27 1
    }
28
29
    /**
30
     * Registers publisher services in container
31
     * @param ContainerBuilder $container
32
     * @param array $config
33
     */
34 1
    private function loadConnections(ContainerBuilder $container, array $config)
35
    {
36 1
        $factoryName = $this->addFactoryToContainer($container);
37 1
        $genericDefinition = new Definition(Publisher::class);
38 1
        $genericDefinition->setFactory([new Reference($factoryName), 'createPublisher']);
39
40 1
        foreach ($config['connections'] as $key => $connection) {
41 1
            $protocol = $connection['protocol'];
42 1
            $host = $connection['host'];
43 1
            $port = $connection['port'];
44 1
            $path = $connection['path'];
45 1
            $auth_key = $connection['auth_key'];
46 1
            $auth_secret = $connection['auth_secret'];
47 1
            $hostname = $connection['hostname'];
48 1
            $ignoreSsl = $connection['ssl_ignore'];
49
50 1
            if ($path[0] !== '/') {
51
                $path = '/' . $path;
52
            }
53
54 1
            $definition = clone $genericDefinition;
55 1
            $definition->setArguments([$protocol, $host, $port, $path, $auth_key, $auth_secret, $hostname, $ignoreSsl]);
56 1
            $container->setDefinition(sprintf('facile.crossbar.publisher.%s', $key), $definition);
57
        }
58 1
    }
59
60
    /**
61
     * @param ContainerBuilder $container
62
     * @return string The factory service name inside the container
63
     */
64 1
    private function addFactoryToContainer(ContainerBuilder $container)
65
    {
66 1
        $factoryDefinition = new Definition(Factory::class);
67 1
        $factoryDefinition->setPublic(false);
68 1
        $factoryName = 'facile.crossbar.publisher.factory';
69 1
        $container->setDefinition($factoryName, $factoryDefinition);
70
71 1
        return $factoryName;
72
    }
73
}
74