Completed
Pull Request — master (#35)
by Krzysztof
04:21
created

Configuration::getChainSearcherNode()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 14
Code Lines 10

Duplication

Lines 14
Ratio 100 %

Code Coverage

Tests 9
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 1
Metric Value
c 1
b 0
f 1
dl 14
loc 14
ccs 9
cts 9
cp 1
rs 9.4285
cc 1
eloc 10
nc 1
nop 0
crap 1
1
<?php
2
3
namespace KGzocha\Bundle\SearcherBundle\DependencyInjection;
4
5
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
6
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
7
use Symfony\Component\Config\Definition\ConfigurationInterface;
8
9
/**
10
 * @author Krzysztof Gzocha <[email protected]>
11
 */
12
class Configuration implements ConfigurationInterface
13
{
14
    const SEARCHER_CLASS = 'KGzocha\Searcher\Searcher';
15
    const WRAPPER_CLASS = 'KGzocha\Searcher\WrappedResultsSearcher';
16
    const CRITERIA_COLLECTION_CLASS = 'KGzocha\Searcher\Criteria\Collection\NamedCriteriaCollection';
17
    const BUILDER_COLLECTION_CLASS = 'KGzocha\Searcher\CriteriaBuilder\Collection\CriteriaBuilderCollection';
18
    const END_TRANSFORMER_CLASS = 'KGzocha\Searcher\Chain\EndTransformer';
19
    const CHAIN_SEARCHER_CLASS = 'KGzocha\Searcher\Chain\ChainSearch';
20
    const CELL_CLASS = '\KGzocha\Searcher\Chain\Cell';
21
22
    /**
23
     * {@inheritdoc}
24
     */
25 22
    public function getConfigTreeBuilder()
26
    {
27 22
        $treeBuilder = new TreeBuilder();
28 22
        $rootNode = $treeBuilder->root('k_gzocha_searcher');
29
30
        $rootNode
31 22
            ->canBeUnset(true)
32 22
            ->children()
33 22
                ->append($this->getContextsNode())
34 22
                ->append($this->getChainsNode())
35 22
            ->end();
36
37 22
        return $treeBuilder;
38
    }
39
40
    /**
41
     * @return ArrayNodeDefinition
42
     */
43 22
    protected function getContextsNode()
44
    {
45 22
        $node = new ArrayNodeDefinition('contexts');
46
47
        $node
48 22
            ->canBeUnset(true)
49 22
            ->useAttributeAsKey('context_id')
50 22
            ->prototype('array')
51 22
            ->children()
52 22
                    ->append($this->getCriteriaCollectionNode())
53 22
                    ->append($this->getBuilderCollectionNode())
54 22
                    ->append($this->getCriteriaNode())
55 22
                    ->append($this->getBuildersNode())
56 22
                    ->append($this->getSearcher())
57 22
                    ->append($this->getSearchingContextNode())
58 22
                ->end()
59 22
            ->end();
60
61 22
        return $node;
62
    }
63
64
    /**
65
     * @return ArrayNodeDefinition
66
     */
67 22
    protected function getChainsNode()
68
    {
69 22
        $node = new ArrayNodeDefinition('chains');
70
71
        $node
72 22
            ->canBeUnset(true)
73 22
            ->useAttributeAsKey('chain_id')
74 22
            ->prototype('array')
75 22
            ->children()
76 22
                ->append($this->getChainSearcherNode())
77 22
                ->append($this->getTransformersNode())
78 22
                ->append($this->getCellsNode())
79 22
            ->end();
80
81 22
        return $node;
82
    }
83
84
    /**
85
     * @return ArrayNodeDefinition
86
     */
87 22 View Code Duplication
    protected function getCriteriaCollectionNode()
88
    {
89 22
        $node = new ArrayNodeDefinition('criteria_collection');
90
91
        $node
92 22
            ->addDefaultsIfNotSet()
93 22
            ->canBeUnset()
94 22
            ->children()
95 22
                ->scalarNode('class')->defaultValue(self::CRITERIA_COLLECTION_CLASS)->end()
96 22
                ->scalarNode('service')->defaultValue(null)->end()
97 22
            ->end();
98
99 22
        return $node;
100
    }
101
102
    /**
103
     * @return ArrayNodeDefinition
104
     */
105 22 View Code Duplication
    protected function getBuilderCollectionNode()
106
    {
107 22
        $node = new ArrayNodeDefinition('builder_collection');
108
109
        $node
110 22
            ->addDefaultsIfNotSet()
111 22
            ->canBeUnset()
112 22
            ->children()
113 22
                ->scalarNode('class')->defaultValue(self::BUILDER_COLLECTION_CLASS)->end()
114 22
                ->scalarNode('service')->defaultValue(null)->end()
115 22
            ->end();
116
117 22
        return $node;
118
    }
119
120
    /**
121
     * @return ArrayNodeDefinition
122
     */
123 22 View Code Duplication
    protected function getSearcher()
124
    {
125 22
        $node = new ArrayNodeDefinition('searcher');
126
127
        $node
128 22
            ->addDefaultsIfNotSet()
129 22
            ->canBeUnset()
130 22
            ->children()
131 22
                ->scalarNode('class')->defaultValue(self::SEARCHER_CLASS)->end()
132 22
                ->scalarNode('service')->defaultValue(null)->end()
133 22
                ->scalarNode('wrapper_class')->defaultValue(self::WRAPPER_CLASS)->end()
134 22
            ->end();
135
136 22
        return $node;
137
    }
138
139
    /**
140
     * @return ArrayNodeDefinition
141
     */
142 22 View Code Duplication
    protected function getSearchingContextNode()
143
    {
144 22
        $node = new ArrayNodeDefinition('context');
145
146
        $node
147 22
            ->addDefaultsIfNotSet()
148 22
            ->canBeUnset()
149 22
            ->children()
150 22
                ->scalarNode('class')->defaultValue(null)->end()
151 22
                ->scalarNode('service')->defaultValue(null)->end()
152 22
            ->end();
153
154 22
        return $node;
155
    }
156
157
    /**
158
     * @return ArrayNodeDefinition
159
     */
160 22 View Code Duplication
    protected function getCriteriaNode()
161
    {
162 22
        $node = new ArrayNodeDefinition('criteria');
163
164
        $node
165 22
            ->prototype('array')
166 22
            ->children()
167 22
                ->scalarNode('class')->defaultValue(null)->end()
168 22
                ->scalarNode('service')->defaultValue(null)->end()
169 22
                ->scalarNode('name')->cannotBeEmpty()->isRequired()->end()
170 22
            ->end();
171
172 22
        return $node;
173
    }
174
175
    /**
176
     * @return ArrayNodeDefinition
177
     */
178 22 View Code Duplication
    protected function getBuildersNode()
179
    {
180 22
        $node = new ArrayNodeDefinition('builders');
181
182
        $node
183 22
            ->prototype('array')
184 22
            ->children()
185 22
                ->scalarNode('class')->defaultValue(null)->end()
186 22
                ->scalarNode('service')->defaultValue(null)->end()
187 22
                ->scalarNode('name')->cannotBeEmpty()->isRequired()->end()
188 22
            ->end();
189
190 22
        return $node;
191
    }
192
193
    /**
194
     * @return ArrayNodeDefinition
195
     */
196 22 View Code Duplication
    protected function getChainSearcherNode()
197
    {
198 22
        $node = new ArrayNodeDefinition('chain_searcher');
199
200
        $node
201 22
            ->addDefaultsIfNotSet()
202 22
            ->canBeUnset()
203 22
            ->children()
204 22
                ->scalarNode('class')->defaultValue(self::CHAIN_SEARCHER_CLASS)->end()
205 22
                ->scalarNode('service')->defaultValue(null)->end()
206 22
            ->end();
207
208 22
        return $node;
209
    }
210
211
    /**
212
     * @return ArrayNodeDefinition
213
     */
214 22 View Code Duplication
    protected function getTransformersNode()
215
    {
216 22
        $node = new ArrayNodeDefinition('transformers');
217
218
        $node
219 22
            ->prototype('array')
220 22
            ->children()
221 22
                ->scalarNode('name')->cannotBeEmpty()->isRequired()->end()
222 22
                ->scalarNode('service')->defaultValue(null)->end()
223 22
                ->scalarNode('class')->defaultValue(null)->end()
224 22
            ->end();
225
226 22
        return $node;
227
    }
228
229
    /**
230
     * @return ArrayNodeDefinition
231
     */
232 22
    protected function getCellsNode()
233
    {
234 22
        $node = new ArrayNodeDefinition('cells');
235
236
        $node
237 22
            ->prototype('array')
238 22
            ->children()
239 22
                ->scalarNode('name')->cannotBeEmpty()->isRequired()->end()
240 22
                ->scalarNode('searcher')->cannotBeEmpty()->isRequired()->end()
241 22
                ->scalarNode('transformer')->defaultNull()->end()
242 22
                ->scalarNode('class')->defaultValue(self::CELL_CLASS)->end()
243 22
                ->scalarNode('service')->defaultValue(null)->end()
244 22
            ->end();
245
246 22
        return $node;
247
    }
248
}
249