Passed
Push — 1.0.x ( dee16f...ad427f )
by Koldo
10:23
created

Configuration   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 87
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
eloc 62
c 1
b 0
f 0
dl 0
loc 87
ccs 64
cts 64
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getConfigTreeBuilder() 0 20 1
A addStrategyTypes() 0 13 1
A addSegmentTypes() 0 13 1
A addToggles() 0 30 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'])
25 12
            ->end()
26 12
            ->scalarNode('prefix')
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

26
            ->/** @scrutinizer ignore-call */ scalarNode('prefix')
Loading history...
27 12
                ->defaultValue('')
28 12
            ->end()
29 12
        ->end();
30
31 12
        $this->addStrategyTypes($rootNode);
32 12
        $this->addSegmentTypes($rootNode);
33 12
        $this->addToggles($rootNode);
34
35 12
        return $treeBuilder;
36
    }
37
38 12
    private function addStrategyTypes(ArrayNodeDefinition $rootNode): void
39
    {
40
        /** @phpstan-ignore-next-line */
41
        $rootNode
42 12
            ->children()
43 12
                ->arrayNode('strategy_types')
44 12
                    ->arrayPrototype()
45 12
                        ->children()
46 12
                            ->scalarNode('type')->end()
47 12
                            ->scalarNode('factory_id')->end()
48 12
                        ->end()
49 12
                    ->end()
50 12
                ->end();
51 12
    }
52
53 12
    private function addSegmentTypes(ArrayNodeDefinition $rootNode): void
54
    {
55
        /** @phpstan-ignore-next-line */
56
        $rootNode
57 12
            ->children()
58 12
                ->arrayNode('segment_types')
59 12
                    ->arrayPrototype()
60 12
                        ->children()
61 12
                            ->scalarNode('type')->end()
62 12
                            ->scalarNode('factory_id')->end()
63 12
                        ->end()
64 12
                    ->end()
65 12
                ->end();
66 12
    }
67
68 12
    private function addToggles(ArrayNodeDefinition $rootNode): void
69
    {
70
        /** @phpstan-ignore-next-line */
71
        $rootNode
72 12
            ->children()
73 12
                ->arrayNode('toggles')
74 12
                    ->arrayPrototype()
75 12
                        ->children()
76 12
                            ->scalarNode('id')->end()
77 12
                            ->scalarNode('enabled')->end()
78 12
                            ->arrayNode('strategies')
79 12
                                ->arrayPrototype()
80 12
                                    ->children()
81 12
                                        ->scalarNode('strategy_id')->end()
82 12
                                        ->scalarNode('strategy_type')->end()
83 12
                                        ->arrayNode('segments')
84 12
                                            ->arrayPrototype()
85 12
                                                ->children()
86 12
                                                    ->scalarNode('segment_id')->end()
87 12
                                                    ->scalarNode('segment_type')->end()
88 12
                                                    ->variableNode('criteria')->end()
89 12
                                                ->end()
90 12
                                            ->end()
91 12
                                        ->end()
92 12
                                    ->end()
93 12
                                ->end()
94 12
                            ->end()
95 12
                        ->end()
96 12
                    ->end()
97 12
                ->end();
98 12
    }
99
}
100