Completed
Push — master ( f68f57...2c5ba7 )
by Ivan
01:54
created

TraverseTrait::unselect()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 9
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

Changes 2
Bugs 0 Features 1
Metric Value
c 2
b 0
f 1
dl 0
loc 9
ccs 6
cts 6
cp 1
rs 9.6667
cc 1
eloc 6
nc 1
nop 3
crap 1
1
<?php
2
3
namespace SP\Spiderling;
4
5
/**
6
 * @author    Ivan Kerin <[email protected]>
7
 * @copyright 2015, Clippings Ltd.
8
 * @license   http://spdx.org/licenses/BSD-3-Clause
9
 */
10
trait TraverseTrait
11
{
12
    /**
13
     * @return CrawlerInterface
14
     */
15
    abstract public function getCrawler();
16
17
    /**
18
     * @param  Query\AbstractQuery $query
19
     * @return array
20
     */
21
    abstract public function queryIds(Query\AbstractQuery $query);
22
23
    /**
24
     * @param  string $id
25
     * @return Node
26
     */
27 2
    public function newNode($id)
28
    {
29 2
        return new Node($this->getCrawler(), $id);
30
    }
31
32
    /**
33
     * @return EmptyNode
34
     */
35 2
    public function newEmptyNode()
36
    {
37 2
        return new EmptyNode($this->getCrawler());
38
    }
39
40
    /**
41
     * @param  Query\AbstractQuery $query
42
     * @return Node[]
43
     */
44 1
    public function query(Query\AbstractQuery $query)
45
    {
46 1
        return array_map(
47 1
            [$this, 'newNode'],
48 1
            $this->queryIds($query)
49 1
        );
50
    }
51
52
    /**
53
     * @param  Query\AbstractQuery $query
54
     * @return Node
55
     */
56 1
    public function queryFirst(Query\AbstractQuery $query)
57
    {
58 1
        $nodes = $this->query($query);
59
60 1
        return reset($nodes) ?: $this->newEmptyNode();
61
    }
62
63
    /**
64
     * @param  string $selector
65
     * @return Node[]
66
     */
67 1
    public function getArray($selector, Query\Filters $filters = null)
68
    {
69 1
        return $this->query(new Query\Css($selector, $filters));
70
    }
71
72
    /**
73
     * @param  string $selector
74
     * @return Node[]
75
     */
76 1
    public function getLinkArray($selector, Query\Filters $filters = null)
77
    {
78 1
        return $this->query(new Query\Link($selector, $filters));
79
    }
80
81
    /**
82
     * @param  string $selector
83
     * @return Node[]
84
     */
85 1
    public function getButtonArray($selector, Query\Filters $filters = null)
86
    {
87 1
        return $this->query(new Query\Button($selector, $filters));
88
    }
89
90
    /**
91
     * @param  string $selector
92
     * @return Node[]
93
     */
94 1
    public function getFieldArray($selector, Query\Filters $filters = null)
95
    {
96 1
        return $this->query(new Query\Field($selector, $filters));
97
    }
98
99
    /**
100
     * @param  string $selector
101
     * @return Node[]
102
     */
103 1
    public function getLabelArray($selector, Query\Filters $filters = null)
104
    {
105 1
        return $this->query(new Query\Label($selector, $filters));
106
    }
107
108
    /**
109
     * @param  string $selector
110
     * @return Node
111
     */
112 1
    public function get($selector, Query\Filters $filters = null)
113
    {
114 1
        return $this->queryFirst(new Query\Css($selector, $filters));
115
    }
116
117
    /**
118
     * @param  string $selector
119
     * @return Node
120
     */
121 1
    public function getLink($selector, Query\Filters $filters = null)
122
    {
123 1
        return $this->queryFirst(new Query\Link($selector, $filters));
124
    }
125
126
    /**
127
     * @param  string $selector
128
     * @return Node
129
     */
130 1
    public function getButton($selector, Query\Filters $filters = null)
131
    {
132 1
        return $this->queryFirst(new Query\Button($selector, $filters));
133
    }
134
135
    /**
136
     * @param  string $selector
137
     * @return Node
138
     */
139 1
    public function getField($selector, Query\Filters $filters = null)
140
    {
141 1
        return $this->queryFirst(new Query\Field($selector, $filters));
142
    }
143
144
    /**
145
     * @param  string $selector
146
     * @return Node
147
     */
148 1
    public function getLabel($selector, Query\Filters $filters = null)
149
    {
150 1
        return $this->queryFirst(new Query\Label($selector, $filters));
151
    }
152
153
    /**
154
     * @param  string $selector
155
     * @return self
156
     */
157 1
    public function clickOn($selector, Query\Filters $filters = null)
158
    {
159 1
        $this
160 1
            ->get($selector, $filters)
161 1
            ->click();
162
163 1
        return $this;
164
    }
165
166
    /**
167
     * @param  string $selector
168
     * @return self
169
     */
170 1
    public function clickLink($selector, Query\Filters $filters = null)
171
    {
172 1
        $this
173 1
            ->getLink($selector, $filters)
174 1
            ->click();
175
176 1
        return $this;
177
    }
178
179
    /**
180
     * @param  string $selector
181
     * @return self
182
     */
183 1
    public function clickButton($selector, Query\Filters $filters = null)
184
    {
185 1
        $this
186 1
            ->getButton($selector, $filters)
187 1
            ->click();
188
189 1
        return $this;
190
    }
191
192
    /**
193
     * @param  string $selector
194
     * @return self
195
     */
196 1
    public function setField($selector, $value, Query\Filters $filters = null)
197
    {
198 1
        $this
199 1
            ->getField($selector, $filters)
200 1
            ->setValue($value);
201
202 1
        return $this;
203
    }
204
205
    /**
206
     * @param  string $selector
207
     * @return self
208
     */
209 1
    public function check($selector, Query\Filters $filters = null)
210
    {
211 1
        $this
212 1
            ->getField($selector, $filters)
213 1
            ->setValue(true);
214
215 1
        return $this;
216
    }
217
218
    /**
219
     * @param  string $selector
220
     */
221 1
    public function uncheck($selector, Query\Filters $filters = null)
222
    {
223 1
        $this
224 1
            ->getField($selector, $filters)
225 1
            ->setValue(false);
226
227 1
        return $this;
228
    }
229
230
    /**
231
     * @param  string $selector
232
     * @return self
233
     */
234 1
    public function select($selector, $optionText, Query\Filters $filters = null)
235
    {
236 1
        $this
237 1
            ->getField($selector, $filters)
238 1
                ->get('option', new Query\Filters(['text' => $optionText]))
239 1
                    ->select();
240
241 1
        return $this;
242
    }
243
}
244