Completed
Push — master ( a77802...307218 )
by Peter
04:13
created

AnimeDbCacheTimeKeeperExtension   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 106
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 6

Test Coverage

Coverage 100%

Importance

Changes 7
Bugs 0 Features 3
Metric Value
wmc 8
c 7
b 0
f 3
lcom 1
cbo 6
dl 0
loc 106
ccs 17
cts 17
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
B load() 0 33 1
A getRealServiceName() 0 8 2
A mergeBackwardCompatibilityConfig() 0 20 4
A mergeConfig() 0 18 1
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 1
        $config = $this->processConfiguration(new Configuration(), $configs);
33 1
34 1
        // for backward compatibility merge config from global parameters
35
        $config = $this->mergeBackwardCompatibilityConfig($config, $container);
36 1
37 1
        $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
38 1
        $loader->load('parameters.yml');
39 1
        $loader->load('services.yml');
40 1
41 1
        // merge default config
42 1
        $config = $this->mergeConfig($config, $container);
43 1
44 1
        $container->getDefinition('cache_time_keeper.driver.shmop')
45 1
            ->setArguments([$config['drivers']['shmop']['salt']]);
46 1
        $container->getDefinition('cache_time_keeper.driver.file')
47 1
            ->setArguments([$config['drivers']['file']['path']]);
48 1
49
        $container->setAlias(
50
            'cache_time_keeper.driver',
51
            $this->getRealServiceName($config['use_driver'])
52
        );
53
54
        $container->setAlias(
55
            'cache_time_keeper.driver.multi.fast',
56
            $this->getRealServiceName($config['drivers']['multi']['fast'])
57
        );
58
        $container->setAlias(
59
            'cache_time_keeper.driver.multi.slow',
60
            $this->getRealServiceName($config['drivers']['multi']['slow'])
61
        );
62
    }
63
64
    /**
65
     * @param string $name
66
     *
67
     * @return string
68
     */
69
    protected function getRealServiceName($name)
70
    {
71
        if (strpos($name, '.') === false) {
72
            return 'cache_time_keeper.driver.'.$name;
73
        }
74
75
        return $name;
76
    }
77
78
    /**
79
     * @param array $config
80
     * @param ContainerBuilder $container
81
     *
82
     * @return array
83
     */
84
    protected function mergeBackwardCompatibilityConfig(array $config, ContainerBuilder $container)
85
    {
86
        $default_config = [];
87
88
        if ($container->hasParameter('cache_time_keeper.driver')) {
89
            $default_config['use_driver'] = $container->getParameter('cache_time_keeper.driver');
90
        }
91
92
        if ($container->hasParameter('cache_time_keeper.driver.multi.fast')) {
93
            $default_config['drivers']['multi']['fast'] = $container
94
                ->getParameter('cache_time_keeper.driver.multi.fast');
95
        }
96
97
        if ($container->hasParameter('cache_time_keeper.driver.multi.slow')) {
98
            $default_config['drivers']['multi']['slow'] = $container
99
                ->getParameter('cache_time_keeper.driver.multi.slow');
100
        }
101
102
        return array_merge($default_config, $config);
103
    }
104
105
    /**
106
     * @param array $config
107
     * @param ContainerBuilder $container
108
     *
109
     * @return array
110
     */
111
    protected function mergeConfig(array $config, ContainerBuilder $container)
112
    {
113
        return array_merge([
114
            'use_driver' => $container->getParameter('cache_time_keeper.driver'),
115
            'drivers' => [
116
                'multi' => [
117
                    'fast' => $container->getParameter('cache_time_keeper.driver.multi.fast'),
118
                    'slow' => $container->getParameter('cache_time_keeper.driver.multi.slow')
119
                ],
120
                'shmop' => [
121
                    'salt' => $container->getParameter('cache_time_keeper.driver.shmop.salt')
122
                ],
123
                'file' => [
124
                    'path' => $container->getParameter('cache_time_keeper.driver.file.path')
125
                ]
126
            ]
127
        ], $config);
128
    }
129
}
130