Completed
Push — master ( 6e12de...23243d )
by Peter
03:07
created

mergeBackwardCompatibilityConfig()   A

Complexity

Conditions 4
Paths 8

Size

Total Lines 20
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 6

Importance

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