Passed
Push — 2.0-dev ( 016e30...acd3b9 )
by Takehiro
04:04
created

LqlBuilder::build()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 2
Bugs 0 Features 0
Metric Value
c 2
b 0
f 0
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
cc 1
eloc 2
nc 1
nop 0
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 23
    public function reset()
66
    {
67 23
        $this->lql->reset();
68 23
        $this->column = new Column();
69 23
        $this->filter = new Filter();
70 23
        $this->stats = new Stats();
71
72 23
        return $this;
73
    }
74
75 19
    public function __call($method, $arguments)
76
    {
77 19
        if (substr($method, 0, 5) === 'stats') {
78 8
            $this->callPropertyMethod(5, $method, $arguments);
79
80 8
            return $this;
81
        }
82
83 16
        if (substr($method, 0, 6) === 'filter') {
84 16
            $this->callPropertyMethod(6, $method, $arguments);
85 16
            return $this;
86
        }
87
88
        trigger_error('Call to undefined method ' . get_class($this) . '::' . $method, E_USER_ERROR);
89
    }
90
91 19
    private function callPropertyMethod($lengthProperty, $method, $arguments)
92
    {
93 19
        $property = substr($method, 0, $lengthProperty);
94 19
        $callMethod = lcfirst(substr($method, $lengthProperty));
95
96 19
        if (($callMethod === 'or') || ($callMethod === 'and')) {
97 5
            $callMethod = 'operator' . ucfirst($callMethod);
98 5
        }
99
100 19
        call_user_func_array(array($this->$property, $callMethod), $arguments);
101
102 19
        $this->lql->$property($this->$property);
103 19
        $this->$property->reset();
104 19
    }
105
106
    /**
107
     * 取得カラムの指定
108
     *
109
     * @param string $column
110
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
111
     * @throw \InvalidArgumentException if the provided argument is not of type 'string'.
112
     */
113 7
    public function column($column)
114
    {
115 7
        $this->column->add($column);
116 7
        $this->lql->column($this->column);
117
118 7
        return $this;
119
    }
120
121
    /**
122
     * ヘッダ情報を取得するかの設定
123
     *
124
     * @param boolean $boolean
125
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
126
     * @throw \InvalidArgumentException if the provided argument is not of type 'boolean'.
127
     */
128 1
    public function headers($boolean)
129
    {
130 1
        $this->lql->headers($boolean);
131
132 1
        return $this;
133
    }
134
135
    /**
136
     * 取得カラムの一括指定
137
     *
138
     * @param array $columns
139
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
140
     * @throw \InvalidArgumentException if the provided argument is not of type 'array'.
141
     */
142 7
    public function columns($columns)
143
    {
144 7
        $this->column = new Column($columns);
145 7
        $this->lql->column($this->column);
146
147 7
        return $this;
148
    }
149
150
    /**
151
     * パラメータの指定
152
     * @param string $parameter
153
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
154
     * @throw \InvalidArgumentException if the provided argument is not of type 'string'.
155
     */
156 1
    public function parameter($parameter)
157
    {
158 1
        $this->lql->parameter($parameter);
159
160 1
        return $this;
161
    }
162
163
    /**
164
     * OutputFormat の指定
165
     * @param string $outputFormat
166
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
167
     * @throw \InvalidArgumentException if the provided argument is not of type 'string'.
168
     */
169 1
    public function outputFormat($outputFormat)
170
    {
171 1
        $this->lql->outputFormat($outputFormat);
172
173 1
        return $this;
174
    }
175
176
    /**
177
     * Limit の指定
178
     * @param integer $limit
179
     * @return \Kwkm\MkLiveStatusClient\LqlBuilder
180
     * @throw \InvalidArgumentException if the provided argument is not of type 'integer'.
181
     */
182 1
    public function limit($limit)
183
    {
184 1
        $this->lql->limit($limit);
185
186 1
        return $this;
187
    }
188
189
    /**
190
     * Lqlの実行テキストの作成
191
     * @return string
192
     */
193 23
    public function build()
194
    {
195 23
        return $this->lql->build();
196
    }
197
198
    /**
199
     * コンストラクタ
200
     */
201 23
    public function __construct($table, $authUser = null)
202
    {
203 23
        $this->lql = new Lql($table, $authUser);
204 23
        $this->reset();
205 23
    }
206
}
207