Passed
Pull Request — master (#656)
by Abdul Malik
09:06 queued 02:28
created

CacheBootloader   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Test Coverage

Coverage 83.33%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 28
c 2
b 0
f 0
dl 0
loc 62
ccs 15
cts 18
cp 0.8333
rs 10
wmc 6

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A registerTypeAlias() 0 5 1
A boot() 0 5 1
A initConfig() 0 19 1
A initCacheManager() 0 9 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Spiral\Cache\Bootloader;
6
7
use Psr\SimpleCache\CacheInterface;
8
use Spiral\Boot\Bootloader\Bootloader;
9
use Spiral\Boot\DirectoriesInterface;
10
use Spiral\Boot\EnvironmentInterface;
11
use Spiral\Cache\CacheManager;
12
use Spiral\Cache\CacheStorageProviderInterface;
13
use Spiral\Cache\Config\CacheConfig;
14
use Spiral\Cache\Core\CacheInjector;
15
use Spiral\Cache\Storage\ArrayStorage;
16
use Spiral\Cache\Storage\FileStorage;
17
use Spiral\Config\ConfiguratorInterface;
18
use Spiral\Config\Patch\Append;
19
use Spiral\Core\Container;
20
21
final class CacheBootloader extends Bootloader
22
{
23
    protected const SINGLETONS = [
24
        CacheStorageProviderInterface::class => CacheManager::class,
25
        CacheManager::class => [self::class, 'initCacheManager'],
26
    ];
27
28
    private ConfiguratorInterface $config;
29
30 192
    public function __construct(ConfiguratorInterface $config)
31
    {
32 192
        $this->config = $config;
33
    }
34
35
    public function registerTypeAlias(string $storageClass, string $alias): void
36
    {
37
        $this->config->modify(
38
            'cache',
39
            new Append('typeAliases', $alias, $storageClass)
40
        );
41
    }
42
43 192
    public function boot(Container $container, EnvironmentInterface $env, DirectoriesInterface $dirs): void
44
    {
45 192
        $this->initConfig($env, $dirs);
46
47 192
        $container->bindInjector(CacheInterface::class, CacheInjector::class);
48
    }
49
50
    /**
51
     * @noRector RemoveUnusedPrivateMethodRector
52
     */
53 2
    private function initCacheManager(Container $container, CacheConfig $config): CacheManager
54
    {
55 2
        $manager = new CacheManager($config, $container);
56
57 2
        foreach ($config->getAliases() as $alias => $storageName) {
58 2
            $container->bind($alias, static fn(CacheManager $manager) => $manager->storage($storageName));
59
        }
60
61 2
        return $manager;
62
    }
63
64 192
    private function initConfig(EnvironmentInterface $env, DirectoriesInterface $dirs): void
65
    {
66 192
        $this->config->setDefaults(
67
            CacheConfig::CONFIG,
68
            [
69 192
                'default' => $env->get('CACHE_STORAGE', 'array'),
70
                'aliases' => [],
71
                'storages' => [
72
                    'array' => [
73
                        'type' => 'array',
74
                    ],
75
                    'file' => [
76 192
                        'type' => 'file',
77 192
                        'path' => $dirs->get('runtime') . 'cache',
78
                    ],
79
                ],
80
                'typeAliases' => [
81
                    'array' => ArrayStorage::class,
82
                    'file' => FileStorage::class,
83
                ],
84
            ]
85
        );
86
    }
87
}
88