Test Failed
Pull Request — master (#8)
by Timo
03:25
created

CacheConfigHelper   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 67
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 6
dl 0
loc 67
rs 10
c 0
b 0
f 0
ccs 14
cts 14
cp 1

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getDriver() 0 9 2
A _getDriverClass() 0 8 2
A getContainer() 0 9 1
A getCacheManager() 0 3 1
1
<?php
2
3
namespace hamburgscleanest\GuzzleAdvancedThrottle\Cache\Helpers;
4
5
use hamburgscleanest\GuzzleAdvancedThrottle\Cache\Drivers\FileDriver;
6
use hamburgscleanest\GuzzleAdvancedThrottle\Cache\Drivers\LaravelDriver;
7
use hamburgscleanest\GuzzleAdvancedThrottle\Cache\Drivers\MemcachedDriver;
8
use hamburgscleanest\GuzzleAdvancedThrottle\Cache\Drivers\RedisDriver;
9
use hamburgscleanest\GuzzleAdvancedThrottle\Exceptions\LaravelCacheDriverNotSetException;
10
use hamburgscleanest\GuzzleAdvancedThrottle\Exceptions\UnknownLaravelDriverException;
11
use Illuminate\Cache\CacheManager;
12
use Illuminate\Config\Repository;
13
use Illuminate\Container\Container;
14
15
/**
16
 * Class CacheConfigHelper
17
 * @package hamburgscleanest\GuzzleAdvancedThrottle\Cache\Helpers
18
 */
19
class CacheConfigHelper
20
{
21
22
    /** @var array */
23
    private const DRIVERS = [
24
        'file'      => FileDriver::class,
25 4
        'redis'     => RedisDriver::class,
26
        'memcached' => MemcachedDriver::class
27 4
    ];
28
29
    /**
30
     * @param Repository $config
31
     * @return CacheManager
32
     * @throws \hamburgscleanest\GuzzleAdvancedThrottle\Exceptions\UnknownLaravelDriverException
33
     * @throws \hamburgscleanest\GuzzleAdvancedThrottle\Exceptions\LaravelCacheDriverNotSetException
34
     */
35 5
    public static function getCacheManager(Repository $config) : CacheManager
36
    {
37 5
        return new CacheManager(self::getContainer($config));
38
    }
39 5
40
    /**
41 5
     * @param Repository $config
42
     * @return Container
43 5
     * @throws \hamburgscleanest\GuzzleAdvancedThrottle\Exceptions\UnknownLaravelDriverException
44
     * @throws \hamburgscleanest\GuzzleAdvancedThrottle\Exceptions\LaravelCacheDriverNotSetException
45
     */
46 5
    public static function getContainer(Repository $config) : Container
47
    {
48 5
        $driverName = self::getDriver($config);
49
        $driverClass = self::_getDriverClass($driverName);
50
51
        /** @var LaravelDriver $driverClass */
52
        $driverClass = new $driverClass($driverName, $config['options'] ?? []);
53
54
        return $driverClass->getContainer();
55
    }
56 7
57
    /**
58 7
     * @param Repository $config
59 7
     * @return string
60
     * @throws \hamburgscleanest\GuzzleAdvancedThrottle\Exceptions\LaravelCacheDriverNotSetException
61 1
     */
62
    public static function getDriver(Repository $config) : string
63
    {
64 6
        $driver = $config->get('driver');
65
        if ($driver === null)
66
        {
67
            throw new LaravelCacheDriverNotSetException();
68
        }
69
70
        return $driver;
71
    }
72
73
    /**
74
     * @param string $driverName
75
     * @return string
76
     * @throws \hamburgscleanest\GuzzleAdvancedThrottle\Exceptions\UnknownLaravelDriverException
77
     */
78
    private static function _getDriverClass(string $driverName) : string
79
    {
80
        if (!isset(self::DRIVERS[$driverName]))
81
        {
82
            throw new UnknownLaravelDriverException($driverName, self::DRIVERS);
83
        }
84
85
        return self::DRIVERS[$driverName];
86
    }
87
}