Completed
Push — master ( af667a...e44ebe )
by
unknown
01:38
created

Configuration::addDataCollection()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 5
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 7
ccs 5
cts 5
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Facile\MongoDbBundle\DependencyInjection;
4
5
use Symfony\Component\Config\Definition\Builder\NodeBuilder;
6
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
7
use Symfony\Component\Config\Definition\ConfigurationInterface;
8
9
/**
10
 * Class Configuration.
11
 *
12
 * @internal
13
 */
14
final class Configuration implements ConfigurationInterface
15
{
16
    const READ_PREFERENCE_VALID_OPTIONS = ['primary', 'primaryPreferred', 'secondary', 'secondaryPreferred', 'nearest'];
17
18
    /**
19
     * {@inheritdoc}
20
     */
21 13
    public function getConfigTreeBuilder()
22
    {
23 13
        $treeBuilder = new TreeBuilder();
24 13
        $rootBuilder = $treeBuilder->root('mongo_db_bundle')->children();
25
26 13
        $this->addDataCollection($rootBuilder);
27 13
        $this->addClients($rootBuilder);
28 13
        $this->addConnections($rootBuilder);
29
30 13
        return $treeBuilder;
31
    }
32
33 13
    private function addDataCollection(NodeBuilder $builder)
34
    {
35
        $builder
36 13
            ->booleanNode('data_collection')
37 13
            ->defaultTrue()
38 13
            ->info('Disables Data Collection if needed');
39 13
    }
40
41 13
    private function addClients(NodeBuilder $builder)
42
    {
43
        $clientsBuilder = $builder
44 13
            ->arrayNode('clients')
45 13
            ->isRequired()
46 13
            ->requiresAtLeastOneElement()
47 13
            ->useAttributeAsKey('name')
48 13
            ->prototype('array')
49 13
            ->children();
50
51 13
        $this->addClientsHosts($clientsBuilder);
52
53
        $clientsBuilder
54 13
            ->scalarNode('uri')
55 13
            ->defaultNull()
56 13
            ->info('Overrides hosts configuration');
57
58
        $clientsBuilder
59 13
            ->scalarNode('username')
60 13
            ->defaultValue('');
61
62
        $clientsBuilder
63 13
            ->scalarNode('password')
64 13
            ->defaultValue('');
65
66
        $clientsBuilder
67 13
            ->scalarNode('authSource')
68 13
            ->defaultNull()
69 13
            ->info('Database name associated with the user’s credentials');
70
71
        $clientsBuilder
72 13
            ->scalarNode('readPreference')
73 13
            ->defaultValue('primaryPreferred')
74 13
            ->validate()
75 13
            ->ifNotInArray(self::READ_PREFERENCE_VALID_OPTIONS)
76 13
            ->thenInvalid('Invalid readPreference option %s, must be one of [' . implode(', ', self::READ_PREFERENCE_VALID_OPTIONS) . ']');
77
78
        $clientsBuilder
79 13
            ->scalarNode('replicaSet')
80 13
            ->defaultNull();
81
82
        $clientsBuilder
83 13
            ->booleanNode('ssl')
84 13
            ->defaultFalse();
85
86
        $clientsBuilder
87 13
            ->integerNode('connectTimeoutMS')
88 13
            ->defaultNull();
89 13
    }
90
91 13
    private function addClientsHosts(NodeBuilder $builder)
92
    {
93
        $hostsBuilder = $builder
94 13
            ->arrayNode('hosts')
95 13
            ->info('Hosts addresses and ports')
96 13
            ->prototype('array')
97 13
            ->children();
98
99
        $hostsBuilder
100 13
            ->scalarNode('host')
101 13
            ->isRequired();
102
103
        $hostsBuilder
104 13
            ->integerNode('port')
105 13
            ->defaultValue(27017);
106 13
    }
107
108 13
    private function addConnections(NodeBuilder $builder)
109
    {
110
        $connectionBuilder = $builder
111 13
            ->arrayNode('connections')
112 13
            ->isRequired()
113 13
            ->requiresAtLeastOneElement()
114 13
            ->useAttributeAsKey('name')
115 13
            ->prototype('array')
116 13
            ->children();
117
118
        $connectionBuilder
119 13
            ->scalarNode('client_name')
120 13
            ->isRequired()
121 13
            ->info('Desired client name');
122
123
        $connectionBuilder
124 13
            ->scalarNode('database_name')
125 13
            ->isRequired()
126 13
            ->info('Database name');
127 13
    }
128
}
129