Passed
Push — master ( 5b7834...b80d67 )
by Andreas
18:18
created

cachePass::process()   A

Complexity

Conditions 6
Paths 6

Size

Total Lines 20
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 14
CRAP Score 6

Importance

Changes 0
Metric Value
cc 6
eloc 14
c 0
b 0
f 0
nc 6
nop 1
dl 0
loc 20
ccs 14
cts 14
cp 1
crap 6
rs 9.2222
1
<?php
2
namespace midcom\bundle\dependencyInjection;
3
4
use Symfony\Component\DependencyInjection\ContainerBuilder;
5
use Symfony\Component\DependencyInjection\Reference;
6
use Doctrine\Common\Cache;
7
use midcom_services_cache_module_memcache;
8
use Symfony\Component\DependencyInjection\Compiler\CompilerPassInterface;
9
10
class cachePass implements CompilerPassInterface
11
{
12 4
    public function process(ContainerBuilder $container)
13
    {
14 4
        foreach ($container->getParameter('midcom.cache_autoload_queue') as $name) {
15 4
            $container->getDefinition('cache')
16 4
                ->addMethodCall('add_module', [$name, new Reference('cache.module.' . $name)]);
17
18 4
            if (in_array($name, ['nap', 'memcache'])) {
19 3
                if ($driver = $container->getParameter('midcom.cache_module_memcache_backend')) {
20 3
                    $config = $container->getParameter('midcom.cache_module_memcache_backend_config');
21 3
                    $this->configure_backend($name, $driver, $config, $container);
22
                }
23
            } else {
24 1
                $config = $container->getParameter('midcom.cache_module_content_backend');
25 1
                if (!empty($config['driver'])) {
26 1
                    if (!isset($config['directory'])) {
27 1
                        $config['directory'] = 'content/';
28
                    }
29
30 1
                    $this->configure_backend('content', $config['driver'], $config, $container);
0 ignored issues
show
Bug introduced by
It seems like $config can also be of type boolean and double and integer and null and string; however, parameter $config of midcom\bundle\dependency...ss::configure_backend() does only seem to accept array, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

30
                    $this->configure_backend('content', $config['driver'], /** @scrutinizer ignore-type */ $config, $container);
Loading history...
31 1
                    $this->configure_backend('content_data', $config['driver'], $config, $container);
32
                }
33
            }
34
        }
35 4
    }
36
37 4
    private function configure_backend(string $name, string $driver, array $config, ContainerBuilder $container)
38
    {
39 4
        $backend = $container->getDefinition('cache.module.' . $name . '.backend');
40 4
        $directory = $container->getParameter('kernel.cache_dir');
41
42 4
        if (!empty($config['directory'])) {
43 1
            $directory .= '/' . $config['directory'];
44
        }
45
46 4
        switch ($driver) {
47 4
            case 'apc':
48 1
                $backend->setClass(Cache\ApcuCache::class);
49 1
                break;
50 3
            case 'memcached':
51 1
                if ($memcached = midcom_services_cache_module_memcache::prepare_memcached($config)) {
52
53 1
                    $definition = $container->register('cache.memcached.' . $name, \Memcached::class);
54 1
                    $server = $memcached->getServerList()[0];
55 1
                    $definition->addMethodCall('addServer', [$server['host'], $server['port']]);
56
57 1
                    $backend->setClass(Cache\MemcachedCache::class);
58 1
                    $backend->addMethodCall('setMemcached', [$definition]);
59 1
                    break;
60
                }
61
                // fall-through
62 2
            case 'dba':
63 2
            case 'flatfile':
64 1
                $backend->setClass(Cache\FilesystemCache::class);
65 1
                $backend->addArgument($directory . '/' . $name);
66 1
                break;
67 1
            case 'sqlite':
68 1
                $definition = $container->register('cache.sqlite.' . $name, \SQLite3::class);
69 1
                $definition->setArguments(["{$directory}/sqlite.db"]);
70
71 1
                $backend->setClass(Cache\SQLite3Cache::class);
72 1
                $backend->setArguments([$definition, $name]);
73 1
                break;
74
        }
75 4
    }
76
77
}