Completed
Push — master ( 940536...c514a4 )
by Peter
08:48
created

Configuration::getConfigTreeBuilder()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 32

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 20
CRAP Score 2.0004

Importance

Changes 0
Metric Value
dl 0
loc 32
ccs 20
cts 21
cp 0.9524
rs 9.408
c 0
b 0
f 0
cc 2
nc 2
nop 0
crap 2.0004
1
<?php
2
/**
3
 * GpsLab component.
4
 *
5
 * @author    Peter Gribanov <[email protected]>
6
 * @copyright Copyright (c) 2017, Peter Gribanov
7
 * @license   http://opensource.org/licenses/MIT
8
 */
9
10
namespace GpsLab\Bundle\GeoIP2Bundle\DependencyInjection;
11
12
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
13
use Symfony\Component\Config\Definition\ConfigurationInterface;
14
15
class Configuration implements ConfigurationInterface
16
{
17
    const ROOT_NODE = 'gpslab_geoip';
18
19
    /**
20
     * Config tree builder.
21
     *
22
     * Example config:
23
     *
24
     * gpslab_geoip:
25
     *     cache: '%kernel.cache_dir%/GeoLite2-City.mmdb'
26
     *     url: 'http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz'
27
     *     locales: [ '%locale%' ]
28
     *
29
     * @return TreeBuilder
30
     */
31 1
    public function getConfigTreeBuilder()
32
    {
33 1
        $treeBuilder = new TreeBuilder(static::ROOT_NODE);
34
35 1
        if (method_exists($treeBuilder, 'getRootNode')) {
36
            // Symfony 4.2 +
37 1
            $rootNode = $treeBuilder->getRootNode();
38
        } else {
39
            // Symfony 4.1 and below
40
            $rootNode = $treeBuilder->root(static::ROOT_NODE);
41
        }
42
43
        return
44
            $rootNode
45 1
                ->children()
46 1
                    ->scalarNode('cache')
47 1
                        ->cannotBeEmpty()
48 1
                        ->defaultValue('%kernel.cache_dir%/GeoLite2-City.mmdb')
49 1
                    ->end()
50 1
                    ->scalarNode('url')
51 1
                        ->cannotBeEmpty()
52 1
                        ->defaultValue('http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz')
53 1
                    ->end()
54 1
                    ->arrayNode('locales')
55 1
                        ->treatNullLike([])
56 1
                        ->prototype('scalar')->end()
57 1
                        ->defaultValue(['%locale%'])
58 1
                    ->end()
59 1
                ->end()
60 1
            ->end()
61
        ;
62
    }
63
}
64