Passed
Push — 1.0.x ( f6393b...b99dc9 )
by Koldo
25:39 queued 22:42
created

ToggleConfig::driver()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Pheature\Crud\Psr11\Toggle;
6
7
use Webmozart\Assert\Assert;
8
9
final class ToggleConfig
10
{
11
    public const DRIVER_IN_MEMORY = 'inmemory';
12
    public const DRIVER_DBAL = 'dbal';
13
    private const VALID_DRIVERS = [
14
        self::DRIVER_IN_MEMORY,
15
        self::DRIVER_DBAL,
16
    ];
17
18
    private string $driver;
19
    private bool $apiEnabled;
20
    private string $apiPrefix;
21
    /** @var array<array<string, string>> */
22
    private array $strategyTypes;
23
    /** @var array<array<string, string>> */
24
    private array $segmentTypes;
25
    /** @var array<string, mixed> */
26
    private array $toggles;
27
28
    /**
29
     * @param array<string, mixed> $config
30
     */
31 12
    public function __construct(array $config)
32
    {
33 12
        $this->assertDriver($config);
34 9
        Assert::keyExists($config, 'api_enabled');
35 9
        Assert::boolean($config['api_enabled']);
36 9
        Assert::keyExists($config, 'api_prefix');
37 9
        Assert::string($config['api_prefix']);
38
39 9
        $this->apiEnabled = $config['api_enabled'];
40 9
        $this->apiPrefix = $config['api_prefix'];
41 9
        $this->driver = (string) $config['driver'];
42 9
        $this->strategyTypes = [];
43 9
        $this->segmentTypes = [];
44 9
        $this->toggles = [];
45
46 9
        if (array_key_exists('strategy_types', $config)) {
47 1
            Assert::isArray($config['strategy_types']);
48
            /** @var array<array<string, string>> $strategyTypes */
49 1
            $strategyTypes = $config['strategy_types'];
50 1
            $this->strategyTypes = $strategyTypes;
51
        }
52
53 9
        if (array_key_exists('segment_types', $config)) {
54 1
            Assert::isArray($config['segment_types']);
55
            /** @var array<array<string, string>> $segmentTypes */
56 1
            $segmentTypes = $config['segment_types'];
57 1
            $this->segmentTypes = $segmentTypes;
58
        }
59
60 9
        if (array_key_exists('toggles', $config)) {
61 1
            Assert::isArray($config['toggles']);
62
            /** @var array<string, mixed> $toggles */
63 1
            $toggles = $config['toggles'];
64 1
            $this->toggles = $toggles;
65
        }
66 9
    }
67
68
    /**
69
     * @param array<string, mixed> $config
70
     * @return void
71
     */
72 12
    private function assertDriver(array $config): void
73
    {
74 12
        Assert::keyExists($config, 'driver');
75 11
        Assert::string($config['driver']);
76 11
        Assert::inArray($config['driver'], self::VALID_DRIVERS);
77 9
    }
78
79
    public function apiEnabled(): bool
80
    {
81
        return $this->apiEnabled;
82
    }
83
84
    public function apiPrefix(): string
85
    {
86
        return $this->apiPrefix;
87
    }
88
89 8
    public function driver(): string
90
    {
91 8
        return $this->driver;
92
    }
93
94
    /**
95
     * @return array<array<string, string>>
96
     */
97
    public function strategyTypes(): array
98
    {
99
        return $this->strategyTypes;
100
    }
101
102
    /**
103
     * @return array<array<string, string>>
104
     */
105
    public function segmentTypes(): array
106
    {
107
        return $this->segmentTypes;
108
    }
109
110
    /**
111
     * @return array<string, mixed>
112
     */
113 2
    public function toggles(): array
114
    {
115 2
        return $this->toggles;
116
    }
117
}
118