Configuration::addSegmentTypes()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 13
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 11
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 10
c 0
b 0
f 0
dl 0
loc 13
ccs 11
cts 11
cp 1
rs 9.9332
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Pheature\Community\Symfony\DependencyInjection;
6
7
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
8
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
9
use Symfony\Component\Config\Definition\ConfigurationInterface;
10
11
final class Configuration implements ConfigurationInterface
12
{
13
    /**
14
     * @return TreeBuilder
15
     */
16 12
    public function getConfigTreeBuilder(): TreeBuilder
17
    {
18 12
        $treeBuilder = new TreeBuilder('pheature_flags');
19
        /** @var ArrayNodeDefinition $rootNode */
20 12
        $rootNode = $treeBuilder->getRootNode();
21
        /** @phpstan-ignore-next-line */
22 12
        $rootNode->children()
23 12
            ->enumNode('driver')
24 12
                ->values(['inmemory', 'dbal', 'chain'])
25 12
            ->end()
26 12
            ->arrayNode('driver_options')
0 ignored issues
show
Bug introduced by
The method arrayNode() does not exist on Symfony\Component\Config...der\NodeParentInterface. It seems like you code against a sub-type of Symfony\Component\Config...der\NodeParentInterface such as Symfony\Component\Config...ion\Builder\NodeBuilder. ( Ignorable by Annotation )

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

26
            ->/** @scrutinizer ignore-call */ arrayNode('driver_options')
Loading history...
27 12
                ->scalarPrototype()->end()
28 12
            ->end()
29 12
            ->scalarNode('api_prefix')
30 12
                ->defaultValue('')
31 12
            ->end()
32 12
            ->booleanNode('api_enabled')
33
                ->defaultFalse()
34 12
            ->end()
35 12
        ->end();
36 12
37
        $this->addStrategyTypes($rootNode);
38 12
        $this->addSegmentTypes($rootNode);
39
        $this->addToggles($rootNode);
40
41 12
        return $treeBuilder;
42
    }
43
44
    private function addStrategyTypes(ArrayNodeDefinition $rootNode): void
45 12
    {
46 12
        /** @phpstan-ignore-next-line */
47 12
        $rootNode
48 12
            ->children()
49 12
                ->arrayNode('strategy_types')
50 12
                    ->arrayPrototype()
51 12
                        ->children()
52 12
                            ->scalarNode('type')->end()
53 12
                            ->scalarNode('factory_id')->end()
0 ignored issues
show
Bug introduced by
The method scalarNode() does not exist on Symfony\Component\Config...der\NodeParentInterface. It seems like you code against a sub-type of Symfony\Component\Config...der\NodeParentInterface such as Symfony\Component\Config...ion\Builder\NodeBuilder. ( Ignorable by Annotation )

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

53
                            ->/** @scrutinizer ignore-call */ scalarNode('factory_id')->end()
Loading history...
54 12
                        ->end()
55
                    ->end()
56 12
                ->end();
57
    }
58
59
    private function addSegmentTypes(ArrayNodeDefinition $rootNode): void
60 12
    {
61 12
        /** @phpstan-ignore-next-line */
62 12
        $rootNode
63 12
            ->children()
64 12
                ->arrayNode('segment_types')
65 12
                    ->arrayPrototype()
66 12
                        ->children()
67 12
                            ->scalarNode('type')->end()
68 12
                            ->scalarNode('factory_id')->end()
69 12
                        ->end()
70
                    ->end()
71 12
                ->end();
72
    }
73
74
    private function addToggles(ArrayNodeDefinition $rootNode): void
75 12
    {
76 12
        /** @phpstan-ignore-next-line */
77 12
        $rootNode
78 12
            ->children()
79 12
                ->arrayNode('toggles')
80 12
                    ->arrayPrototype()
81 12
                        ->children()
82 12
                            ->scalarNode('id')->end()
83 12
                            ->scalarNode('enabled')->end()
84 12
                            ->arrayNode('strategies')
85 12
                                ->arrayPrototype()
86 12
                                    ->children()
87 12
                                        ->scalarNode('strategy_id')->end()
88 12
                                        ->scalarNode('strategy_type')->end()
89 12
                                        ->arrayNode('segments')
90 12
                                            ->arrayPrototype()
91 12
                                                ->children()
92 12
                                                    ->scalarNode('segment_id')->end()
93 12
                                                    ->scalarNode('segment_type')->end()
94 12
                                                    ->variableNode('criteria')->end()
95 12
                                                ->end()
96 12
                                            ->end()
97 12
                                        ->end()
98 12
                                    ->end()
99 12
                                ->end()
100 12
                            ->end()
101 12
                        ->end()
102
                    ->end()
103
                ->end();
104
    }
105
}
106