Completed
Push — master ( 4c7b9c...e919dc )
by Kamil
21:11
created

Configuration   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Importance

Changes 3
Bugs 1 Features 0
Metric Value
wmc 5
lcom 1
cbo 4
dl 0
loc 79
rs 10
c 3
b 1
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A getConfigTreeBuilder() 0 9 1
A buildSuitesNode() 0 13 1
A buildFixturesNode() 0 12 1
A buildListenersNode() 0 12 1
A buildAttributesNode() 0 11 1
1
<?php
2
3
/*
4
 * This file is part of the Sylius package.
5
 *
6
 * (c) Paweł Jędrzejewski
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Sylius\Bundle\FixturesBundle\DependencyInjection;
13
14
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
15
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
16
use Symfony\Component\Config\Definition\ConfigurationInterface;
17
18
/**
19
 * @author Kamil Kokot <[email protected]>
20
 */
21
final class Configuration implements ConfigurationInterface
22
{
23
    /**
24
     * {@inheritdoc}
25
     */
26
    public function getConfigTreeBuilder()
27
    {
28
        $treeBuilder = new TreeBuilder();
29
        $rootNode = $treeBuilder->root('sylius_fixtures');
30
31
        $this->buildSuitesNode($rootNode);
32
33
        return $treeBuilder;
34
    }
35
36
    /**
37
     * @param ArrayNodeDefinition $rootNode
38
     */
39
    private function buildSuitesNode(ArrayNodeDefinition $rootNode)
40
    {
41
        /** @var ArrayNodeDefinition $suitesNode */
42
        $suitesNode = $rootNode
43
            ->children()
44
                ->arrayNode('suites')
45
                    ->useAttributeAsKey('name')
46
                    ->prototype('array')
47
        ;
48
49
        $this->buildFixturesNode($suitesNode);
50
        $this->buildListenersNode($suitesNode);
51
    }
52
53
    /**
54
     * @param ArrayNodeDefinition $suitesNode
55
     */
56
    private function buildFixturesNode(ArrayNodeDefinition $suitesNode)
57
    {
58
        /** @var ArrayNodeDefinition $fixturesNode */
59
        $fixturesNode = $suitesNode
60
            ->children()
61
                ->arrayNode('fixtures')
62
                    ->useAttributeAsKey('name')
63
                    ->prototype('array')
64
        ;
65
66
        $this->buildAttributesNode($fixturesNode);
67
    }
68
69
    /**
70
     * @param ArrayNodeDefinition $suitesNode
71
     */
72
    private function buildListenersNode(ArrayNodeDefinition $suitesNode)
73
    {
74
        /** @var ArrayNodeDefinition $listenersNode */
75
        $listenersNode = $suitesNode
76
            ->children()
77
                ->arrayNode('listeners')
78
                    ->useAttributeAsKey('name')
79
                    ->prototype('array')
80
        ;
81
82
        $this->buildAttributesNode($listenersNode);
83
    }
84
85
    /**
86
     * @param ArrayNodeDefinition $node
87
     */
88
    private function buildAttributesNode(ArrayNodeDefinition $node)
89
    {
90
        $attributesNodeBuilder = $node->canBeUnset()->children();
91
        $attributesNodeBuilder->integerNode('priority')->defaultValue(0);
92
93
        /** @var ArrayNodeDefinition $optionsNode */
94
        $optionsNode = $attributesNodeBuilder->arrayNode('options');
95
        $optionsNode->addDefaultChildrenIfNoneSet();
96
        $optionsNode->beforeNormalization()->always(function ($value) { return [$value]; });
97
        $optionsNode->prototype('variable');
98
    }
99
}
100