RedisConfiguration   A
last analyzed

Complexity

Total Complexity 33

Size/Duplication

Total Lines 188
Duplicated Lines 0 %

Test Coverage

Coverage 88.7%

Importance

Changes 2
Bugs 1 Features 0
Metric Value
eloc 119
c 2
b 1
f 0
dl 0
loc 188
ccs 102
cts 115
cp 0.887
rs 9.76
wmc 33

7 Methods

Rating   Name   Duplication   Size   Complexity  
B addPredisArgs() 0 41 6
A addRedis() 0 31 4
A addPhpRedisArgs() 0 30 4
A addPredis() 0 25 5
A checkSncPhpRedis() 0 8 3
A checkPredis() 0 8 5
B addSncRedis() 0 31 6
1
<?php
2
3
namespace Dtc\QueueBundle\DependencyInjection;
4
5
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
0 ignored issues
show
Bug introduced by
The type Symfony\Component\Config...ion\Builder\TreeBuilder was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
6
7
trait RedisConfiguration
8
{
9 10
    protected function addPredis()
10
    {
11 10
        $treeBuilder = new TreeBuilder('predis');
12
13 10
        if (method_exists($treeBuilder, 'getRootNode')) {
14 10
            $rootNode = $treeBuilder->getRootNode();
15
        } else {
16
            // BC layer for symfony/config 4.1 and older
17
            $rootNode = $treeBuilder->root('predis');
18
        }
19
20
        $rootNode
21 10
            ->children()
22 10
            ->scalarNode('dsn')->defaultNull()->end()
23 10
            ->append($this->addPredisArgs())
24 10
            ->end()
25 10
            ->validate()->ifTrue(function ($node) {
26 1
                if (isset($node['dsn']) && (isset($node['connection_parameters']['host']) || isset($node['connection_parameters']['port']))) {
27
                    return true;
28
                }
29
30 1
                return false;
31 10
            })->thenInvalid('if dsn is set, do not use connection_parameters for predis (and vice-versa)')->end();
32
33 10
        return $rootNode;
34
    }
35
36 4
    protected function checkPredis(array $node)
37
    {
38 4
        if ((isset($node['predis']['dsn']) || isset($node['predis']['connection_parameters']['host'])) &&
39 4
            (isset($node['snc_redis']['type']) || isset($node['phpredis']['host']))) {
40
            return true;
41
        }
42
43 4
        return false;
44
    }
45
46 4
    protected function checkSncPhpRedis(array $node)
47
    {
48 4
        if (isset($node['snc_redis']['type']) &&
49 4
            isset($node['phpredis']['host'])) {
50
            return true;
51
        }
52
53 4
        return false;
54
    }
55
56 10
    protected function addRedis()
57
    {
58 10
        $treeBuilder = new TreeBuilder('redis');
59
60 10
        if (method_exists($treeBuilder, 'getRootNode')) {
61 10
            $rootNode = $treeBuilder->getRootNode();
62
        } else {
63
            // BC layer for symfony/config 4.1 and older
64
            $rootNode = $treeBuilder->root('redis');
65
        }
66
67
        $rootNode
68 10
            ->addDefaultsIfNotSet()
69 10
            ->children()
70 10
            ->scalarNode('prefix')->defaultValue('dtc_queue_')->end()
71 10
            ->append($this->addSncRedis())
72 10
            ->append($this->addPredis())
73 10
            ->append($this->addPhpRedisArgs())
74 10
            ->end()
75 10
            ->validate()->ifTrue(function ($node) {
76 4
                if ($this->checkPredis($node)) {
77
                    return true;
78
                }
79 4
                if ($this->checkSncPhpRedis($node)) {
80
                    return true;
81
                }
82
83 4
                return false;
84 10
            })->thenInvalid('only one of [snc_redis | predis | phpredis] should be set')->end();
85
86 10
        return $rootNode;
87
    }
88
89 10
    protected function addPhpRedisArgs()
90
    {
91 10
        $treeBuilder = new TreeBuilder('phpredis');
92
93 10
        if (method_exists($treeBuilder, 'getRootNode')) {
94 10
            $rootNode = $treeBuilder->getRootNode();
95
        } else {
96
            // BC layer for symfony/config 4.1 and older
97
            $rootNode = $treeBuilder->root('phpredis');
98
        }
99
100
        $rootNode
101 10
            ->addDefaultsIfNotSet()
102 10
            ->children()
103 10
            ->scalarNode('host')->end()
104 10
            ->integerNode('port')->defaultValue(6379)->end()
105 10
            ->floatNode('timeout')->defaultValue(0)->end()
106 10
            ->integerNode('retry_interval')->defaultNull()->end()
107 10
            ->floatNode('read_timeout')->defaultValue(0)->end()
108 10
            ->scalarNode('auth')->end()
109 10
            ->end()
110 10
            ->validate()->ifTrue(function ($node) {
111 2
                if (!empty($node) && !isset($node['host'])) {
112
                    return true;
113
                }
114
115 2
                return false;
116 10
            })->thenInvalid('phpredis host should be set')->end();
117
118 10
        return $rootNode;
119
    }
120
121 10
    protected function addPredisArgs()
122
    {
123 10
        $treeBuilder = new TreeBuilder('connection_parameters');
124
125 10
        if (method_exists($treeBuilder, 'getRootNode')) {
126 10
            $rootNode = $treeBuilder->getRootNode();
127
        } else {
128
            // BC layer for symfony/config 4.1 and older
129
            $rootNode = $treeBuilder->root('connection_parameters');
130
        }
131
132
        $rootNode
133 10
            ->addDefaultsIfNotSet()
134 10
            ->children()
135 10
            ->scalarNode('scheme')->defaultValue('tcp')->end()
136 10
            ->scalarNode('host')->defaultNull()->end()
137 10
            ->integerNode('port')->defaultNull()->end()
138 10
            ->scalarNode('path')->defaultNull()->end()
139 10
            ->scalarNode('database')->defaultNull()->end()
140 10
            ->scalarNode('password')->defaultNull()->end()
141 10
            ->booleanNode('async')->defaultFalse()->end()
142 10
            ->booleanNode('persistent')->defaultFalse()->end()
143 10
            ->floatNode('timeout')->defaultValue(5.0)->end()
144 10
            ->floatNode('read_write_timeout')->defaultNull()->end()
145 10
            ->scalarNode('alias')->defaultNull()->end()
146 10
            ->integerNode('weight')->defaultNull()->end()
147 10
            ->booleanNode('iterable_multibulk')->defaultFalse()->end()
148 10
            ->booleanNode('throw_errors')->defaultTrue()->end()
149 10
            ->end()
150 10
            ->validate()->ifTrue(function ($node) {
151 1
                if (isset($node['host']) && !isset($node['port'])) {
152
                    return true;
153
                }
154 1
                if (isset($node['port']) && !isset($node['host'])) {
155
                    return true;
156
                }
157
158 1
                return false;
159 10
            })->thenInvalid('predis connection_parameters host and port should both be set')->end();
160
161 10
        return $rootNode;
162
    }
163
164 10
    protected function addSncRedis()
165
    {
166 10
        $treeBuilder = new TreeBuilder('snc_redis');
167
168 10
        if (method_exists($treeBuilder, 'getRootNode')) {
169 10
            $rootNode = $treeBuilder->getRootNode();
170
        } else {
171
            // BC layer for symfony/config 4.1 and older
172
            $rootNode = $treeBuilder->root('snc_redis');
173
        }
174
175
        $rootNode
176 10
            ->children()
177 10
            ->enumNode('type')
178 10
            ->values(['predis', 'phpredis'])
179 10
            ->defaultNull()->end()
180 10
            ->scalarNode('alias')
181 10
            ->defaultNull()->end()
182 10
            ->end()
183 10
            ->validate()->ifTrue(function ($node) {
184 1
                if (isset($node['type']) && !isset($node['alias'])) {
185 1
                    return true;
186
                }
187 1
                if (isset($node['alias']) && !isset($node['type'])) {
188 1
                    return true;
189
                }
190
191 1
                return false;
192 10
            })->thenInvalid('if alias or type is set, then both must be set')->end();
193
194 10
        return $rootNode;
195
    }
196
}
197