Passed
Push — master ( 5a27f9...28edde )
by Igor
02:52
created

Settings::set()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 4
rs 10
ccs 3
cts 3
cp 1
cc 1
eloc 2
nc 1
nop 2
crap 1
1
<?php
2
3
namespace ClickHouseDB;
4
5
use ClickHouseDB\Transport\Http;
6
7
class Settings
8
{
9
    /**
10
     * @var Http
11
     */
12
    private $client = null;
13
14
    /**
15
     * @var array
16
     */
17
    private $settings = [];
18
19
    private $_ReadOnlyUser = false;
20
21
    /**
22
     * @var bool
23
     */
24
    private $_isHttps = false;
0 ignored issues
show
introduced by
The private property $_isHttps is not used, and could be removed.
Loading history...
25
26
    /**
27
     * Settings constructor.
28
     * @param Http $client
29
     */
30 44
    public function __construct(Http $client)
31
    {
32
        $default = [
33 44
            'extremes'                => false,
34
            'readonly'                => true,
35
            'max_execution_time'      => 20,
36
            'enable_http_compression' => 0,
37
            'https'                   => false
38
        ];
39
40 44
        $this->settings = $default;
41 44
        $this->client = $client;
42 44
    }
43
44
    /**
45
     * @param string|int $key
46
     * @return mixed
47
     */
48 36
    public function get($key)
49
    {
50 36
        if (!$this->is($key)) {
51
            return null;
52
        }
53 36
        return $this->settings[$key];
54
    }
55
56
    /**
57
     * @param string|int $key
58
     * @return bool
59
     */
60 36
    public function is($key)
61
    {
62 36
        return isset($this->settings[$key]);
63
    }
64
65
66
    /**
67
     * @param string|int $key
68
     * @param mixed $value
69
     * @return $this
70
     */
71 44
    public function set($key, $value)
72
    {
73 44
        $this->settings[$key] = $value;
74 44
        return $this;
75
    }
76
77
    /**
78
     * @return mixed
79
     */
80 1
    public function getDatabase()
81
    {
82 1
        return $this->get('database');
83
    }
84
85
    /**
86
     * @param string $db
87
     * @return $this
88
     */
89 44
    public function database($db)
90
    {
91 44
        $this->set('database', $db);
92 44
        return $this;
93
    }
94
95
    /**
96
     * @return mixed
97
     */
98 36
    public function getTimeOut()
99
    {
100 36
        return $this->get('max_execution_time');
101
    }
102
103
    /**
104
     * @return mixed|null
105
     */
106 36
    public function isEnableHttpCompression()
107
    {
108 36
        return $this->getSetting('enable_http_compression');
109
    }
110
111
    /**
112
     * @param bool|int $flag
113
     * @return $this
114
     */
115 27
    public function enableHttpCompression($flag)
116
    {
117 27
        $this->set('enable_http_compression', intval($flag));
118 27
        return $this;
119
    }
120
121
122
    public function https($flag = true)
123
    {
124
        $this->set('https', $flag);
125
        return $this;
126
    }
127
128 36
    public function isHttps()
129
    {
130 36
        return $this->get('https');
131
    }
132
133
134
    /**
135
     * @param int|bool $flag
136
     * @return $this
137
     */
138
    public function readonly($flag)
139
    {
140
        $this->set('readonly', $flag);
141
        return $this;
142
    }
143
144
    /**
145
     * @param string $session_id
146
     * @return $this
147
     */
148 2
    public function session_id($session_id)
149
    {
150 2
        $this->set('session_id', $session_id);
151 2
        return $this;
152
    }
153
    /**
154
     * @return mixed
155
     */
156 36
    public function getSessionId()
157
    {
158 36
        if (empty($this->settings['session_id'])) {
159 36
            return false;
160
        }
161 2
        return $this->get('session_id');
162
    }
163
164
    /**
165
     * @return string
166
     */
167 2
    public function makeSessionId()
168
    {
169 2
        $this->session_id(sha1(uniqid('', true)));
170 2
        return $this->getSessionId();
0 ignored issues
show
Bug Best Practice introduced by
The expression return $this->getSessionId() could also return false which is incompatible with the documented return type string. Did you maybe forget to handle an error condition?

If the returned type also contains false, it is an indicator that maybe an error condition leading to the specific return statement remains unhandled.

Loading history...
171
    }
172
173
    /**
174
     * @param int $time
175
     * @return $this
176
     */
177 2
    public function max_execution_time($time)
178
    {
179 2
        $this->set('max_execution_time', $time);
180 2
        return $this;
181
    }
182
183
    /**
184
     * @return array
185
     */
186 36
    public function getSettings()
187
    {
188 36
        return $this->settings;
189
    }
190
191
    /**
192
     * @param array $settings_array
193
     * @return $this
194
     */
195 2
    public function apply($settings_array)
196
    {
197 2
        foreach ($settings_array as $key => $value) {
198 2
            $this->set($key, $value);
199
        }
200
201 2
        return $this;
202
    }
203
204
    /**
205
     * @param int|bool $flag
206
     */
207
    public function setReadOnlyUser($flag)
208
    {
209
        $this->_ReadOnlyUser = $flag;
210
    }
211
212
    /**
213
     * @return bool
214
     */
215 36
    public function isReadOnlyUser()
216
    {
217 36
        return $this->_ReadOnlyUser;
218
    }
219
220
    /**
221
     * @param string $name
222
     * @return mixed|null
223
     */
224 36
    public function getSetting($name)
225
    {
226 36
        if (!isset($this->settings[$name])) {
227
            return null;
228
        }
229
230 36
        return $this->get($name);
231
    }
232
}
233