Completed
Push — master ( 2e43ad...abbc89 )
by Peter
03:18
created

AnimeDbCacheTimeKeeperExtension   A

Complexity

Total Complexity 12

Size/Duplication

Total Lines 122
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 100%

Importance

Changes 12
Bugs 1 Features 3
Metric Value
wmc 12
c 12
b 1
f 3
lcom 1
cbo 6
dl 0
loc 122
ccs 67
cts 67
cp 1
rs 10

4 Methods

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