Completed
Push — master ( d49b5b...4e7074 )
by Eric
08:11
created

Configuration::createEventNode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 8
ccs 6
cts 6
cp 1
rs 9.4285
cc 1
eloc 6
nc 1
nop 0
crap 1
1
<?php
2
3
/*
4
 * This file is part of the Ivory Serializer bundle package.
5
 *
6
 * (c) Eric GELOEN <[email protected]>
7
 *
8
 * For the full copyright and license information, please read the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Ivory\SerializerBundle\DependencyInjection;
13
14
use Doctrine\Common\Annotations\AnnotationReader;
15
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
16
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
17
use Symfony\Component\Config\Definition\ConfigurationInterface;
18
use Symfony\Component\EventDispatcher\EventDispatcher;
19
20
/**
21
 * @author GeLo <[email protected]>
22
 */
23
class Configuration implements ConfigurationInterface
24
{
25
    /**
26
     * {@inheritdoc}
27
     */
28 234
    public function getConfigTreeBuilder()
29
    {
30 234
        $treeBuilder = $this->createTreeBuilder();
31 234
        $treeBuilder->root('ivory_serializer')
32 234
            ->children()
33 234
            ->append($this->createEventNode())
34 234
            ->append($this->createMappingNode())
35 234
            ->append($this->createTypesNode())
36 234
            ->append($this->createVisitorsNode());
37
38 234
        return $treeBuilder;
39
    }
40
41
    /**
42
     * @return ArrayNodeDefinition
43
     */
44 234
    private function createMappingNode()
45
    {
46 234
        return $this->createNode('mapping')
47 234
            ->addDefaultsIfNotSet()
48 234
            ->children()
49 234
                ->booleanNode('annotation')->defaultValue(class_exists(AnnotationReader::class))->end()
50 234
                ->booleanNode('reflection')->defaultTrue()->end()
51 234
                ->arrayNode('cache')
52 234
                    ->addDefaultsIfNotSet()
53 234
                    ->children()
54 234
                        ->scalarNode('prefix')->defaultValue('ivory_serializer')->end()
55 234
                        ->scalarNode('pool')->defaultValue('cache.system')->end()
56 234
                    ->end()
57 234
                ->end()
58 234
                ->arrayNode('auto')
59 234
                    ->addDefaultsIfNotSet()
60 234
                    ->children()
61 234
                        ->booleanNode('enabled')->defaultTrue()->end()
62 234
                        ->arrayNode('paths')
63 234
                            ->prototype('scalar')->end()
64 234
                            ->defaultValue([
65 234
                                'Resources/config/serializer',
66 182
                                'Resources/config/serialization.json',
67 182
                                'Resources/config/serialization.xml',
68 182
                                'Resources/config/serialization.yml',
69 182
                            ])
70 234
                        ->end()
71 234
                    ->end()
72 234
                ->end()
73 234
                ->arrayNode('paths')
74 234
                    ->prototype('scalar')->end()
75 234
                ->end()
76 234
            ->end();
77
    }
78
79
    /**
80
     * @return ArrayNodeDefinition
81
     */
82 234
    private function createEventNode()
83
    {
84 234
        return $this->createNode('event')
85 234
            ->addDefaultsIfNotSet()
86 234
            ->children()
87 234
                ->booleanNode('enabled')->defaultValue(class_exists(EventDispatcher::class))->end()
88 234
            ->end();
89
    }
90
91
    /**
92
     * @return ArrayNodeDefinition
93
     */
94 234
    private function createTypesNode()
95
    {
96 234
        return $this->createNode('types')
97 234
            ->addDefaultsIfNotSet()
98 234
            ->children()
99 234
                ->arrayNode('date_time')
100 234
                    ->addDefaultsIfNotSet()
101 234
                    ->children()
102 234
                        ->scalarNode('format')->defaultValue(\DateTime::RFC3339)->end()
103 234
                        ->scalarNode('timezone')->defaultValue(date_default_timezone_get())->end()
104 234
                    ->end()
105 234
                ->end()
106 234
                ->arrayNode('exception')
107 234
                    ->addDefaultsIfNotSet()
108 234
                    ->children()
109 234
                        ->booleanNode('debug')->defaultValue('%kernel.debug%')->end()
110 234
                    ->end()
111 234
                ->end()
112 234
            ->end();
113
    }
114
115
    /**
116
     * @return ArrayNodeDefinition
117
     */
118 234
    private function createVisitorsNode()
119
    {
120 234
        return $this->createNode('visitors')
121 234
            ->addDefaultsIfNotSet()
122 234
            ->children()
123 234
                ->arrayNode('csv')
124 234
                    ->addDefaultsIfNotSet()
125 234
                    ->children()
126 234
                        ->scalarNode('delimiter')->defaultValue(',')->end()
127 234
                        ->scalarNode('enclosure')->defaultValue('"')->end()
128 234
                        ->scalarNode('escape_char')->defaultValue('\\')->end()
129 234
                        ->scalarNode('key_separator')->defaultValue('.')->end()
130 234
                    ->end()
131 234
                ->end()
132 234
                ->arrayNode('json')
133 234
                    ->addDefaultsIfNotSet()
134 234
                    ->children()
135 234
                        ->integerNode('max_depth')->defaultValue(512)->end()
136 234
                        ->integerNode('options')->defaultValue(0)->end()
137 234
                    ->end()
138 234
                ->end()
139 234
                ->arrayNode('xml')
140 234
                    ->addDefaultsIfNotSet()
141 234
                    ->children()
142 234
                        ->scalarNode('version')->defaultValue('1.0')->end()
143 234
                        ->scalarNode('encoding')->defaultValue('UTF-8')->end()
144 234
                        ->booleanNode('format_output')->defaultValue('%kernel.debug%')->end()
145 234
                        ->scalarNode('root')->defaultValue('result')->end()
146 234
                        ->scalarNode('entry')->defaultValue('entry')->end()
147 234
                        ->scalarNode('entry_attribute')->defaultValue('key')->end()
148 234
                    ->end()
149 234
                ->end()
150 234
                ->arrayNode('yaml')
151 234
                    ->addDefaultsIfNotSet()
152 234
                    ->children()
153 234
                        ->integerNode('inline')->defaultValue(2)->end()
154 234
                        ->integerNode('indent')->defaultValue(4)->end()
155 234
                        ->integerNode('options')->defaultValue(0)->end()
156 234
                    ->end()
157 234
                ->end()
158 234
            ->end();
159
    }
160
161
    /**
162
     * @param string $name
163
     *
164
     * @return ArrayNodeDefinition
165
     */
166 234
    private function createNode($name)
167
    {
168 234
        return $this->createTreeBuilder()->root($name);
169
    }
170
171
    /**
172
     * @return TreeBuilder
173
     */
174 234
    private function createTreeBuilder()
175
    {
176 234
        return new TreeBuilder();
177
    }
178
}
179