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

ToggleConfig   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 107
Duplicated Lines 0 %

Test Coverage

Coverage 80.95%

Importance

Changes 2
Bugs 0 Features 1
Metric Value
eloc 44
c 2
b 0
f 1
dl 0
loc 107
ccs 34
cts 42
cp 0.8095
rs 10
wmc 11

8 Methods

Rating   Name   Duplication   Size   Complexity  
A strategyTypes() 0 3 1
A driver() 0 3 1
A toggles() 0 3 1
A __construct() 0 34 4
A segmentTypes() 0 3 1
A apiPrefix() 0 3 1
A apiEnabled() 0 3 1
A assertDriver() 0 5 1
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