Passed
Push — master ( 4d8734...991786 )
by Matthew
09:35 queued 06:44
created

RedisConfiguration::addPredisArgs()   A

Complexity

Conditions 5
Paths 1

Size

Total Lines 34
Code Lines 28

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 26
CRAP Score 5.009

Importance

Changes 0
Metric Value
cc 5
eloc 28
nc 1
nop 0
dl 0
loc 34
ccs 26
cts 28
cp 0.9286
crap 5.009
rs 9.1608
c 0
b 0
f 0
1
<?php
2
3
namespace Dtc\QueueBundle\DependencyInjection;
4
5
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
6
7
trait RedisConfiguration
8
{
9 9
    protected function addPredis()
10
    {
11 9
        $treeBuilder = new TreeBuilder();
12 9
        $rootNode = $treeBuilder->root('predis');
13
        $rootNode
14 9
            ->children()
15 9
            ->scalarNode('dsn')->defaultNull()->end()
16 9
            ->append($this->addPredisArgs())
17 9
            ->end()
18 9
            ->validate()->ifTrue(function ($node) {
19 1
                if (isset($node['dsn']) && (isset($node['connection_parameters']['host']) || isset($node['connection_parameters']['port']))) {
20
                    return true;
21
                }
22
23 1
                return false;
24 9
            })->thenInvalid('if dsn is set, do not use connection_parameters for predis (and vice-versa)')->end();
25
26 9
        return $rootNode;
27
    }
28
29 4
    protected function checkPredis(array $node)
30
    {
31 4
        if ((isset($node['predis']['dsn']) || isset($node['predis']['connection_parameters']['host'])) &&
32 4
            (isset($node['snc_redis']['type']) || isset($node['phpredis']['host']))) {
33
            return true;
34
        }
35
36 4
        return false;
37
    }
38
39 4
    protected function checkSncPhpRedis(array $node)
40
    {
41 4
        if (isset($node['snc_redis']['type']) &&
42 4
            isset($node['phpredis']['host'])) {
43
            return true;
44
        }
45
46 4
        return false;
47
    }
48
49 9
    protected function addRedis()
50
    {
51 9
        $treeBuilder = new TreeBuilder();
52 9
        $rootNode = $treeBuilder->root('redis');
53
        $rootNode
54 9
            ->addDefaultsIfNotSet()
0 ignored issues
show
Bug introduced by
The method addDefaultsIfNotSet() does not exist on Symfony\Component\Config...\Builder\NodeDefinition. It seems like you code against a sub-type of Symfony\Component\Config...\Builder\NodeDefinition such as Symfony\Component\Config...der\ArrayNodeDefinition. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-call  annotation

54
            ->/** @scrutinizer ignore-call */ 
55
              addDefaultsIfNotSet()
Loading history...
55 9
            ->children()
56 9
            ->scalarNode('prefix')->defaultValue('dtc_queue_')->end()
57 9
            ->append($this->addSncRedis())
58 9
            ->append($this->addPredis())
59 9
            ->append($this->addPhpRedisArgs())
60 9
            ->end()
61 9
            ->validate()->ifTrue(function ($node) {
62 4
                if ($this->checkPredis($node)) {
63
                    return true;
64
                }
65 4
                if ($this->checkSncPhpRedis($node)) {
66
                    return true;
67
                }
68
69 4
                return false;
70 9
            })->thenInvalid('only one of [snc_redis | predis | phpredis] should be set')->end();
71
72 9
        return $rootNode;
73
    }
74
75 9
    protected function addPhpRedisArgs()
76
    {
77 9
        $treeBuilder = new TreeBuilder();
78 9
        $rootNode = $treeBuilder->root('phpredis');
79
        $rootNode
80 9
            ->addDefaultsIfNotSet()
81 9
            ->children()
82 9
            ->scalarNode('host')->end()
83 9
            ->integerNode('port')->defaultValue(6379)->end()
84 9
            ->floatNode('timeout')->defaultValue(0)->end()
85 9
            ->integerNode('retry_interval')->defaultNull()->end()
86 9
            ->floatNode('read_timeout')->defaultValue(0)->end()
87 9
            ->scalarNode('auth')->end()
88 9
            ->end()
89 9
            ->validate()->ifTrue(function ($node) {
90 2
                if (!empty($node) && !isset($node['host'])) {
91
                    return true;
92
                }
93
94 2
                return false;
95 9
            })->thenInvalid('phpredis host should be set')->end();
96
97 9
        return $rootNode;
98
    }
99
100 9
    protected function addPredisArgs()
101
    {
102 9
        $treeBuilder = new TreeBuilder();
103 9
        $rootNode = $treeBuilder->root('connection_parameters');
104
        $rootNode
105 9
            ->addDefaultsIfNotSet()
106 9
            ->children()
107 9
            ->scalarNode('scheme')->defaultValue('tcp')->end()
108 9
            ->scalarNode('host')->defaultNull()->end()
109 9
            ->integerNode('port')->defaultNull()->end()
110 9
            ->scalarNode('path')->defaultNull()->end()
111 9
            ->scalarNode('database')->defaultNull()->end()
112 9
            ->scalarNode('password')->defaultNull()->end()
113 9
            ->booleanNode('async')->defaultFalse()->end()
114 9
            ->booleanNode('persistent')->defaultFalse()->end()
115 9
            ->floatNode('timeout')->defaultValue(5.0)->end()
116 9
            ->floatNode('read_write_timeout')->defaultNull()->end()
117 9
            ->scalarNode('alias')->defaultNull()->end()
118 9
            ->integerNode('weight')->defaultNull()->end()
119 9
            ->booleanNode('iterable_multibulk')->defaultFalse()->end()
120 9
            ->booleanNode('throw_errors')->defaultTrue()->end()
121 9
            ->end()
122 9
            ->validate()->ifTrue(function ($node) {
123 1
                if (isset($node['host']) && !isset($node['port'])) {
124
                    return true;
125
                }
126 1
                if (isset($node['port']) && !isset($node['host'])) {
127
                    return true;
128
                }
129
130 1
                return false;
131 9
            })->thenInvalid('predis connection_parameters host and port should both be set')->end();
132
133 9
        return $rootNode;
134
    }
135
136 9
    protected function addSncRedis()
137
    {
138 9
        $treeBuilder = new TreeBuilder();
139 9
        $rootNode = $treeBuilder->root('snc_redis');
140
        $rootNode
141 9
            ->children()
142 9
            ->enumNode('type')
143 9
            ->values(['predis', 'phpredis'])
144 9
            ->defaultNull()->end()
145 9
            ->scalarNode('alias')
146 9
            ->defaultNull()->end()
147 9
            ->end()
148 9
            ->validate()->ifTrue(function ($node) {
149 1
                if (isset($node['type']) && !isset($node['alias'])) {
150 1
                    return true;
151
                }
152 1
                if (isset($node['alias']) && !isset($node['type'])) {
153 1
                    return true;
154
                }
155
156 1
                return false;
157 9
            })->thenInvalid('if alias or type is set, then both must be set')->end();
158
159
        return $rootNode;
160
    }
161
}
162