Completed
Push — master ( e9ba9c...f3d53d )
by Peter
03:53 queued 01:17
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
25 1
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
26 1
        $loader->load('parameters.yml');
27 1
        $loader->load('services.yml');
28
29 1
        $configuration = new Configuration(
30 1
            $container->getParameter('cache_time_keeper.driver.shmop.salt'),
31 1
            $container->getParameter('cache_time_keeper.driver.file.path')
32 1
        );
33 1
        $config = $this->processConfiguration($configuration, $configs);
34
35 1
        $config = $this->mergeBackwardCompatibilityConfig($config, $container);
36 1
        $config = $this->mergeDefaultConfig($config, $container);
37
38
        // configure drivers
39
        $container
40 1
            ->getDefinition('cache_time_keeper.driver.shmop')
41 1
            ->replaceArgument(0, $config['drivers']['shmop']['salt']);
42
        $container
43 1
            ->getDefinition('cache_time_keeper.driver.file')
44 1
            ->replaceArgument(0, $config['drivers']['file']['path']);
45
        $container
46 1
            ->getDefinition('cache_time_keeper.driver.memcached')
47 1
            ->replaceArgument(1, $config['drivers']['memcached']['prefix']);
48
49
        // configure memcached
50
        $memcached = $container
51 1
            ->getDefinition('cache_time_keeper.memcached')
52 1
            ->replaceArgument(0, $config['drivers']['memcached']['persistent_id']);
53 1
        foreach ($config['drivers']['memcached']['hosts'] as $host) {
54
            $memcached->addMethodCall('addServer', $host);
55 1
        }
56
57
        // add service aliases
58 1
        $container->setAlias(
59 1
            'cache_time_keeper.driver',
60 1
            $this->getRealServiceName($config['use_driver'])
61 1
        );
62 1
        $container->setAlias(
63 1
            'cache_time_keeper.driver.multi.fast',
64 1
            $this->getRealServiceName($config['drivers']['multi']['fast'])
65 1
        );
66 1
        $container->setAlias(
67 1
            'cache_time_keeper.driver.multi.slow',
68 1
            $this->getRealServiceName($config['drivers']['multi']['slow'])
69 1
        );
70 1
    }
71
72
    /**
73
     * @param string $name
74
     *
75
     * @return string
76
     */
77 1
    protected function getRealServiceName($name)
78
    {
79 1
        if (strpos($name, '.') === false) {
80 1
            return 'cache_time_keeper.driver.'.$name;
81
        }
82
83
        return $name;
84
    }
85
86
    /**
87
     * @param array $config
88
     * @param ContainerBuilder $container
89
     *
90
     * @return array
91
     */
92 1
    protected function mergeBackwardCompatibilityConfig(array $config, ContainerBuilder $container)
93
    {
94 1
        $default_config = [];
95
96 1
        if ($container->hasParameter('cache_time_keeper.driver')) {
97 1
            $default_config['use_driver'] = $container->getParameter('cache_time_keeper.driver');
98
        }
99
100 1
        if ($container->hasParameter('cache_time_keeper.driver.multi.fast')) {
101
            $default_config['drivers']['multi']['fast'] = $container
102
                ->getParameter('cache_time_keeper.driver.multi.fast');
103
        }
104
105 1
        if ($container->hasParameter('cache_time_keeper.driver.multi.slow')) {
106
            $default_config['drivers']['multi']['slow'] = $container
107
                ->getParameter('cache_time_keeper.driver.multi.slow');
108
        }
109
110 1
        return array_merge($default_config, $config);
111
    }
112
113
    /**
114
     * @param array $config
115
     * @param ContainerBuilder $container
116
     *
117
     * @return array
118
     */
119 1
    protected function mergeDefaultConfig(array $config, ContainerBuilder $container)
120
    {
121 1
        return array_merge([
122 1
            'use_driver' => 'file',
123
            'drivers' => [
124
                'multi' => [
125 1
                    'fast' => 'shmop',
126
                    'slow' => 'file'
127 1
                ],
128
                'shmop' => [
129 1
                    'salt' => $container->getParameter('cache_time_keeper.driver.shmop.salt')
130 1
                ],
131
                'file' => [
132 1
                    'path' => $container->getParameter('cache_time_keeper.driver.file.path')
133 1
                ],
134
                'memcached' => [
135 1
                    'prefix' => 'cache_time_keeper_',
136 1
                    'persistent_id' => 'cache_time_keeper',
137 1
                    'hosts' => []
138 1
                ]
139 1
            ]
140 1
        ], $config);
141
    }
142
}
143