Completed
Push — master ( 7c3af8...6b86b8 )
by Peter
03:37
created

getRealServiceName()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 8
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2.0625

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 0
loc 8
ccs 3
cts 4
cp 0.75
rs 9.4285
cc 2
eloc 4
nc 2
nop 1
crap 2.0625
1
<?php
2
/**
3
 * AnimeDb package
4
 *
5
 * @package   AnimeDb
6
 * @author    Peter Gribanov <[email protected]>
7
 * @copyright Copyright (c) 2014, Peter Gribanov
8
 * @license   http://opensource.org/licenses/MIT
9
 */
10
11
namespace AnimeDb\Bundle\CacheTimeKeeperBundle\DependencyInjection;
12
13
use Symfony\Component\DependencyInjection\ContainerBuilder;
14
use Symfony\Component\Config\FileLocator;
15
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
16
use Symfony\Component\DependencyInjection\Loader\YamlFileLoader;
17
18
/**
19
 * DependencyInjection
20
 *
21
 * @package AnimeDb\Bundle\CacheTimeKeeperBundle\DependencyInjection
22
 * @author  Peter Gribanov <[email protected]>
23
 */
24
class AnimeDbCacheTimeKeeperExtension extends Extension
25
{
26
    /**
27
     * @param array $configs
28
     * @param ContainerBuilder $container
29
     */
30 1
    public function load(array $configs, ContainerBuilder $container)
31
    {
32
33 1
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
34 1
        $loader->load('parameters.yml');
35 1
        $loader->load('services.yml');
36
37 1
        $configuration = new Configuration(
38 1
            $container->getParameter('cache_time_keeper.driver.shmop.salt'),
39 1
            $container->getParameter('cache_time_keeper.driver.file.path')
40 1
        );
41 1
        $config = $this->processConfiguration($configuration, $configs);
42
43 1
        $config = $this->mergeBackwardCompatibilityConfig($config, $container);
44 1
        $config = $this->mergeDefaultConfig($config, $container);
45
46
        // configure drivers
47
        $container
48 1
            ->getDefinition('cache_time_keeper.driver.shmop')
49 1
            ->replaceArgument(0, $config['drivers']['shmop']['salt']);
50
        $container
51 1
            ->getDefinition('cache_time_keeper.driver.file')
52 1
            ->replaceArgument(0, $config['drivers']['file']['path']);
53
        $container
54 1
            ->getDefinition('cache_time_keeper.driver.memcached')
55 1
            ->replaceArgument(1, $config['drivers']['memcached']['prefix']);
56
57
        // configure memcached
58
        $memcached = $container
59 1
            ->getDefinition('cache_time_keeper.memcached')
60 1
            ->replaceArgument(0, $config['drivers']['memcached']['persistent_id']);
61 1
        foreach ($config['drivers']['memcached']['hosts'] as $host) {
62
            $memcached->addMethodCall('addServer', $host);
63 1
        }
64
65
        // add service aliases
66 1
        $container->setAlias(
67 1
            'cache_time_keeper.driver',
68 1
            $this->getRealServiceName($config['use_driver'])
69 1
        );
70 1
        $container->setAlias(
71 1
            'cache_time_keeper.driver.multi.fast',
72 1
            $this->getRealServiceName($config['drivers']['multi']['fast'])
73 1
        );
74 1
        $container->setAlias(
75 1
            'cache_time_keeper.driver.multi.slow',
76 1
            $this->getRealServiceName($config['drivers']['multi']['slow'])
77 1
        );
78 1
    }
79
80
    /**
81
     * @param string $name
82
     *
83
     * @return string
84
     */
85 1
    protected function getRealServiceName($name)
86
    {
87 1
        if (strpos($name, '.') === false) {
88 1
            return 'cache_time_keeper.driver.'.$name;
89
        }
90
91
        return $name;
92
    }
93
94
    /**
95
     * @param array $config
96
     * @param ContainerBuilder $container
97
     *
98
     * @return array
99
     */
100 1
    protected function mergeBackwardCompatibilityConfig(array $config, ContainerBuilder $container)
101 1
    {
102 1
        $default_config = [];
103
104 1
        if ($container->hasParameter('cache_time_keeper.driver')) {
105
            $default_config['use_driver'] = $container->getParameter('cache_time_keeper.driver');
106
        }
107
108 1
        if ($container->hasParameter('cache_time_keeper.driver.multi.fast')) {
109
            $default_config['drivers']['multi']['fast'] = $container
110
                ->getParameter('cache_time_keeper.driver.multi.fast');
111
        }
112
113 1
        if ($container->hasParameter('cache_time_keeper.driver.multi.slow')) {
114
            $default_config['drivers']['multi']['slow'] = $container
115
                ->getParameter('cache_time_keeper.driver.multi.slow');
116
        }
117
118 1
        return array_merge($default_config, $config);
119
    }
120
121
    /**
122
     * @param array $config
123
     * @param ContainerBuilder $container
124
     *
125
     * @return array
126
     */
127 1
    protected function mergeDefaultConfig(array $config, ContainerBuilder $container)
128
    {
129 1
        return array_merge([
130 1
            'use_driver' => 'file',
131
            'drivers' => [
132
                'multi' => [
133 1
                    'fast' => 'shmop',
134
                    'slow' => 'file'
135 1
                ],
136
                'shmop' => [
137 1
                    'salt' => $container->getParameter('cache_time_keeper.driver.shmop.salt')
138 1
                ],
139
                'file' => [
140 1
                    'path' => $container->getParameter('cache_time_keeper.driver.file.path')
141 1
                ],
142
                'memcached' => [
143 1
                    'prefix' => 'cache_time_keeper_',
144 1
                    'persistent_id' => 'cache_time_keeper',
145 1
                    'hosts' => []
146 1
                ]
147 1
            ]
148 1
        ], $config);
149
    }
150
}
151