YamlStandardConfigDefinition   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 104
Duplicated Lines 0 %

Test Coverage

Coverage 98.33%

Importance

Changes 7
Bugs 1 Features 0
Metric Value
wmc 6
eloc 74
c 7
b 1
f 0
dl 0
loc 104
ccs 59
cts 60
cp 0.9833
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
B buildItemsNode() 0 62 5
A getConfigTreeBuilder() 0 10 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace YamlStandards\Model\Config;
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
class YamlStandardConfigDefinition implements ConfigurationInterface
12
{
13
    public const CONFIG_PATHS_TO_CHECK = 'pathsToCheck';
14
    public const CONFIG_EXCLUDED_PATHS = 'excludedPaths';
15
    public const CONFIG_CHECKERS = 'checkers';
16
    public const CONFIG_PATH_TO_CHECKER = 'pathToChecker';
17
    public const CONFIG_PARAMETERS_FOR_CHECKER = 'parameters';
18
    public const CONFIG_PARAMETERS_DEPTH = 'depth';
19
    public const CONFIG_PARAMETERS_INDENTS = 'indents';
20
    public const CONFIG_PARAMETERS_LEVEL = 'level';
21
    public const CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE = 'serviceAliasingType';
22
    public const CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT = 'indentsCommentsWithoutParent';
23
    public const CONFIG_PARAMETERS_ALPHABETICAL_PRIORITIZED_KEYS = 'prioritizedKeys';
24
    public const CONFIG_PARAMETERS_IGNORE_COMMENTS_INDENT = 'ignoreCommentsIndent';
25
26
    public const CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_SHORT = 'short';
27
    public const CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_LONG = 'long';
28
29
    public const CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_DEFAULT = 'default';
30
    public const CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_PRESERVED = 'preserved';
31
32
    private const REGEX_FILE_EXTENSION = '/\..+$/';
33
34
    /**
35
     * @inheritDoc
36
     */
37 10
    public function getConfigTreeBuilder(): TreeBuilder
38
    {
39 10
        $treeBuilder = new TreeBuilder('yaml_standards_config');
40
41
        /** @var \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $rootNode */
42 10
        $rootNode = $treeBuilder->getRootNode();
43
44 10
        $this->buildItemsNode($rootNode->arrayPrototype());
45
46 10
        return $treeBuilder;
47
    }
48
49
    /**
50
     * @param \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition $node
51
     * @return \Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition
52
     */
53 10
    private function buildItemsNode(ArrayNodeDefinition $node): ArrayNodeDefinition
54
    {
55 10
        return $node
56 10
            ->children()
57 10
                ->arrayNode(self::CONFIG_PATHS_TO_CHECK)->isRequired()->cannotBeEmpty()
58 10
                    ->validate()
59 10
                        ->ifTrue(function (array $patterns) {
60 10
                            foreach ($patterns as $pattern) {
61 10
                                if (preg_match(self::REGEX_FILE_EXTENSION, $pattern) === 0) {
62 1
                                    return true;
63
                                }
64
                            }
65
66 9
                            return false;
67 10
                        })
68 10
                        ->thenInvalid('Invalid pattern: %s. Pattern must have to suffix defined.')
69 10
                    ->end()
70 10
                    ->/** @scrutinizer ignore-call */prototype('scalar')->end()
71 10
                ->/** @scrutinizer ignore-call */end()
72 10
                ->arrayNode(self::CONFIG_EXCLUDED_PATHS)
73 10
                    ->validate()
74 10
                        ->ifTrue(function (array $patterns) {
75 5
                            foreach ($patterns as $pattern) {
76 5
                                if (preg_match(self::REGEX_FILE_EXTENSION, $pattern) === 0) {
77
                                    return true;
78
                                }
79
                            }
80
81 5
                            return false;
82 10
                        })
83 10
                        ->thenInvalid('Invalid pattern: %s. Pattern must have to suffix defined.')
84 10
                    ->end()
85 10
                    ->prototype('scalar')->end()
86 10
                ->end()
87 10
                ->arrayNode(self::CONFIG_CHECKERS)
88 10
                    ->isRequired()
89 10
                    ->arrayPrototype()
90 10
                        ->children()
91 10
                            ->scalarNode(self::CONFIG_PATH_TO_CHECKER)->defaultNull()->end()
92 10
                            ->arrayNode(self::CONFIG_PARAMETERS_FOR_CHECKER)
93 10
                                ->addDefaultsIfNotSet()
94 10
                                    ->children()
95 10
                                        ->scalarNode(self::CONFIG_PARAMETERS_DEPTH)->defaultValue(4)->end()
96 10
                                        ->scalarNode(self::CONFIG_PARAMETERS_INDENTS)->defaultValue(4)->end()
97 10
                                        ->scalarNode(self::CONFIG_PARAMETERS_LEVEL)->defaultValue(2)->end()
98 10
                                        ->enumNode(self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE)->defaultValue(self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_SHORT)->values([
99 10
                                            self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_SHORT,
100 10
                                            self::CONFIG_PARAMETERS_SERVICE_ALIASING_TYPE_VALUE_LONG,
101 10
                                        ])->end()
102 10
                                        ->enumNode(self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT)->defaultValue(self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_DEFAULT)->values([
103 10
                                            self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_DEFAULT,
104 10
                                            self::CONFIG_PARAMETERS_INDENTS_COMMENTS_WITHOUT_PARENT_VALUE_PRESERVED,
105 10
                                        ])->end()
106 10
                                        ->booleanNode(self::CONFIG_PARAMETERS_IGNORE_COMMENTS_INDENT)->defaultValue(false)->end()
107 10
                                        ->arrayNode(self::CONFIG_PARAMETERS_ALPHABETICAL_PRIORITIZED_KEYS)->prototype('scalar')->end()
108 10
                                    ->end()
109 10
                                ->end()
110 10
                            ->end()
111 10
                        ->end()
112 10
                    ->end()
113 10
                ->end()
114 10
            ->end();
115
    }
116
}
117