Passed
Pull Request — master (#1)
by Takehiro
08:50 queued 04:05
created

LqlBuilder::columns()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 7
ccs 4
cts 4
cp 1
rs 9.4285
cc 1
eloc 4
nc 1
nop 1
crap 1
1
<?php
2
3
namespace Kwkm\MkLiveStatusClient;
4
5
/**
6
 * Class LqlBuilder
7
 *
8
 * @package Kwkm\MkLiveStatusClient
9
 * @author Takehiro Kawakami <[email protected]>
10
 * @license MIT
11
 *
12
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterSet(String $filter)
13
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterEqual(String $column, String $value)
14
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterMatch(String $column, String $value)
15
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterNotEqual(String $column, String $value)
16
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterNotMatch(String $column, String $value)
17
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterLess(String $column, String $value)
18
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterGreater(String $column, String $value)
19
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterLessEqual(String $column, String $value)
20
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterGreaterEqual(String $column, String $value)
21
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterOr(Integer $or)
22
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterAnd(Integer $and)
23
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder filterNegate()
24
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsSet(String $stats)
25
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsEqual(String $column, String $value)
26
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsNotEqual(String $column, String $value)
27
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsSum(String $column)
28
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsMin(String $column)
29
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsMax(String $column)
30
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsAvg(String $column)
31
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsStd(String $column)
32
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsSuminv(String $column)
33
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsAvginv(String $column)
34
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsAnd(Integer $and)
35
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsOr(Integer $or)
36
 * @method \Kwkm\MkLiveStatusClient\LqlBuilder statsNegate()
37
 */
38
class LqlBuilder extends LqlAbstract
39
{
40
    /**
41
     * @var \Kwkm\MkLiveStatusClient\Lql
42
     */
43
    private $lql;
44
45
    /**
46
     * @var \Kwkm\MkLiveStatusClient\Column
47
     */
48
    private $column;
49
50
    /**
51
     * @var \Kwkm\MkLiveStatusClient\Filter
52
     */
53
    private $filter;
54
55
    /**
56
     * @var \Kwkm\MkLiveStatusClient\Stats
57
     */
58
    private $stats;
59
60
    /**
61
     * 初期化
62
     *
63
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
64
     */
65 25
    public function reset()
66
    {
67 25
        $this->lql->reset();
68 25
        $this->column = new Column();
69 25
        $this->filter = new Filter();
70 25
        $this->stats = new Stats();
71
72 25
        return $this;
73
    }
74
75 21
    public function __call($method, $arguments)
76
    {
77 21
        if (substr($method, 0, 5) === 'stats') {
78 8
            $this->callPropertyMethod(5, $method, $arguments);
79
80 8
            return $this;
81
        }
82
83 18
        if (substr($method, 0, 6) === 'filter') {
84 17
            $this->callPropertyMethod(6, $method, $arguments);
85 16
            return $this;
86
        }
87
88 1
        throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method);
89
    }
90
91 20
    private function callPropertyMethod($lengthProperty, $method, $arguments)
92
    {
93 20
        $property = substr($method, 0, $lengthProperty);
94 20
        $callMethod = lcfirst(substr($method, $lengthProperty));
95
96 20
        if (($callMethod === 'or') || ($callMethod === 'and')) {
97 5
            $callMethod = 'operator' . ucfirst($callMethod);
98 5
        }
99
100 20
        if (method_exists($this->$property, $callMethod)) {
101 19
            call_user_func_array(array($this->$property, $callMethod), $arguments);
102 19
        } else {
103 1
            throw new \BadMethodCallException('Call to undefined method ' . get_class($this) . '::' . $method);
104
        }
105
106 19
        $this->lql->$property($this->$property);
107 19
        $this->$property->reset();
108 19
    }
109
110
    /**
111
     * 取得カラムの指定
112
     *
113
     * @param string $column
114
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
115
     * @throw \InvalidArgumentException if the provided argument is not of type 'string'.
116
     */
117 7
    public function column($column)
118
    {
119 7
        $this->column->add($column);
120 7
        $this->lql->column($this->column);
121
122 7
        return $this;
123
    }
124
125
    /**
126
     * ヘッダ情報を取得するかの設定
127
     *
128
     * @param boolean $boolean
129
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
130
     * @throw \InvalidArgumentException if the provided argument is not of type 'boolean'.
131
     */
132 1
    public function headers($boolean)
133
    {
134 1
        $this->lql->headers($boolean);
135
136 1
        return $this;
137
    }
138
139
    /**
140
     * 取得カラムの一括指定
141
     *
142
     * @param array $columns
143
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
144
     * @throw \InvalidArgumentException if the provided argument is not of type 'array'.
145
     */
146 7
    public function columns($columns)
147
    {
148 7
        $this->column = new Column($columns);
149 7
        $this->lql->column($this->column);
150
151 7
        return $this;
152
    }
153
154
    /**
155
     * パラメータの指定
156
     * @param string $parameter
157
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
158
     * @throw \InvalidArgumentException if the provided argument is not of type 'string'.
159
     */
160 1
    public function parameter($parameter)
161
    {
162 1
        $this->lql->parameter($parameter);
163
164 1
        return $this;
165
    }
166
167
    /**
168
     * OutputFormat の指定
169
     * @param string $outputFormat
170
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
171
     * @throw \InvalidArgumentException if the provided argument is not of type 'string'.
172
     */
173 1
    public function outputFormat($outputFormat)
174
    {
175 1
        $this->lql->outputFormat($outputFormat);
176
177 1
        return $this;
178
    }
179
180
    /**
181
     * Limit の指定
182
     * @param integer $limit
183
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
184
     * @throw \InvalidArgumentException if the provided argument is not of type 'integer'.
185
     */
186 1
    public function limit($limit)
187
    {
188 1
        $this->lql->limit($limit);
189
190 1
        return $this;
191
    }
192
193
    /**
194
     * Lqlの実行テキストの作成
195
     * @return string
196
     */
197 23
    public function build()
198
    {
199 23
        return $this->lql->build();
200
    }
201
202
    /**
203
     * コンストラクタ
204
     */
205 25
    public function __construct($table, $authUser = null)
206
    {
207 25
        $this->lql = new Lql($table, $authUser);
208 25
        $this->reset();
209 25
    }
210
}
211