Completed
Pull Request — master (#15)
by James
03:38
created
src/Contract/Axolotl/Collection.php 2 patches
Indentation   +314 added lines, -314 removed lines patch added patch discarded remove patch
@@ -9,318 +9,318 @@
 block discarded – undo
9 9
 
10 10
 interface Collection extends Iterator, Countable, Serializes {
11 11
 
12
-	/**
13
-	 * Returns the type of the collection.
14
-	 *
15
-	 * @return string
16
-	 */
17
-	public function get_type();
18
-
19
-	/**
20
-	 * Returns a collection with $element added.
21
-	 *
22
-	 * @param  mixed $element
23
-	 * @return Collection
24
-	 * @throws InvalidArgumentException
25
-	 */
26
-	public function add( $element );
27
-
28
-	/**
29
-	 * Removes every element from the collection.
30
-	 *
31
-	 * @return Collection
32
-	 */
33
-	public function clear();
34
-
35
-	/**
36
-	 * Returns true if the collection contains any elements that satisfy
37
-	 * $condition, returns false if it contains none.
38
-	 *
39
-	 * @param callable $condition
40
-	 * @return bool
41
-	 */
42
-	public function contains( callable $condition );
43
-
44
-	/**
45
-	 * Returns the first element in the collection that satisfies
46
-	 * $condition, returns false if no such element exists.
47
-	 *
48
-	 * @param callable $condition
49
-	 * @return mixed
50
-	 */
51
-	public function find( callable $condition );
52
-
53
-	/**
54
-	 * Returns the index of the first element in the collection that satisfies
55
-	 * $condition, returns -1 if no such element exists.
56
-	 *
57
-	 * @param callable $condition
58
-	 * @return int
59
-	 */
60
-	public function find_index( callable $condition );
61
-
62
-	/**
63
-	 * Returns the element in the collection at $index.
64
-	 *
65
-	 * @param  int $index Index to get element from.
66
-	 * @return mixed
67
-	 * @throws OutOfRangeException
68
-	 */
69
-	public function at( $index );
70
-
71
-	/**
72
-	 * Returns true if $index is within the collection's range and returns false
73
-	 * if it is not.
74
-	 *
75
-	 * @param  int $index Index to check for existence.
76
-	 * @return bool
77
-	 * @throws InvalidArgumentException
78
-	 */
79
-	public function index_exists( $index );
80
-
81
-	/**
82
-	 * Returns the number of elements in the collection.
83
-	 *
84
-	 * @return int
85
-	 */
86
-	public function count();
87
-
88
-	/**
89
-	 * Returns a collection that only contains the elements which satisfy
90
-	 * $condition.
91
-	 *
92
-	 * @param callable $condition
93
-	 * @return Collection
94
-	 */
95
-	public function filter( callable $condition );
96
-
97
-	/**
98
-	 * Returns the last element in the collection that satisfies $condition,
99
-	 * returns false if no such element exists.
100
-	 *
101
-	 * @param callable $condition
102
-	 * @return mixed
103
-	 */
104
-	public function find_last( callable $condition );
105
-
106
-	/**
107
-	 * Returns the index of the last element in the collection that satisfies
108
-	 * $condition, returns -1 if no such element exists.
109
-	 *
110
-	 * @param callable $condition
111
-	 * @return int
112
-	 */
113
-	public function find_last_index( callable $condition );
114
-
115
-	/**
116
-	 * Returns a collection that contains the subset of elements ranging from the
117
-	 * index $start to $end.
118
-	 *
119
-	 * @param  int $start Begining index to slice from.
120
-	 * @param  int $end   End index to slice to.
121
-	 * @return Collection
122
-	 * @throws InvalidArgumentException
123
-	 */
124
-	public function slice( $start, $end );
125
-
126
-	/**
127
-	 * Inserts $element at $index.
128
-	 *
129
-	 * @param int   $index     Index to start at.
130
-	 * @param mixed $element Element to insert.
131
-	 * @return Collection
132
-	 * @throws InvalidArgumentException
133
-	 * @throws OutOfRangeException
134
-	 */
135
-	public function insert( $index, $element );
136
-
137
-	/**
138
-	 * Inserts the range $elements at $index.
139
-	 *
140
-	 * @param int   $index
141
-	 * @param array $elements
142
-	 * @return Collection
143
-	 * @throws OutOfRangeException
144
-	 */
145
-	public function insert_range( $index, array $elements );
146
-
147
-	/**
148
-	 * Removes all of the elements that satisfy $condition.
149
-	 *
150
-	 * @param  callable $condition
151
-	 * @return Collection
152
-	 */
153
-	public function without( callable $condition );
154
-
155
-	/**
156
-	 * Removes the element at $index.
157
-	 *
158
-	 * @param  int $index Index to remove.
159
-	 * @return Collection
160
-	 * @throws OutOfRangeException
161
-	 */
162
-	public function remove_at( $index );
163
-
164
-	/**
165
-	 * Reverses the order of the elements in the collection.
166
-	 *
167
-	 * @return Collection
168
-	 */
169
-	public function reverse();
170
-
171
-	/**
172
-	 * Sorts the elements in the collection using the user supplied comparison
173
-	 * function $callback.
174
-	 *
175
-	 * @param callable $callback
176
-	 * @return Collection
177
-	 */
178
-	public function sort( callable $callback );
179
-
180
-	/**
181
-	 * Returns an array containing the elements in the collection.
182
-	 *
183
-	 * @return array
184
-	 */
185
-	public function to_array();
186
-
187
-	/**
188
-	 * Iteratively reduces the collection to a single value using the callback
189
-	 * function $callable.
190
-	 *
191
-	 * @param callable $callable
192
-	 * @param null     $initial
193
-	 * @return mixed
194
-	 */
195
-	public function reduce( callable $callable, $initial = null );
196
-
197
-	/**
198
-	 * Returns true if every element in the collection satisfies $condition,
199
-	 * returns false if not.
200
-	 *
201
-	 * @param callable $condition
202
-	 * @return bool
203
-	 */
204
-	public function every( callable $condition );
205
-
206
-	/**
207
-	 * Removes all of the elements in the collection starting at index $num.
208
-	 *
209
-	 * @param  int $num Number of elements to drop.
210
-	 * @return Collection
211
-	 * @throws InvalidArgumentException
212
-	 */
213
-	public function drop( $num );
214
-
215
-	/**
216
-	 * Removes all of the elements in the collectioin between index 0 and $num.
217
-	 *
218
-	 * @param int $num Number of elements to drop.
219
-	 * @return Collection
220
-	 * @throws InvalidArgumentException
221
-	 */
222
-	public function drop_right( $num );
223
-
224
-	/**
225
-	 * Iteratively drops elements in the collection that satisfy $condition until
226
-	 * an element is encountered that does not satisfy $condition.
227
-	 *
228
-	 * @param callable $condition
229
-	 * @return Collection
230
-	 */
231
-	public function drop_while( callable $condition );
232
-
233
-	/**
234
-	 * Removes the first element in the collection.
235
-	 *
236
-	 * @return Collection
237
-	 * @throws InvalidArgumentException
238
-	 */
239
-	public function tail();
240
-
241
-	/**
242
-	 * Removes all of the elements in the collection starting at index $num.
243
-	 *
244
-	 * @param  int $num Number of elements to take.
245
-	 * @return Collection
246
-	 * @throws InvalidArgumentException
247
-	 */
248
-	public function take( $num );
249
-
250
-	/**
251
-	 * Removes all of the elements in the collection before index $num.
252
-	 *
253
-	 * @param int $num Number of elements to take.
254
-	 * @return Collection
255
-	 * @throws InvalidArgumentException
256
-	 */
257
-	public function take_right( $num );
258
-
259
-	/**
260
-	 * Iterates through the collection until an element is encountered that does
261
-	 * not satisfy $condition, then drops all of the elements starting at that
262
-	 * index.
263
-	 *
264
-	 * @param callable $condition
265
-	 * @return Collection
266
-	 */
267
-	public function take_while( callable $condition );
268
-
269
-	/**
270
-	 * Applies the callback function $callable to each element in the collection.
271
-	 *
272
-	 * @param callable $callable
273
-	 */
274
-	public function each( callable $callable );
275
-
276
-	/**
277
-	 * Returns a new instance of the collection with the callback function
278
-	 * $callable applied to each element.
279
-	 *
280
-	 * @param callable $callable
281
-	 * @return Collection
282
-	 */
283
-	public function map( callable $callable );
284
-
285
-	/**
286
-	 * Iteratively reduces the collection to a single value using the callback
287
-	 * function $callable starting at the rightmost index.
288
-	 *
289
-	 * @param callable $callable
290
-	 * @param null     $initial
291
-	 * @return mixed
292
-	 */
293
-	public function reduce_right( callable $callable, $initial = null );
294
-
295
-	/**
296
-	 * Randomly reorders the elements in the collection.
297
-	 *
298
-	 * @return Collection
299
-	 */
300
-	public function shuffle();
301
-
302
-	/**
303
-	 * Adds every member of $elements to the collection.
304
-	 *
305
-	 * @param array|Collection $elements Array of elements to merge.
306
-	 * @return Collection
307
-	 * @throws InvalidArgumentException
308
-	 */
309
-	public function merge( $elements );
310
-
311
-	/**
312
-	 * Get first element of the collection
313
-	 *
314
-	 * @return mixed
315
-	 * @throws OutOfBoundsException
316
-	 */
317
-	public function first();
318
-
319
-	/**
320
-	 * Get last element of the collection
321
-	 *
322
-	 * @return mixed
323
-	 * @throws OutOfBoundsException
324
-	 */
325
-	public function last();
12
+    /**
13
+     * Returns the type of the collection.
14
+     *
15
+     * @return string
16
+     */
17
+    public function get_type();
18
+
19
+    /**
20
+     * Returns a collection with $element added.
21
+     *
22
+     * @param  mixed $element
23
+     * @return Collection
24
+     * @throws InvalidArgumentException
25
+     */
26
+    public function add( $element );
27
+
28
+    /**
29
+     * Removes every element from the collection.
30
+     *
31
+     * @return Collection
32
+     */
33
+    public function clear();
34
+
35
+    /**
36
+     * Returns true if the collection contains any elements that satisfy
37
+     * $condition, returns false if it contains none.
38
+     *
39
+     * @param callable $condition
40
+     * @return bool
41
+     */
42
+    public function contains( callable $condition );
43
+
44
+    /**
45
+     * Returns the first element in the collection that satisfies
46
+     * $condition, returns false if no such element exists.
47
+     *
48
+     * @param callable $condition
49
+     * @return mixed
50
+     */
51
+    public function find( callable $condition );
52
+
53
+    /**
54
+     * Returns the index of the first element in the collection that satisfies
55
+     * $condition, returns -1 if no such element exists.
56
+     *
57
+     * @param callable $condition
58
+     * @return int
59
+     */
60
+    public function find_index( callable $condition );
61
+
62
+    /**
63
+     * Returns the element in the collection at $index.
64
+     *
65
+     * @param  int $index Index to get element from.
66
+     * @return mixed
67
+     * @throws OutOfRangeException
68
+     */
69
+    public function at( $index );
70
+
71
+    /**
72
+     * Returns true if $index is within the collection's range and returns false
73
+     * if it is not.
74
+     *
75
+     * @param  int $index Index to check for existence.
76
+     * @return bool
77
+     * @throws InvalidArgumentException
78
+     */
79
+    public function index_exists( $index );
80
+
81
+    /**
82
+     * Returns the number of elements in the collection.
83
+     *
84
+     * @return int
85
+     */
86
+    public function count();
87
+
88
+    /**
89
+     * Returns a collection that only contains the elements which satisfy
90
+     * $condition.
91
+     *
92
+     * @param callable $condition
93
+     * @return Collection
94
+     */
95
+    public function filter( callable $condition );
96
+
97
+    /**
98
+     * Returns the last element in the collection that satisfies $condition,
99
+     * returns false if no such element exists.
100
+     *
101
+     * @param callable $condition
102
+     * @return mixed
103
+     */
104
+    public function find_last( callable $condition );
105
+
106
+    /**
107
+     * Returns the index of the last element in the collection that satisfies
108
+     * $condition, returns -1 if no such element exists.
109
+     *
110
+     * @param callable $condition
111
+     * @return int
112
+     */
113
+    public function find_last_index( callable $condition );
114
+
115
+    /**
116
+     * Returns a collection that contains the subset of elements ranging from the
117
+     * index $start to $end.
118
+     *
119
+     * @param  int $start Begining index to slice from.
120
+     * @param  int $end   End index to slice to.
121
+     * @return Collection
122
+     * @throws InvalidArgumentException
123
+     */
124
+    public function slice( $start, $end );
125
+
126
+    /**
127
+     * Inserts $element at $index.
128
+     *
129
+     * @param int   $index     Index to start at.
130
+     * @param mixed $element Element to insert.
131
+     * @return Collection
132
+     * @throws InvalidArgumentException
133
+     * @throws OutOfRangeException
134
+     */
135
+    public function insert( $index, $element );
136
+
137
+    /**
138
+     * Inserts the range $elements at $index.
139
+     *
140
+     * @param int   $index
141
+     * @param array $elements
142
+     * @return Collection
143
+     * @throws OutOfRangeException
144
+     */
145
+    public function insert_range( $index, array $elements );
146
+
147
+    /**
148
+     * Removes all of the elements that satisfy $condition.
149
+     *
150
+     * @param  callable $condition
151
+     * @return Collection
152
+     */
153
+    public function without( callable $condition );
154
+
155
+    /**
156
+     * Removes the element at $index.
157
+     *
158
+     * @param  int $index Index to remove.
159
+     * @return Collection
160
+     * @throws OutOfRangeException
161
+     */
162
+    public function remove_at( $index );
163
+
164
+    /**
165
+     * Reverses the order of the elements in the collection.
166
+     *
167
+     * @return Collection
168
+     */
169
+    public function reverse();
170
+
171
+    /**
172
+     * Sorts the elements in the collection using the user supplied comparison
173
+     * function $callback.
174
+     *
175
+     * @param callable $callback
176
+     * @return Collection
177
+     */
178
+    public function sort( callable $callback );
179
+
180
+    /**
181
+     * Returns an array containing the elements in the collection.
182
+     *
183
+     * @return array
184
+     */
185
+    public function to_array();
186
+
187
+    /**
188
+     * Iteratively reduces the collection to a single value using the callback
189
+     * function $callable.
190
+     *
191
+     * @param callable $callable
192
+     * @param null     $initial
193
+     * @return mixed
194
+     */
195
+    public function reduce( callable $callable, $initial = null );
196
+
197
+    /**
198
+     * Returns true if every element in the collection satisfies $condition,
199
+     * returns false if not.
200
+     *
201
+     * @param callable $condition
202
+     * @return bool
203
+     */
204
+    public function every( callable $condition );
205
+
206
+    /**
207
+     * Removes all of the elements in the collection starting at index $num.
208
+     *
209
+     * @param  int $num Number of elements to drop.
210
+     * @return Collection
211
+     * @throws InvalidArgumentException
212
+     */
213
+    public function drop( $num );
214
+
215
+    /**
216
+     * Removes all of the elements in the collectioin between index 0 and $num.
217
+     *
218
+     * @param int $num Number of elements to drop.
219
+     * @return Collection
220
+     * @throws InvalidArgumentException
221
+     */
222
+    public function drop_right( $num );
223
+
224
+    /**
225
+     * Iteratively drops elements in the collection that satisfy $condition until
226
+     * an element is encountered that does not satisfy $condition.
227
+     *
228
+     * @param callable $condition
229
+     * @return Collection
230
+     */
231
+    public function drop_while( callable $condition );
232
+
233
+    /**
234
+     * Removes the first element in the collection.
235
+     *
236
+     * @return Collection
237
+     * @throws InvalidArgumentException
238
+     */
239
+    public function tail();
240
+
241
+    /**
242
+     * Removes all of the elements in the collection starting at index $num.
243
+     *
244
+     * @param  int $num Number of elements to take.
245
+     * @return Collection
246
+     * @throws InvalidArgumentException
247
+     */
248
+    public function take( $num );
249
+
250
+    /**
251
+     * Removes all of the elements in the collection before index $num.
252
+     *
253
+     * @param int $num Number of elements to take.
254
+     * @return Collection
255
+     * @throws InvalidArgumentException
256
+     */
257
+    public function take_right( $num );
258
+
259
+    /**
260
+     * Iterates through the collection until an element is encountered that does
261
+     * not satisfy $condition, then drops all of the elements starting at that
262
+     * index.
263
+     *
264
+     * @param callable $condition
265
+     * @return Collection
266
+     */
267
+    public function take_while( callable $condition );
268
+
269
+    /**
270
+     * Applies the callback function $callable to each element in the collection.
271
+     *
272
+     * @param callable $callable
273
+     */
274
+    public function each( callable $callable );
275
+
276
+    /**
277
+     * Returns a new instance of the collection with the callback function
278
+     * $callable applied to each element.
279
+     *
280
+     * @param callable $callable
281
+     * @return Collection
282
+     */
283
+    public function map( callable $callable );
284
+
285
+    /**
286
+     * Iteratively reduces the collection to a single value using the callback
287
+     * function $callable starting at the rightmost index.
288
+     *
289
+     * @param callable $callable
290
+     * @param null     $initial
291
+     * @return mixed
292
+     */
293
+    public function reduce_right( callable $callable, $initial = null );
294
+
295
+    /**
296
+     * Randomly reorders the elements in the collection.
297
+     *
298
+     * @return Collection
299
+     */
300
+    public function shuffle();
301
+
302
+    /**
303
+     * Adds every member of $elements to the collection.
304
+     *
305
+     * @param array|Collection $elements Array of elements to merge.
306
+     * @return Collection
307
+     * @throws InvalidArgumentException
308
+     */
309
+    public function merge( $elements );
310
+
311
+    /**
312
+     * Get first element of the collection
313
+     *
314
+     * @return mixed
315
+     * @throws OutOfBoundsException
316
+     */
317
+    public function first();
318
+
319
+    /**
320
+     * Get last element of the collection
321
+     *
322
+     * @return mixed
323
+     * @throws OutOfBoundsException
324
+     */
325
+    public function last();
326 326
 }
Please login to merge, or discard this patch.
Spacing   +27 added lines, -27 removed lines patch added patch discarded remove patch
@@ -23,7 +23,7 @@  discard block
 block discarded – undo
23 23
 	 * @return Collection
24 24
 	 * @throws InvalidArgumentException
25 25
 	 */
26
-	public function add( $element );
26
+	public function add($element);
27 27
 
28 28
 	/**
29 29
 	 * Removes every element from the collection.
@@ -39,7 +39,7 @@  discard block
 block discarded – undo
39 39
 	 * @param callable $condition
40 40
 	 * @return bool
41 41
 	 */
42
-	public function contains( callable $condition );
42
+	public function contains(callable $condition);
43 43
 
44 44
 	/**
45 45
 	 * Returns the first element in the collection that satisfies
@@ -48,7 +48,7 @@  discard block
 block discarded – undo
48 48
 	 * @param callable $condition
49 49
 	 * @return mixed
50 50
 	 */
51
-	public function find( callable $condition );
51
+	public function find(callable $condition);
52 52
 
53 53
 	/**
54 54
 	 * Returns the index of the first element in the collection that satisfies
@@ -57,7 +57,7 @@  discard block
 block discarded – undo
57 57
 	 * @param callable $condition
58 58
 	 * @return int
59 59
 	 */
60
-	public function find_index( callable $condition );
60
+	public function find_index(callable $condition);
61 61
 
62 62
 	/**
63 63
 	 * Returns the element in the collection at $index.
@@ -66,7 +66,7 @@  discard block
 block discarded – undo
66 66
 	 * @return mixed
67 67
 	 * @throws OutOfRangeException
68 68
 	 */
69
-	public function at( $index );
69
+	public function at($index);
70 70
 
71 71
 	/**
72 72
 	 * Returns true if $index is within the collection's range and returns false
@@ -76,7 +76,7 @@  discard block
 block discarded – undo
76 76
 	 * @return bool
77 77
 	 * @throws InvalidArgumentException
78 78
 	 */
79
-	public function index_exists( $index );
79
+	public function index_exists($index);
80 80
 
81 81
 	/**
82 82
 	 * Returns the number of elements in the collection.
@@ -92,7 +92,7 @@  discard block
 block discarded – undo
92 92
 	 * @param callable $condition
93 93
 	 * @return Collection
94 94
 	 */
95
-	public function filter( callable $condition );
95
+	public function filter(callable $condition);
96 96
 
97 97
 	/**
98 98
 	 * Returns the last element in the collection that satisfies $condition,
@@ -101,7 +101,7 @@  discard block
 block discarded – undo
101 101
 	 * @param callable $condition
102 102
 	 * @return mixed
103 103
 	 */
104
-	public function find_last( callable $condition );
104
+	public function find_last(callable $condition);
105 105
 
106 106
 	/**
107 107
 	 * Returns the index of the last element in the collection that satisfies
@@ -110,7 +110,7 @@  discard block
 block discarded – undo
110 110
 	 * @param callable $condition
111 111
 	 * @return int
112 112
 	 */
113
-	public function find_last_index( callable $condition );
113
+	public function find_last_index(callable $condition);
114 114
 
115 115
 	/**
116 116
 	 * Returns a collection that contains the subset of elements ranging from the
@@ -121,7 +121,7 @@  discard block
 block discarded – undo
121 121
 	 * @return Collection
122 122
 	 * @throws InvalidArgumentException
123 123
 	 */
124
-	public function slice( $start, $end );
124
+	public function slice($start, $end);
125 125
 
126 126
 	/**
127 127
 	 * Inserts $element at $index.
@@ -132,7 +132,7 @@  discard block
 block discarded – undo
132 132
 	 * @throws InvalidArgumentException
133 133
 	 * @throws OutOfRangeException
134 134
 	 */
135
-	public function insert( $index, $element );
135
+	public function insert($index, $element);
136 136
 
137 137
 	/**
138 138
 	 * Inserts the range $elements at $index.
@@ -142,7 +142,7 @@  discard block
 block discarded – undo
142 142
 	 * @return Collection
143 143
 	 * @throws OutOfRangeException
144 144
 	 */
145
-	public function insert_range( $index, array $elements );
145
+	public function insert_range($index, array $elements);
146 146
 
147 147
 	/**
148 148
 	 * Removes all of the elements that satisfy $condition.
@@ -150,7 +150,7 @@  discard block
 block discarded – undo
150 150
 	 * @param  callable $condition
151 151
 	 * @return Collection
152 152
 	 */
153
-	public function without( callable $condition );
153
+	public function without(callable $condition);
154 154
 
155 155
 	/**
156 156
 	 * Removes the element at $index.
@@ -159,7 +159,7 @@  discard block
 block discarded – undo
159 159
 	 * @return Collection
160 160
 	 * @throws OutOfRangeException
161 161
 	 */
162
-	public function remove_at( $index );
162
+	public function remove_at($index);
163 163
 
164 164
 	/**
165 165
 	 * Reverses the order of the elements in the collection.
@@ -175,7 +175,7 @@  discard block
 block discarded – undo
175 175
 	 * @param callable $callback
176 176
 	 * @return Collection
177 177
 	 */
178
-	public function sort( callable $callback );
178
+	public function sort(callable $callback);
179 179
 
180 180
 	/**
181 181
 	 * Returns an array containing the elements in the collection.
@@ -192,7 +192,7 @@  discard block
 block discarded – undo
192 192
 	 * @param null     $initial
193 193
 	 * @return mixed
194 194
 	 */
195
-	public function reduce( callable $callable, $initial = null );
195
+	public function reduce(callable $callable, $initial = null);
196 196
 
197 197
 	/**
198 198
 	 * Returns true if every element in the collection satisfies $condition,
@@ -201,7 +201,7 @@  discard block
 block discarded – undo
201 201
 	 * @param callable $condition
202 202
 	 * @return bool
203 203
 	 */
204
-	public function every( callable $condition );
204
+	public function every(callable $condition);
205 205
 
206 206
 	/**
207 207
 	 * Removes all of the elements in the collection starting at index $num.
@@ -210,7 +210,7 @@  discard block
 block discarded – undo
210 210
 	 * @return Collection
211 211
 	 * @throws InvalidArgumentException
212 212
 	 */
213
-	public function drop( $num );
213
+	public function drop($num);
214 214
 
215 215
 	/**
216 216
 	 * Removes all of the elements in the collectioin between index 0 and $num.
@@ -219,7 +219,7 @@  discard block
 block discarded – undo
219 219
 	 * @return Collection
220 220
 	 * @throws InvalidArgumentException
221 221
 	 */
222
-	public function drop_right( $num );
222
+	public function drop_right($num);
223 223
 
224 224
 	/**
225 225
 	 * Iteratively drops elements in the collection that satisfy $condition until
@@ -228,7 +228,7 @@  discard block
 block discarded – undo
228 228
 	 * @param callable $condition
229 229
 	 * @return Collection
230 230
 	 */
231
-	public function drop_while( callable $condition );
231
+	public function drop_while(callable $condition);
232 232
 
233 233
 	/**
234 234
 	 * Removes the first element in the collection.
@@ -245,7 +245,7 @@  discard block
 block discarded – undo
245 245
 	 * @return Collection
246 246
 	 * @throws InvalidArgumentException
247 247
 	 */
248
-	public function take( $num );
248
+	public function take($num);
249 249
 
250 250
 	/**
251 251
 	 * Removes all of the elements in the collection before index $num.
@@ -254,7 +254,7 @@  discard block
 block discarded – undo
254 254
 	 * @return Collection
255 255
 	 * @throws InvalidArgumentException
256 256
 	 */
257
-	public function take_right( $num );
257
+	public function take_right($num);
258 258
 
259 259
 	/**
260 260
 	 * Iterates through the collection until an element is encountered that does
@@ -264,14 +264,14 @@  discard block
 block discarded – undo
264 264
 	 * @param callable $condition
265 265
 	 * @return Collection
266 266
 	 */
267
-	public function take_while( callable $condition );
267
+	public function take_while(callable $condition);
268 268
 
269 269
 	/**
270 270
 	 * Applies the callback function $callable to each element in the collection.
271 271
 	 *
272 272
 	 * @param callable $callable
273 273
 	 */
274
-	public function each( callable $callable );
274
+	public function each(callable $callable);
275 275
 
276 276
 	/**
277 277
 	 * Returns a new instance of the collection with the callback function
@@ -280,7 +280,7 @@  discard block
 block discarded – undo
280 280
 	 * @param callable $callable
281 281
 	 * @return Collection
282 282
 	 */
283
-	public function map( callable $callable );
283
+	public function map(callable $callable);
284 284
 
285 285
 	/**
286 286
 	 * Iteratively reduces the collection to a single value using the callback
@@ -290,7 +290,7 @@  discard block
 block discarded – undo
290 290
 	 * @param null     $initial
291 291
 	 * @return mixed
292 292
 	 */
293
-	public function reduce_right( callable $callable, $initial = null );
293
+	public function reduce_right(callable $callable, $initial = null);
294 294
 
295 295
 	/**
296 296
 	 * Randomly reorders the elements in the collection.
@@ -306,7 +306,7 @@  discard block
 block discarded – undo
306 306
 	 * @return Collection
307 307
 	 * @throws InvalidArgumentException
308 308
 	 */
309
-	public function merge( $elements );
309
+	public function merge($elements);
310 310
 
311 311
 	/**
312 312
 	 * Get first element of the collection
Please login to merge, or discard this patch.
src/Axolotl/Collection.php 3 patches
Doc Comments   +3 added lines, -3 removed lines patch added patch discarded remove patch
@@ -180,7 +180,7 @@  discard block
 block discarded – undo
180 180
 	 *
181 181
 	 * @param  callable $condition Condition to satisfy.
182 182
 	 *
183
-	 * @return mixed
183
+	 * @return Collection
184 184
 	 */
185 185
 	public function filter( callable $condition ) {
186 186
 		$elements = array();
@@ -670,7 +670,7 @@  discard block
 block discarded – undo
670 670
 	/**
671 671
 	 * Return the key of the current element.
672 672
 	 *
673
-	 * @return mixed
673
+	 * @return integer
674 674
 	 */
675 675
 	public function key() {
676 676
 		return $this->position;
@@ -697,7 +697,7 @@  discard block
 block discarded – undo
697 697
 	 * from a trusted set of elements.
698 698
 	 *
699 699
 	 * @param array      $elements Array of elements to pass into new collection.
700
-	 * @param null|mixed $type
700
+	 * @param string $type
701 701
 	 *
702 702
 	 * @return static
703 703
 	 */
Please login to merge, or discard this patch.
Indentation   +743 added lines, -743 removed lines patch added patch discarded remove patch
@@ -15,747 +15,747 @@
 block discarded – undo
15 15
  */
16 16
 class Collection implements CollectionContract {
17 17
 
18
-	/**
19
-	 * Collection elements.
20
-	 *
21
-	 * @var array
22
-	 */
23
-	protected $elements = array();
24
-
25
-	/**
26
-	 * Collection type to enforce.
27
-	 *
28
-	 * @var Type
29
-	 */
30
-	private $type;
31
-
32
-	/**
33
-	 * Where Collection is in loop.
34
-	 *
35
-	 * @var int
36
-	 */
37
-	protected $position = 0;
38
-
39
-	/**
40
-	 * Collection constructor.
41
-	 *
42
-	 * @param string $type
43
-	 * @param array  $elements
44
-	 */
45
-	public function __construct( $type, array $elements = array() ) {
46
-		$this->type = new Type( $type );
47
-
48
-		if ( $this->type->is_model() ) {
49
-			foreach ( $elements as $idx => $element ) {
50
-				if ( is_array( $element ) ) {
51
-					$elements[ $idx ] = $this->type->create_model( $element );
52
-				}
53
-			}
54
-		}
55
-
56
-		if ( $elements ) {
57
-			$this->type->validate_elements( $elements );
58
-		}
59
-
60
-		$this->elements = $elements;
61
-	}
62
-
63
-	/**
64
-	 * {@inheritdoc}
65
-	 *
66
-	 * @return string
67
-	 */
68
-	public function get_type() {
69
-		return $this->type->get_type();
70
-	}
71
-
72
-	/**
73
-	 * {@inheritdoc}
74
-	 *
75
-	 * @param mixed $element
76
-	 *
77
-	 * @return Collection
78
-	 *
79
-	 * @throws InvalidArgumentException
80
-	 */
81
-	public function add( $element ) {
82
-		if ( $this->type->is_model() && is_array( $element ) ) {
83
-			$element = $this->type->create_model( $element );
84
-		}
85
-
86
-		$this->type->validate_element( $element );
87
-
88
-		$elements   = $this->elements;
89
-		$elements[] = $element;
90
-
91
-		$collection = new static( $this->get_type() );
92
-		$collection->set_from_trusted( $elements );
93
-
94
-		return $collection;
95
-	}
96
-
97
-	/**
98
-	 * {@inheritdoc}
99
-	 *
100
-	 * @return Collection
101
-	 */
102
-	public function clear() {
103
-		return new static( $this->get_type() );
104
-	}
105
-
106
-	/**
107
-	 * {@inheritdoc}
108
-	 *
109
-	 * @param  callable $condition Condition to satisfy.
110
-	 *
111
-	 * @return bool
112
-	 */
113
-	public function contains( callable $condition ) {
114
-		return (bool) $this->find( $condition );
115
-	}
116
-
117
-	/**
118
-	 * {@inheritdoc}
119
-	 *
120
-	 * @param  callable $condition Condition to satisfy.
121
-	 *
122
-	 * @return mixed
123
-	 */
124
-	public function find( callable $condition ) {
125
-		$index = $this->find_index( $condition );
126
-
127
-		return -1 === $index ? false : $this->elements[ $index ];
128
-	}
129
-
130
-	/**
131
-	 * {@inheritdoc}
132
-	 *
133
-	 * @param  callable $condition Condition to satisfy.
134
-	 *
135
-	 * @return int
136
-	 */
137
-	public function find_index( callable $condition ) {
138
-		$index = -1;
139
-
140
-		for ( $i = 0, $count = count( $this->elements ); $i < $count; $i++ ) {
141
-			if ( call_user_func( $condition, ($this->at( $i ) ) ) ) {
142
-				$index = $i;
143
-				break;
144
-			}
145
-		}
146
-
147
-		return $index;
148
-	}
149
-
150
-	/**
151
-	 * Fetches the element at the provided index.
152
-	 *
153
-	 * @param int $index Index to get element from.
154
-	 *
155
-	 * @return mixed
156
-	 *
157
-	 * @throws OutOfRangeException
158
-	 */
159
-	public function at( $index ) {
160
-		$this->validate_index( $index );
161
-
162
-		return $this->elements[ $index ];
163
-	}
164
-
165
-	/**
166
-	 * {@inheritdoc}
167
-	 *
168
-	 * @param  int $index Index to check for existence.
169
-	 *
170
-	 * @return bool
171
-	 *
172
-	 * @throws InvalidArgumentException
173
-	 */
174
-	public function index_exists( $index ) {
175
-		if ( ! is_int( $index ) ) {
176
-			throw new InvalidArgumentException( 'Index must be an integer' );
177
-		}
178
-
179
-		if ( $index < 0 ) {
180
-			throw new InvalidArgumentException( 'Index must be a non-negative integer' );
181
-		}
182
-
183
-		return $index < $this->count();
184
-	}
185
-
186
-	/**
187
-	 * {@inheritdoc}
188
-	 *
189
-	 * @param  callable $condition Condition to satisfy.
190
-	 *
191
-	 * @return mixed
192
-	 */
193
-	public function filter( callable $condition ) {
194
-		$elements = array();
195
-
196
-		foreach ( $this->elements as $element ) {
197
-			if ( call_user_func( $condition, $element ) ) {
198
-				$elements[] = $element;
199
-			}
200
-		}
201
-
202
-		return $this->new_from_trusted( $elements );
203
-	}
204
-	/**
205
-	 * {@inheritdoc}
206
-	 *
207
-	 * @param  callable $condition Condition to satisfy.
208
-	 *
209
-	 * @return mixed
210
-	 */
211
-	public function find_last( callable $condition ) {
212
-		$index = $this->find_last_index( $condition );
213
-
214
-		return -1 === $index ? null : $this->elements[ $index ];
215
-	}
216
-
217
-	/**
218
-	 * {@inheritdoc}
219
-	 *
220
-	 * @param  callable $condition
221
-	 * @return int
222
-	 */
223
-	public function find_last_index( callable $condition ) {
224
-		$index = -1;
225
-
226
-		for ( $i = count( $this->elements ) - 1; $i >= 0; $i-- ) {
227
-			if ( call_user_func( $condition, $this->elements[ $i ] ) ) {
228
-				$index = $i;
229
-				break;
230
-			}
231
-		}
232
-
233
-		return $index;
234
-	}
235
-
236
-	/**
237
-	 * {@inheritdoc}
238
-	 *
239
-	 * @param  int $start Begining index to slice from.
240
-	 * @param  int $end   End index to slice to.
241
-	 *
242
-	 * @return Collection
243
-	 *
244
-	 * @throws InvalidArgumentException
245
-	 */
246
-	public function slice( $start, $end ) {
247
-		if ( $start < 0 || ! is_int( $start ) ) {
248
-			throw new InvalidArgumentException( 'Start must be a non-negative integer' );
249
-		}
250
-
251
-		if ( $end < 0 || ! is_int( $end ) ) {
252
-			throw new InvalidArgumentException( 'End must be a positive integer' );
253
-		}
254
-
255
-		if ( $start > $end ) {
256
-			throw new InvalidArgumentException( 'End must be greater than start' );
257
-		}
258
-
259
-		if ( $end > $this->count() + 1 ) {
260
-			throw new InvalidArgumentException( 'End must be less than the count of the items in the Collection' );
261
-		}
262
-
263
-		$length = $end - $start + 1;
264
-		$subset = array_slice( $this->elements, $start, $length );
265
-
266
-		$collection = new static($this->type);
267
-		$collection->set_from_trusted( $subset );
268
-
269
-		return $collection;
270
-	}
271
-
272
-	/**
273
-	 * {@inheritdoc}
274
-	 *
275
-	 * @param int   $index     Index to start at.
276
-	 * @param mixed $element Element to insert.
277
-	 *
278
-	 * @return Collection
279
-	 *
280
-	 * @throws InvalidArgumentException
281
-	 * @throws OutOfRangeException
282
-	 */
283
-	public function insert( $index, $element ) {
284
-		$this->validate_index( $index );
285
-		$this->type->validate_element( $element );
286
-
287
-		$a = array_slice( $this->elements, 0, $index );
288
-		$b = array_slice( $this->elements, $index, count( $this->elements ) );
289
-
290
-		$a[] = $element;
291
-
292
-		return $this->new_from_trusted( array_merge( $a, $b ) );
293
-	}
294
-
295
-	/**
296
-	 * {@inheritdoc}
297
-	 *
298
-	 * @param int   $index    Index to start insertion at.
299
-	 * @param array $elements Elements in insert.
300
-	 *
301
-	 * @return Collection
302
-	 *
303
-	 * @throws OutOfRangeException
304
-	 */
305
-	public function insert_range( $index, array $elements ) {
306
-		$this->validate_index( $index );
307
-		$this->type->validate_elements( $elements );
308
-
309
-		// To work with negative index, get the positive relation to 0 index
310
-		$index < 0 && $index = $this->count() + $index + 1;
311
-
312
-		$partA = array_slice( $this->elements, 0, $index );
313
-		$partB = array_slice( $this->elements, $index, count( $this->elements ) );
314
-
315
-		$elements1 = array_merge( $partA, $elements );
316
-		$elements1 = array_merge( $elements1, $partB );
317
-
318
-		$col = new static( $this->type );
319
-		$col->set_from_trusted( $elements1 );
320
-
321
-		return $col;
322
-	}
323
-
324
-	/**
325
-	 * {@inheritdoc}
326
-	 *
327
-	 * @param  callable $condition Condition to satisfy.
328
-	 *
329
-	 * @return Collection
330
-	 */
331
-	public function without( callable $condition ) {
332
-		$inverse = function ( $element ) use ( $condition ) {
333
-			return ! call_user_func( $condition, $element );
334
-		};
335
-
336
-		return $this->filter( $inverse );
337
-	}
338
-
339
-	/**
340
-	 * {@inheritdoc}
341
-	 *
342
-	 * @param  int $index Index to remove.
343
-	 *
344
-	 * @return Collection
345
-	 *
346
-	 * @throws OutOfRangeException
347
-	 */
348
-	public function remove_at( $index ) {
349
-		$this->validate_index( $index );
350
-
351
-		$elements = $this->elements;
352
-
353
-		return $this->new_from_trusted(
354
-			array_merge(
355
-				array_slice( $elements, 0, $index ),
356
-				array_slice( $elements, $index + 1, count( $elements ) )
357
-			)
358
-		);
359
-	}
360
-	/**
361
-	 * {@inheritdoc}
362
-	 *
363
-	 * @return Collection
364
-	 */
365
-	public function reverse() {
366
-		return $this->new_from_trusted(
367
-			array_reverse( $this->elements )
368
-		);
369
-	}
370
-
371
-	/**
372
-	 * {@inheritdoc}
373
-	 *
374
-	 * @param callable $callback Sort callback.
375
-	 *
376
-	 * @return Collection
377
-	 */
378
-	public function sort( callable $callback ) {
379
-		$elements = $this->elements;
380
-		usort( $elements, $callback );
381
-		return $this->new_from_trusted( $elements );
382
-	}
383
-
384
-	/**
385
-	 * {@inheritdoc}
386
-	 *
387
-	 * @return array
388
-	 */
389
-	public function to_array() {
390
-		return $this->elements;
391
-	}
392
-
393
-	/**
394
-	 * {@inheritdoc}
395
-	 *
396
-	 * @param callable $callable Reducer function.
397
-	 *
398
-	 * @param null     $initial  Initial reducer value.
399
-	 *
400
-	 * @return mixed
401
-	 */
402
-	public function reduce( callable $callable, $initial = null ) {
403
-		return array_reduce( $this->elements, $callable, $initial );
404
-	}
405
-
406
-	/**
407
-	 * {@inheritdoc}
408
-	 *
409
-	 * @param callable $condition Condition callback.
410
-	 *
411
-	 * @return bool
412
-	 */
413
-	public function every( callable $condition ) {
414
-		$response = true;
415
-
416
-		foreach ( $this->elements as $element ) {
417
-			$result = call_user_func( $condition, $element );
418
-
419
-			if ( false === $result ) {
420
-				$response = false;
421
-				break;
422
-			}
423
-		}
424
-
425
-		return $response;
426
-	}
427
-
428
-	/**
429
-	 * {@inheritdoc}
430
-	 *
431
-	 * @param  int $num Number of elements to drop.
432
-	 *
433
-	 * @return Collection
434
-	 *
435
-	 * @throws InvalidArgumentException
436
-	 */
437
-	public function drop( $num ) {
438
-		return $this->slice( $num, $this->count() );
439
-	}
440
-
441
-	/**
442
-	 * {@inheritdoc}
443
-	 *
444
-	 * @param int $num Number of elements to drop.
445
-	 *
446
-	 * @return Collection
447
-	 *
448
-	 * @throws InvalidArgumentException
449
-	 */
450
-	public function drop_right( $num ) {
451
-		return $num !== $this->count()
452
-			? $this->slice( 0, $this->count() - $num - 1 )
453
-			: $this->clear();
454
-	}
455
-
456
-	/**
457
-	 * {@inheritdoc}
458
-	 *
459
-	 * @param callable $condition Condition callback.
460
-	 *
461
-	 * @return Collection
462
-	 */
463
-	public function drop_while( callable $condition ) {
464
-		$count = $this->count_while_true( $condition );
465
-		return $count ? $this->drop( $count ) : $this;
466
-	}
467
-	/**
468
-	 * {@inheritdoc}
469
-	 *
470
-	 * @return Collection
471
-	 *
472
-	 * @throws InvalidArgumentException
473
-	 */
474
-	public function tail() {
475
-		return $this->slice( 1, $this->count() );
476
-	}
477
-
478
-	/**
479
-	 * {@inheritdoc}
480
-	 *
481
-	 * @param  int $num Number of elements to take.
482
-	 *
483
-	 * @return Collection
484
-	 *
485
-	 * @throws InvalidArgumentException
486
-	 */
487
-	public function take( $num ) {
488
-		return $this->slice( 0, $num - 1 );
489
-	}
490
-
491
-	/**
492
-	 * {@inheritdoc}
493
-	 *
494
-	 * @param int $num Number of elements to take.
495
-	 *
496
-	 * @return Collection
497
-	 *
498
-	 * @throws InvalidArgumentException
499
-	 */
500
-	public function take_right( $num ) {
501
-		return $this->slice( $this->count() - $num, $this->count() );
502
-	}
503
-
504
-	/**
505
-	 * {@inheritdoc}
506
-	 *
507
-	 * @param callable $condition Callback function.
508
-	 *
509
-	 * @return Collection
510
-	 */
511
-	public function take_while( callable $condition ) {
512
-		$count = $this->count_while_true( $condition );
513
-
514
-		return $count ? $this->take( $count ) : $this->clear();
515
-	}
516
-
517
-	/**
518
-	 * {@inheritdoc}
519
-	 *
520
-	 * @param callable $callable Callback function.
521
-	 */
522
-	public function each( callable $callable ) {
523
-		foreach ( $this->elements as $element ) {
524
-			call_user_func( $callable, $element );
525
-		}
526
-	}
527
-
528
-	/**
529
-	 * {@inheritdoc}
530
-	 *
531
-	 * @param callable $callable Callback function.
532
-	 *
533
-	 * @return Collection
534
-	 */
535
-	public function map( callable $callable ) {
536
-		$elements = array();
537
-		$type = null;
538
-		foreach ( $this->elements as $element ) {
539
-			$result = call_user_func( $callable, $element );
540
-
541
-			if ( null === $type ) {
542
-				$type = gettype( $result );
543
-
544
-				if ( 'object' === $type ) {
545
-					$type = get_class( $result );
546
-				}
547
-			}
548
-
549
-			$elements[] = $result;
550
-		}
551
-
552
-		return $this->new_from_trusted( $elements, $type ? : $this->get_type() );
553
-	}
554
-
555
-	/**
556
-	 * {@inheritdoc}
557
-	 *
558
-	 * @param callable $callable Reducer function.
559
-	 * @param null     $initial  Initial value.
560
-	 *
561
-	 * @return mixed
562
-	 */
563
-	public function reduce_right( callable $callable, $initial = null ) {
564
-		return array_reduce(
565
-			array_reverse( $this->elements ),
566
-			$callable,
567
-			$initial
568
-		);
569
-	}
570
-
571
-	/**
572
-	 * {@inheritdoc}
573
-	 *
574
-	 * @return Collection
575
-	 */
576
-	public function shuffle() {
577
-		$elements = $this->elements;
578
-		shuffle( $elements );
579
-
580
-		return $this->new_from_trusted( $elements );
581
-	}
582
-
583
-	/**
584
-	 * {@inheritdoc}
585
-	 *
586
-	 * @param array|Collection $elements Array of elements to merge.
587
-	 *
588
-	 * @return Collection
589
-	 *
590
-	 * @throws InvalidArgumentException
591
-	 */
592
-	public function merge( $elements ) {
593
-		if ( $elements instanceof static ) {
594
-			$elements = $elements->to_array();
595
-		}
596
-
597
-		if ( ! is_array( $elements ) ) {
598
-			throw new InvalidArgumentException( 'Merge must be given array or Collection' );
599
-		}
600
-
601
-		$this->type->validate_elements( $elements );
602
-
603
-		return $this->new_from_trusted(
604
-			array_merge( $this->elements, $elements )
605
-		);
606
-	}
607
-
608
-	/**
609
-	 * {@inheritdoc}
610
-	 *
611
-	 * @return mixed
612
-	 *
613
-	 * @throws OutOfBoundsException
614
-	 */
615
-	public function first() {
616
-		if ( empty( $this->elements ) ) {
617
-			throw new OutOfBoundsException( 'Cannot get first element of empty Collection' );
618
-		}
619
-
620
-		return reset( $this->elements );
621
-	}
622
-
623
-	/**
624
-	 * {@inheritdoc}
625
-	 *
626
-	 * @return mixed
627
-	 *
628
-	 * @throws OutOfBoundsException
629
-	 */
630
-	public function last() {
631
-		if ( empty( $this->elements ) ) {
632
-			throw new OutOfBoundsException( 'Cannot get last element of empty Collection' );
633
-		}
634
-
635
-		return end( $this->elements );
636
-	}
637
-
638
-	/**
639
-	 * {@inheritdoc}
640
-	 *
641
-	 * @return int
642
-	 */
643
-	public function count() {
644
-		return count( $this->elements );
645
-	}
646
-
647
-	/**
648
-	 * {@inheritDoc}
649
-	 *
650
-	 * @return array
651
-	 */
652
-	public function serialize() {
653
-		return $this->map(function( $element ) {
654
-			if ( $element instanceof Serializes ) {
655
-				return $element->serialize();
656
-			}
657
-
658
-			return $element;
659
-		} )->to_array();
660
-	}
661
-
662
-	/**
663
-	 * Return the current element.
664
-	 *
665
-	 * @return mixed
666
-	 */
667
-	public function current() {
668
-		return $this->at( $this->position );
669
-	}
670
-
671
-	/**
672
-	 * Move forward to next element.
673
-	 */
674
-	public function next() {
675
-		$this->position ++;
676
-	}
677
-
678
-	/**
679
-	 * Return the key of the current element.
680
-	 *
681
-	 * @return mixed
682
-	 */
683
-	public function key() {
684
-		return $this->position;
685
-	}
686
-
687
-	/**
688
-	 * Checks if current position is valid.
689
-	 *
690
-	 * @return bool
691
-	 */
692
-	public function valid() {
693
-		return isset( $this->elements[ $this->position ] );
694
-	}
695
-
696
-	/**
697
-	 * Rewind the Iterator to the first element.
698
-	 */
699
-	public function rewind() {
700
-		$this->position = 0;
701
-	}
702
-
703
-	/**
704
-	 * Creates a new instance of the Collection
705
-	 * from a trusted set of elements.
706
-	 *
707
-	 * @param array      $elements Array of elements to pass into new collection.
708
-	 * @param null|mixed $type
709
-	 *
710
-	 * @return static
711
-	 */
712
-	protected function new_from_trusted( array $elements, $type = null ) {
713
-		$collection = new static( null !== $type ? $type : $this->get_type() );
714
-		$collection->set_from_trusted( $elements );
715
-
716
-		return $collection;
717
-	}
718
-
719
-	/**
720
-	 * Sets the elements without validating them.
721
-	 *
722
-	 * @param array $elements Pre-validated elements to set.
723
-	 */
724
-	protected function set_from_trusted( array $elements ) {
725
-		$this->elements = $elements;
726
-	}
727
-
728
-	/**
729
-	 * Number of elements true for the condition.
730
-	 *
731
-	 * @param callable $condition Condition to check.
732
-	 * @return int
733
-	 */
734
-	protected function count_while_true( callable $condition ) {
735
-		$count = 0;
736
-
737
-		foreach ( $this->elements as $element ) {
738
-			if ( ! $condition($element) ) {
739
-				break;
740
-			}
741
-			$count++;
742
-		}
743
-
744
-		return $count;
745
-	}
746
-
747
-	/**
748
-	 * Validates a number to be used as an index.
749
-	 *
750
-	 * @param  integer $index The number to be validated as an index.
751
-	 *
752
-	 * @throws OutOfRangeException
753
-	 */
754
-	protected function validate_index( $index ) {
755
-		$exists = $this->index_exists( $index );
756
-
757
-		if ( ! $exists ) {
758
-			throw new OutOfRangeException( 'Index out of bounds of collection' );
759
-		}
760
-	}
18
+    /**
19
+     * Collection elements.
20
+     *
21
+     * @var array
22
+     */
23
+    protected $elements = array();
24
+
25
+    /**
26
+     * Collection type to enforce.
27
+     *
28
+     * @var Type
29
+     */
30
+    private $type;
31
+
32
+    /**
33
+     * Where Collection is in loop.
34
+     *
35
+     * @var int
36
+     */
37
+    protected $position = 0;
38
+
39
+    /**
40
+     * Collection constructor.
41
+     *
42
+     * @param string $type
43
+     * @param array  $elements
44
+     */
45
+    public function __construct( $type, array $elements = array() ) {
46
+        $this->type = new Type( $type );
47
+
48
+        if ( $this->type->is_model() ) {
49
+            foreach ( $elements as $idx => $element ) {
50
+                if ( is_array( $element ) ) {
51
+                    $elements[ $idx ] = $this->type->create_model( $element );
52
+                }
53
+            }
54
+        }
55
+
56
+        if ( $elements ) {
57
+            $this->type->validate_elements( $elements );
58
+        }
59
+
60
+        $this->elements = $elements;
61
+    }
62
+
63
+    /**
64
+     * {@inheritdoc}
65
+     *
66
+     * @return string
67
+     */
68
+    public function get_type() {
69
+        return $this->type->get_type();
70
+    }
71
+
72
+    /**
73
+     * {@inheritdoc}
74
+     *
75
+     * @param mixed $element
76
+     *
77
+     * @return Collection
78
+     *
79
+     * @throws InvalidArgumentException
80
+     */
81
+    public function add( $element ) {
82
+        if ( $this->type->is_model() && is_array( $element ) ) {
83
+            $element = $this->type->create_model( $element );
84
+        }
85
+
86
+        $this->type->validate_element( $element );
87
+
88
+        $elements   = $this->elements;
89
+        $elements[] = $element;
90
+
91
+        $collection = new static( $this->get_type() );
92
+        $collection->set_from_trusted( $elements );
93
+
94
+        return $collection;
95
+    }
96
+
97
+    /**
98
+     * {@inheritdoc}
99
+     *
100
+     * @return Collection
101
+     */
102
+    public function clear() {
103
+        return new static( $this->get_type() );
104
+    }
105
+
106
+    /**
107
+     * {@inheritdoc}
108
+     *
109
+     * @param  callable $condition Condition to satisfy.
110
+     *
111
+     * @return bool
112
+     */
113
+    public function contains( callable $condition ) {
114
+        return (bool) $this->find( $condition );
115
+    }
116
+
117
+    /**
118
+     * {@inheritdoc}
119
+     *
120
+     * @param  callable $condition Condition to satisfy.
121
+     *
122
+     * @return mixed
123
+     */
124
+    public function find( callable $condition ) {
125
+        $index = $this->find_index( $condition );
126
+
127
+        return -1 === $index ? false : $this->elements[ $index ];
128
+    }
129
+
130
+    /**
131
+     * {@inheritdoc}
132
+     *
133
+     * @param  callable $condition Condition to satisfy.
134
+     *
135
+     * @return int
136
+     */
137
+    public function find_index( callable $condition ) {
138
+        $index = -1;
139
+
140
+        for ( $i = 0, $count = count( $this->elements ); $i < $count; $i++ ) {
141
+            if ( call_user_func( $condition, ($this->at( $i ) ) ) ) {
142
+                $index = $i;
143
+                break;
144
+            }
145
+        }
146
+
147
+        return $index;
148
+    }
149
+
150
+    /**
151
+     * Fetches the element at the provided index.
152
+     *
153
+     * @param int $index Index to get element from.
154
+     *
155
+     * @return mixed
156
+     *
157
+     * @throws OutOfRangeException
158
+     */
159
+    public function at( $index ) {
160
+        $this->validate_index( $index );
161
+
162
+        return $this->elements[ $index ];
163
+    }
164
+
165
+    /**
166
+     * {@inheritdoc}
167
+     *
168
+     * @param  int $index Index to check for existence.
169
+     *
170
+     * @return bool
171
+     *
172
+     * @throws InvalidArgumentException
173
+     */
174
+    public function index_exists( $index ) {
175
+        if ( ! is_int( $index ) ) {
176
+            throw new InvalidArgumentException( 'Index must be an integer' );
177
+        }
178
+
179
+        if ( $index < 0 ) {
180
+            throw new InvalidArgumentException( 'Index must be a non-negative integer' );
181
+        }
182
+
183
+        return $index < $this->count();
184
+    }
185
+
186
+    /**
187
+     * {@inheritdoc}
188
+     *
189
+     * @param  callable $condition Condition to satisfy.
190
+     *
191
+     * @return mixed
192
+     */
193
+    public function filter( callable $condition ) {
194
+        $elements = array();
195
+
196
+        foreach ( $this->elements as $element ) {
197
+            if ( call_user_func( $condition, $element ) ) {
198
+                $elements[] = $element;
199
+            }
200
+        }
201
+
202
+        return $this->new_from_trusted( $elements );
203
+    }
204
+    /**
205
+     * {@inheritdoc}
206
+     *
207
+     * @param  callable $condition Condition to satisfy.
208
+     *
209
+     * @return mixed
210
+     */
211
+    public function find_last( callable $condition ) {
212
+        $index = $this->find_last_index( $condition );
213
+
214
+        return -1 === $index ? null : $this->elements[ $index ];
215
+    }
216
+
217
+    /**
218
+     * {@inheritdoc}
219
+     *
220
+     * @param  callable $condition
221
+     * @return int
222
+     */
223
+    public function find_last_index( callable $condition ) {
224
+        $index = -1;
225
+
226
+        for ( $i = count( $this->elements ) - 1; $i >= 0; $i-- ) {
227
+            if ( call_user_func( $condition, $this->elements[ $i ] ) ) {
228
+                $index = $i;
229
+                break;
230
+            }
231
+        }
232
+
233
+        return $index;
234
+    }
235
+
236
+    /**
237
+     * {@inheritdoc}
238
+     *
239
+     * @param  int $start Begining index to slice from.
240
+     * @param  int $end   End index to slice to.
241
+     *
242
+     * @return Collection
243
+     *
244
+     * @throws InvalidArgumentException
245
+     */
246
+    public function slice( $start, $end ) {
247
+        if ( $start < 0 || ! is_int( $start ) ) {
248
+            throw new InvalidArgumentException( 'Start must be a non-negative integer' );
249
+        }
250
+
251
+        if ( $end < 0 || ! is_int( $end ) ) {
252
+            throw new InvalidArgumentException( 'End must be a positive integer' );
253
+        }
254
+
255
+        if ( $start > $end ) {
256
+            throw new InvalidArgumentException( 'End must be greater than start' );
257
+        }
258
+
259
+        if ( $end > $this->count() + 1 ) {
260
+            throw new InvalidArgumentException( 'End must be less than the count of the items in the Collection' );
261
+        }
262
+
263
+        $length = $end - $start + 1;
264
+        $subset = array_slice( $this->elements, $start, $length );
265
+
266
+        $collection = new static($this->type);
267
+        $collection->set_from_trusted( $subset );
268
+
269
+        return $collection;
270
+    }
271
+
272
+    /**
273
+     * {@inheritdoc}
274
+     *
275
+     * @param int   $index     Index to start at.
276
+     * @param mixed $element Element to insert.
277
+     *
278
+     * @return Collection
279
+     *
280
+     * @throws InvalidArgumentException
281
+     * @throws OutOfRangeException
282
+     */
283
+    public function insert( $index, $element ) {
284
+        $this->validate_index( $index );
285
+        $this->type->validate_element( $element );
286
+
287
+        $a = array_slice( $this->elements, 0, $index );
288
+        $b = array_slice( $this->elements, $index, count( $this->elements ) );
289
+
290
+        $a[] = $element;
291
+
292
+        return $this->new_from_trusted( array_merge( $a, $b ) );
293
+    }
294
+
295
+    /**
296
+     * {@inheritdoc}
297
+     *
298
+     * @param int   $index    Index to start insertion at.
299
+     * @param array $elements Elements in insert.
300
+     *
301
+     * @return Collection
302
+     *
303
+     * @throws OutOfRangeException
304
+     */
305
+    public function insert_range( $index, array $elements ) {
306
+        $this->validate_index( $index );
307
+        $this->type->validate_elements( $elements );
308
+
309
+        // To work with negative index, get the positive relation to 0 index
310
+        $index < 0 && $index = $this->count() + $index + 1;
311
+
312
+        $partA = array_slice( $this->elements, 0, $index );
313
+        $partB = array_slice( $this->elements, $index, count( $this->elements ) );
314
+
315
+        $elements1 = array_merge( $partA, $elements );
316
+        $elements1 = array_merge( $elements1, $partB );
317
+
318
+        $col = new static( $this->type );
319
+        $col->set_from_trusted( $elements1 );
320
+
321
+        return $col;
322
+    }
323
+
324
+    /**
325
+     * {@inheritdoc}
326
+     *
327
+     * @param  callable $condition Condition to satisfy.
328
+     *
329
+     * @return Collection
330
+     */
331
+    public function without( callable $condition ) {
332
+        $inverse = function ( $element ) use ( $condition ) {
333
+            return ! call_user_func( $condition, $element );
334
+        };
335
+
336
+        return $this->filter( $inverse );
337
+    }
338
+
339
+    /**
340
+     * {@inheritdoc}
341
+     *
342
+     * @param  int $index Index to remove.
343
+     *
344
+     * @return Collection
345
+     *
346
+     * @throws OutOfRangeException
347
+     */
348
+    public function remove_at( $index ) {
349
+        $this->validate_index( $index );
350
+
351
+        $elements = $this->elements;
352
+
353
+        return $this->new_from_trusted(
354
+            array_merge(
355
+                array_slice( $elements, 0, $index ),
356
+                array_slice( $elements, $index + 1, count( $elements ) )
357
+            )
358
+        );
359
+    }
360
+    /**
361
+     * {@inheritdoc}
362
+     *
363
+     * @return Collection
364
+     */
365
+    public function reverse() {
366
+        return $this->new_from_trusted(
367
+            array_reverse( $this->elements )
368
+        );
369
+    }
370
+
371
+    /**
372
+     * {@inheritdoc}
373
+     *
374
+     * @param callable $callback Sort callback.
375
+     *
376
+     * @return Collection
377
+     */
378
+    public function sort( callable $callback ) {
379
+        $elements = $this->elements;
380
+        usort( $elements, $callback );
381
+        return $this->new_from_trusted( $elements );
382
+    }
383
+
384
+    /**
385
+     * {@inheritdoc}
386
+     *
387
+     * @return array
388
+     */
389
+    public function to_array() {
390
+        return $this->elements;
391
+    }
392
+
393
+    /**
394
+     * {@inheritdoc}
395
+     *
396
+     * @param callable $callable Reducer function.
397
+     *
398
+     * @param null     $initial  Initial reducer value.
399
+     *
400
+     * @return mixed
401
+     */
402
+    public function reduce( callable $callable, $initial = null ) {
403
+        return array_reduce( $this->elements, $callable, $initial );
404
+    }
405
+
406
+    /**
407
+     * {@inheritdoc}
408
+     *
409
+     * @param callable $condition Condition callback.
410
+     *
411
+     * @return bool
412
+     */
413
+    public function every( callable $condition ) {
414
+        $response = true;
415
+
416
+        foreach ( $this->elements as $element ) {
417
+            $result = call_user_func( $condition, $element );
418
+
419
+            if ( false === $result ) {
420
+                $response = false;
421
+                break;
422
+            }
423
+        }
424
+
425
+        return $response;
426
+    }
427
+
428
+    /**
429
+     * {@inheritdoc}
430
+     *
431
+     * @param  int $num Number of elements to drop.
432
+     *
433
+     * @return Collection
434
+     *
435
+     * @throws InvalidArgumentException
436
+     */
437
+    public function drop( $num ) {
438
+        return $this->slice( $num, $this->count() );
439
+    }
440
+
441
+    /**
442
+     * {@inheritdoc}
443
+     *
444
+     * @param int $num Number of elements to drop.
445
+     *
446
+     * @return Collection
447
+     *
448
+     * @throws InvalidArgumentException
449
+     */
450
+    public function drop_right( $num ) {
451
+        return $num !== $this->count()
452
+            ? $this->slice( 0, $this->count() - $num - 1 )
453
+            : $this->clear();
454
+    }
455
+
456
+    /**
457
+     * {@inheritdoc}
458
+     *
459
+     * @param callable $condition Condition callback.
460
+     *
461
+     * @return Collection
462
+     */
463
+    public function drop_while( callable $condition ) {
464
+        $count = $this->count_while_true( $condition );
465
+        return $count ? $this->drop( $count ) : $this;
466
+    }
467
+    /**
468
+     * {@inheritdoc}
469
+     *
470
+     * @return Collection
471
+     *
472
+     * @throws InvalidArgumentException
473
+     */
474
+    public function tail() {
475
+        return $this->slice( 1, $this->count() );
476
+    }
477
+
478
+    /**
479
+     * {@inheritdoc}
480
+     *
481
+     * @param  int $num Number of elements to take.
482
+     *
483
+     * @return Collection
484
+     *
485
+     * @throws InvalidArgumentException
486
+     */
487
+    public function take( $num ) {
488
+        return $this->slice( 0, $num - 1 );
489
+    }
490
+
491
+    /**
492
+     * {@inheritdoc}
493
+     *
494
+     * @param int $num Number of elements to take.
495
+     *
496
+     * @return Collection
497
+     *
498
+     * @throws InvalidArgumentException
499
+     */
500
+    public function take_right( $num ) {
501
+        return $this->slice( $this->count() - $num, $this->count() );
502
+    }
503
+
504
+    /**
505
+     * {@inheritdoc}
506
+     *
507
+     * @param callable $condition Callback function.
508
+     *
509
+     * @return Collection
510
+     */
511
+    public function take_while( callable $condition ) {
512
+        $count = $this->count_while_true( $condition );
513
+
514
+        return $count ? $this->take( $count ) : $this->clear();
515
+    }
516
+
517
+    /**
518
+     * {@inheritdoc}
519
+     *
520
+     * @param callable $callable Callback function.
521
+     */
522
+    public function each( callable $callable ) {
523
+        foreach ( $this->elements as $element ) {
524
+            call_user_func( $callable, $element );
525
+        }
526
+    }
527
+
528
+    /**
529
+     * {@inheritdoc}
530
+     *
531
+     * @param callable $callable Callback function.
532
+     *
533
+     * @return Collection
534
+     */
535
+    public function map( callable $callable ) {
536
+        $elements = array();
537
+        $type = null;
538
+        foreach ( $this->elements as $element ) {
539
+            $result = call_user_func( $callable, $element );
540
+
541
+            if ( null === $type ) {
542
+                $type = gettype( $result );
543
+
544
+                if ( 'object' === $type ) {
545
+                    $type = get_class( $result );
546
+                }
547
+            }
548
+
549
+            $elements[] = $result;
550
+        }
551
+
552
+        return $this->new_from_trusted( $elements, $type ? : $this->get_type() );
553
+    }
554
+
555
+    /**
556
+     * {@inheritdoc}
557
+     *
558
+     * @param callable $callable Reducer function.
559
+     * @param null     $initial  Initial value.
560
+     *
561
+     * @return mixed
562
+     */
563
+    public function reduce_right( callable $callable, $initial = null ) {
564
+        return array_reduce(
565
+            array_reverse( $this->elements ),
566
+            $callable,
567
+            $initial
568
+        );
569
+    }
570
+
571
+    /**
572
+     * {@inheritdoc}
573
+     *
574
+     * @return Collection
575
+     */
576
+    public function shuffle() {
577
+        $elements = $this->elements;
578
+        shuffle( $elements );
579
+
580
+        return $this->new_from_trusted( $elements );
581
+    }
582
+
583
+    /**
584
+     * {@inheritdoc}
585
+     *
586
+     * @param array|Collection $elements Array of elements to merge.
587
+     *
588
+     * @return Collection
589
+     *
590
+     * @throws InvalidArgumentException
591
+     */
592
+    public function merge( $elements ) {
593
+        if ( $elements instanceof static ) {
594
+            $elements = $elements->to_array();
595
+        }
596
+
597
+        if ( ! is_array( $elements ) ) {
598
+            throw new InvalidArgumentException( 'Merge must be given array or Collection' );
599
+        }
600
+
601
+        $this->type->validate_elements( $elements );
602
+
603
+        return $this->new_from_trusted(
604
+            array_merge( $this->elements, $elements )
605
+        );
606
+    }
607
+
608
+    /**
609
+     * {@inheritdoc}
610
+     *
611
+     * @return mixed
612
+     *
613
+     * @throws OutOfBoundsException
614
+     */
615
+    public function first() {
616
+        if ( empty( $this->elements ) ) {
617
+            throw new OutOfBoundsException( 'Cannot get first element of empty Collection' );
618
+        }
619
+
620
+        return reset( $this->elements );
621
+    }
622
+
623
+    /**
624
+     * {@inheritdoc}
625
+     *
626
+     * @return mixed
627
+     *
628
+     * @throws OutOfBoundsException
629
+     */
630
+    public function last() {
631
+        if ( empty( $this->elements ) ) {
632
+            throw new OutOfBoundsException( 'Cannot get last element of empty Collection' );
633
+        }
634
+
635
+        return end( $this->elements );
636
+    }
637
+
638
+    /**
639
+     * {@inheritdoc}
640
+     *
641
+     * @return int
642
+     */
643
+    public function count() {
644
+        return count( $this->elements );
645
+    }
646
+
647
+    /**
648
+     * {@inheritDoc}
649
+     *
650
+     * @return array
651
+     */
652
+    public function serialize() {
653
+        return $this->map(function( $element ) {
654
+            if ( $element instanceof Serializes ) {
655
+                return $element->serialize();
656
+            }
657
+
658
+            return $element;
659
+        } )->to_array();
660
+    }
661
+
662
+    /**
663
+     * Return the current element.
664
+     *
665
+     * @return mixed
666
+     */
667
+    public function current() {
668
+        return $this->at( $this->position );
669
+    }
670
+
671
+    /**
672
+     * Move forward to next element.
673
+     */
674
+    public function next() {
675
+        $this->position ++;
676
+    }
677
+
678
+    /**
679
+     * Return the key of the current element.
680
+     *
681
+     * @return mixed
682
+     */
683
+    public function key() {
684
+        return $this->position;
685
+    }
686
+
687
+    /**
688
+     * Checks if current position is valid.
689
+     *
690
+     * @return bool
691
+     */
692
+    public function valid() {
693
+        return isset( $this->elements[ $this->position ] );
694
+    }
695
+
696
+    /**
697
+     * Rewind the Iterator to the first element.
698
+     */
699
+    public function rewind() {
700
+        $this->position = 0;
701
+    }
702
+
703
+    /**
704
+     * Creates a new instance of the Collection
705
+     * from a trusted set of elements.
706
+     *
707
+     * @param array      $elements Array of elements to pass into new collection.
708
+     * @param null|mixed $type
709
+     *
710
+     * @return static
711
+     */
712
+    protected function new_from_trusted( array $elements, $type = null ) {
713
+        $collection = new static( null !== $type ? $type : $this->get_type() );
714
+        $collection->set_from_trusted( $elements );
715
+
716
+        return $collection;
717
+    }
718
+
719
+    /**
720
+     * Sets the elements without validating them.
721
+     *
722
+     * @param array $elements Pre-validated elements to set.
723
+     */
724
+    protected function set_from_trusted( array $elements ) {
725
+        $this->elements = $elements;
726
+    }
727
+
728
+    /**
729
+     * Number of elements true for the condition.
730
+     *
731
+     * @param callable $condition Condition to check.
732
+     * @return int
733
+     */
734
+    protected function count_while_true( callable $condition ) {
735
+        $count = 0;
736
+
737
+        foreach ( $this->elements as $element ) {
738
+            if ( ! $condition($element) ) {
739
+                break;
740
+            }
741
+            $count++;
742
+        }
743
+
744
+        return $count;
745
+    }
746
+
747
+    /**
748
+     * Validates a number to be used as an index.
749
+     *
750
+     * @param  integer $index The number to be validated as an index.
751
+     *
752
+     * @throws OutOfRangeException
753
+     */
754
+    protected function validate_index( $index ) {
755
+        $exists = $this->index_exists( $index );
756
+
757
+        if ( ! $exists ) {
758
+            throw new OutOfRangeException( 'Index out of bounds of collection' );
759
+        }
760
+    }
761 761
 }
Please login to merge, or discard this patch.
Spacing   +144 added lines, -144 removed lines patch added patch discarded remove patch
@@ -42,19 +42,19 @@  discard block
 block discarded – undo
42 42
 	 * @param string $type
43 43
 	 * @param array  $elements
44 44
 	 */
45
-	public function __construct( $type, array $elements = array() ) {
46
-		$this->type = new Type( $type );
45
+	public function __construct($type, array $elements = array()) {
46
+		$this->type = new Type($type);
47 47
 
48
-		if ( $this->type->is_model() ) {
49
-			foreach ( $elements as $idx => $element ) {
50
-				if ( is_array( $element ) ) {
51
-					$elements[ $idx ] = $this->type->create_model( $element );
48
+		if ($this->type->is_model()) {
49
+			foreach ($elements as $idx => $element) {
50
+				if (is_array($element)) {
51
+					$elements[$idx] = $this->type->create_model($element);
52 52
 				}
53 53
 			}
54 54
 		}
55 55
 
56
-		if ( $elements ) {
57
-			$this->type->validate_elements( $elements );
56
+		if ($elements) {
57
+			$this->type->validate_elements($elements);
58 58
 		}
59 59
 
60 60
 		$this->elements = $elements;
@@ -78,18 +78,18 @@  discard block
 block discarded – undo
78 78
 	 *
79 79
 	 * @throws InvalidArgumentException
80 80
 	 */
81
-	public function add( $element ) {
82
-		if ( $this->type->is_model() && is_array( $element ) ) {
83
-			$element = $this->type->create_model( $element );
81
+	public function add($element) {
82
+		if ($this->type->is_model() && is_array($element)) {
83
+			$element = $this->type->create_model($element);
84 84
 		}
85 85
 
86
-		$this->type->validate_element( $element );
86
+		$this->type->validate_element($element);
87 87
 
88 88
 		$elements   = $this->elements;
89 89
 		$elements[] = $element;
90 90
 
91
-		$collection = new static( $this->get_type() );
92
-		$collection->set_from_trusted( $elements );
91
+		$collection = new static($this->get_type());
92
+		$collection->set_from_trusted($elements);
93 93
 
94 94
 		return $collection;
95 95
 	}
@@ -100,7 +100,7 @@  discard block
 block discarded – undo
100 100
 	 * @return Collection
101 101
 	 */
102 102
 	public function clear() {
103
-		return new static( $this->get_type() );
103
+		return new static($this->get_type());
104 104
 	}
105 105
 
106 106
 	/**
@@ -110,8 +110,8 @@  discard block
 block discarded – undo
110 110
 	 *
111 111
 	 * @return bool
112 112
 	 */
113
-	public function contains( callable $condition ) {
114
-		return (bool) $this->find( $condition );
113
+	public function contains(callable $condition) {
114
+		return (bool) $this->find($condition);
115 115
 	}
116 116
 
117 117
 	/**
@@ -121,10 +121,10 @@  discard block
 block discarded – undo
121 121
 	 *
122 122
 	 * @return mixed
123 123
 	 */
124
-	public function find( callable $condition ) {
125
-		$index = $this->find_index( $condition );
124
+	public function find(callable $condition) {
125
+		$index = $this->find_index($condition);
126 126
 
127
-		return -1 === $index ? false : $this->elements[ $index ];
127
+		return -1 === $index ? false : $this->elements[$index];
128 128
 	}
129 129
 
130 130
 	/**
@@ -134,11 +134,11 @@  discard block
 block discarded – undo
134 134
 	 *
135 135
 	 * @return int
136 136
 	 */
137
-	public function find_index( callable $condition ) {
137
+	public function find_index(callable $condition) {
138 138
 		$index = -1;
139 139
 
140
-		for ( $i = 0, $count = count( $this->elements ); $i < $count; $i++ ) {
141
-			if ( call_user_func( $condition, ($this->at( $i ) ) ) ) {
140
+		for ($i = 0, $count = count($this->elements); $i < $count; $i++) {
141
+			if (call_user_func($condition, ($this->at($i)))) {
142 142
 				$index = $i;
143 143
 				break;
144 144
 			}
@@ -156,10 +156,10 @@  discard block
 block discarded – undo
156 156
 	 *
157 157
 	 * @throws OutOfRangeException
158 158
 	 */
159
-	public function at( $index ) {
160
-		$this->validate_index( $index );
159
+	public function at($index) {
160
+		$this->validate_index($index);
161 161
 
162
-		return $this->elements[ $index ];
162
+		return $this->elements[$index];
163 163
 	}
164 164
 
165 165
 	/**
@@ -171,13 +171,13 @@  discard block
 block discarded – undo
171 171
 	 *
172 172
 	 * @throws InvalidArgumentException
173 173
 	 */
174
-	public function index_exists( $index ) {
175
-		if ( ! is_int( $index ) ) {
176
-			throw new InvalidArgumentException( 'Index must be an integer' );
174
+	public function index_exists($index) {
175
+		if (!is_int($index)) {
176
+			throw new InvalidArgumentException('Index must be an integer');
177 177
 		}
178 178
 
179
-		if ( $index < 0 ) {
180
-			throw new InvalidArgumentException( 'Index must be a non-negative integer' );
179
+		if ($index < 0) {
180
+			throw new InvalidArgumentException('Index must be a non-negative integer');
181 181
 		}
182 182
 
183 183
 		return $index < $this->count();
@@ -190,16 +190,16 @@  discard block
 block discarded – undo
190 190
 	 *
191 191
 	 * @return mixed
192 192
 	 */
193
-	public function filter( callable $condition ) {
193
+	public function filter(callable $condition) {
194 194
 		$elements = array();
195 195
 
196
-		foreach ( $this->elements as $element ) {
197
-			if ( call_user_func( $condition, $element ) ) {
196
+		foreach ($this->elements as $element) {
197
+			if (call_user_func($condition, $element)) {
198 198
 				$elements[] = $element;
199 199
 			}
200 200
 		}
201 201
 
202
-		return $this->new_from_trusted( $elements );
202
+		return $this->new_from_trusted($elements);
203 203
 	}
204 204
 	/**
205 205
 	 * {@inheritdoc}
@@ -208,10 +208,10 @@  discard block
 block discarded – undo
208 208
 	 *
209 209
 	 * @return mixed
210 210
 	 */
211
-	public function find_last( callable $condition ) {
212
-		$index = $this->find_last_index( $condition );
211
+	public function find_last(callable $condition) {
212
+		$index = $this->find_last_index($condition);
213 213
 
214
-		return -1 === $index ? null : $this->elements[ $index ];
214
+		return -1 === $index ? null : $this->elements[$index];
215 215
 	}
216 216
 
217 217
 	/**
@@ -220,11 +220,11 @@  discard block
 block discarded – undo
220 220
 	 * @param  callable $condition
221 221
 	 * @return int
222 222
 	 */
223
-	public function find_last_index( callable $condition ) {
223
+	public function find_last_index(callable $condition) {
224 224
 		$index = -1;
225 225
 
226
-		for ( $i = count( $this->elements ) - 1; $i >= 0; $i-- ) {
227
-			if ( call_user_func( $condition, $this->elements[ $i ] ) ) {
226
+		for ($i = count($this->elements) - 1; $i >= 0; $i--) {
227
+			if (call_user_func($condition, $this->elements[$i])) {
228 228
 				$index = $i;
229 229
 				break;
230 230
 			}
@@ -243,28 +243,28 @@  discard block
 block discarded – undo
243 243
 	 *
244 244
 	 * @throws InvalidArgumentException
245 245
 	 */
246
-	public function slice( $start, $end ) {
247
-		if ( $start < 0 || ! is_int( $start ) ) {
248
-			throw new InvalidArgumentException( 'Start must be a non-negative integer' );
246
+	public function slice($start, $end) {
247
+		if ($start < 0 || !is_int($start)) {
248
+			throw new InvalidArgumentException('Start must be a non-negative integer');
249 249
 		}
250 250
 
251
-		if ( $end < 0 || ! is_int( $end ) ) {
252
-			throw new InvalidArgumentException( 'End must be a positive integer' );
251
+		if ($end < 0 || !is_int($end)) {
252
+			throw new InvalidArgumentException('End must be a positive integer');
253 253
 		}
254 254
 
255
-		if ( $start > $end ) {
256
-			throw new InvalidArgumentException( 'End must be greater than start' );
255
+		if ($start > $end) {
256
+			throw new InvalidArgumentException('End must be greater than start');
257 257
 		}
258 258
 
259
-		if ( $end > $this->count() + 1 ) {
260
-			throw new InvalidArgumentException( 'End must be less than the count of the items in the Collection' );
259
+		if ($end > $this->count() + 1) {
260
+			throw new InvalidArgumentException('End must be less than the count of the items in the Collection');
261 261
 		}
262 262
 
263 263
 		$length = $end - $start + 1;
264
-		$subset = array_slice( $this->elements, $start, $length );
264
+		$subset = array_slice($this->elements, $start, $length);
265 265
 
266 266
 		$collection = new static($this->type);
267
-		$collection->set_from_trusted( $subset );
267
+		$collection->set_from_trusted($subset);
268 268
 
269 269
 		return $collection;
270 270
 	}
@@ -280,16 +280,16 @@  discard block
 block discarded – undo
280 280
 	 * @throws InvalidArgumentException
281 281
 	 * @throws OutOfRangeException
282 282
 	 */
283
-	public function insert( $index, $element ) {
284
-		$this->validate_index( $index );
285
-		$this->type->validate_element( $element );
283
+	public function insert($index, $element) {
284
+		$this->validate_index($index);
285
+		$this->type->validate_element($element);
286 286
 
287
-		$a = array_slice( $this->elements, 0, $index );
288
-		$b = array_slice( $this->elements, $index, count( $this->elements ) );
287
+		$a = array_slice($this->elements, 0, $index);
288
+		$b = array_slice($this->elements, $index, count($this->elements));
289 289
 
290 290
 		$a[] = $element;
291 291
 
292
-		return $this->new_from_trusted( array_merge( $a, $b ) );
292
+		return $this->new_from_trusted(array_merge($a, $b));
293 293
 	}
294 294
 
295 295
 	/**
@@ -302,21 +302,21 @@  discard block
 block discarded – undo
302 302
 	 *
303 303
 	 * @throws OutOfRangeException
304 304
 	 */
305
-	public function insert_range( $index, array $elements ) {
306
-		$this->validate_index( $index );
307
-		$this->type->validate_elements( $elements );
305
+	public function insert_range($index, array $elements) {
306
+		$this->validate_index($index);
307
+		$this->type->validate_elements($elements);
308 308
 
309 309
 		// To work with negative index, get the positive relation to 0 index
310 310
 		$index < 0 && $index = $this->count() + $index + 1;
311 311
 
312
-		$partA = array_slice( $this->elements, 0, $index );
313
-		$partB = array_slice( $this->elements, $index, count( $this->elements ) );
312
+		$partA = array_slice($this->elements, 0, $index);
313
+		$partB = array_slice($this->elements, $index, count($this->elements));
314 314
 
315
-		$elements1 = array_merge( $partA, $elements );
316
-		$elements1 = array_merge( $elements1, $partB );
315
+		$elements1 = array_merge($partA, $elements);
316
+		$elements1 = array_merge($elements1, $partB);
317 317
 
318
-		$col = new static( $this->type );
319
-		$col->set_from_trusted( $elements1 );
318
+		$col = new static($this->type);
319
+		$col->set_from_trusted($elements1);
320 320
 
321 321
 		return $col;
322 322
 	}
@@ -328,12 +328,12 @@  discard block
 block discarded – undo
328 328
 	 *
329 329
 	 * @return Collection
330 330
 	 */
331
-	public function without( callable $condition ) {
332
-		$inverse = function ( $element ) use ( $condition ) {
333
-			return ! call_user_func( $condition, $element );
331
+	public function without(callable $condition) {
332
+		$inverse = function($element) use ($condition) {
333
+			return !call_user_func($condition, $element);
334 334
 		};
335 335
 
336
-		return $this->filter( $inverse );
336
+		return $this->filter($inverse);
337 337
 	}
338 338
 
339 339
 	/**
@@ -345,15 +345,15 @@  discard block
 block discarded – undo
345 345
 	 *
346 346
 	 * @throws OutOfRangeException
347 347
 	 */
348
-	public function remove_at( $index ) {
349
-		$this->validate_index( $index );
348
+	public function remove_at($index) {
349
+		$this->validate_index($index);
350 350
 
351 351
 		$elements = $this->elements;
352 352
 
353 353
 		return $this->new_from_trusted(
354 354
 			array_merge(
355
-				array_slice( $elements, 0, $index ),
356
-				array_slice( $elements, $index + 1, count( $elements ) )
355
+				array_slice($elements, 0, $index),
356
+				array_slice($elements, $index + 1, count($elements))
357 357
 			)
358 358
 		);
359 359
 	}
@@ -364,7 +364,7 @@  discard block
 block discarded – undo
364 364
 	 */
365 365
 	public function reverse() {
366 366
 		return $this->new_from_trusted(
367
-			array_reverse( $this->elements )
367
+			array_reverse($this->elements)
368 368
 		);
369 369
 	}
370 370
 
@@ -375,10 +375,10 @@  discard block
 block discarded – undo
375 375
 	 *
376 376
 	 * @return Collection
377 377
 	 */
378
-	public function sort( callable $callback ) {
378
+	public function sort(callable $callback) {
379 379
 		$elements = $this->elements;
380
-		usort( $elements, $callback );
381
-		return $this->new_from_trusted( $elements );
380
+		usort($elements, $callback);
381
+		return $this->new_from_trusted($elements);
382 382
 	}
383 383
 
384 384
 	/**
@@ -399,8 +399,8 @@  discard block
 block discarded – undo
399 399
 	 *
400 400
 	 * @return mixed
401 401
 	 */
402
-	public function reduce( callable $callable, $initial = null ) {
403
-		return array_reduce( $this->elements, $callable, $initial );
402
+	public function reduce(callable $callable, $initial = null) {
403
+		return array_reduce($this->elements, $callable, $initial);
404 404
 	}
405 405
 
406 406
 	/**
@@ -410,13 +410,13 @@  discard block
 block discarded – undo
410 410
 	 *
411 411
 	 * @return bool
412 412
 	 */
413
-	public function every( callable $condition ) {
413
+	public function every(callable $condition) {
414 414
 		$response = true;
415 415
 
416
-		foreach ( $this->elements as $element ) {
417
-			$result = call_user_func( $condition, $element );
416
+		foreach ($this->elements as $element) {
417
+			$result = call_user_func($condition, $element);
418 418
 
419
-			if ( false === $result ) {
419
+			if (false === $result) {
420 420
 				$response = false;
421 421
 				break;
422 422
 			}
@@ -434,8 +434,8 @@  discard block
 block discarded – undo
434 434
 	 *
435 435
 	 * @throws InvalidArgumentException
436 436
 	 */
437
-	public function drop( $num ) {
438
-		return $this->slice( $num, $this->count() );
437
+	public function drop($num) {
438
+		return $this->slice($num, $this->count());
439 439
 	}
440 440
 
441 441
 	/**
@@ -447,9 +447,9 @@  discard block
 block discarded – undo
447 447
 	 *
448 448
 	 * @throws InvalidArgumentException
449 449
 	 */
450
-	public function drop_right( $num ) {
450
+	public function drop_right($num) {
451 451
 		return $num !== $this->count()
452
-			? $this->slice( 0, $this->count() - $num - 1 )
452
+			? $this->slice(0, $this->count() - $num - 1)
453 453
 			: $this->clear();
454 454
 	}
455 455
 
@@ -460,9 +460,9 @@  discard block
 block discarded – undo
460 460
 	 *
461 461
 	 * @return Collection
462 462
 	 */
463
-	public function drop_while( callable $condition ) {
464
-		$count = $this->count_while_true( $condition );
465
-		return $count ? $this->drop( $count ) : $this;
463
+	public function drop_while(callable $condition) {
464
+		$count = $this->count_while_true($condition);
465
+		return $count ? $this->drop($count) : $this;
466 466
 	}
467 467
 	/**
468 468
 	 * {@inheritdoc}
@@ -472,7 +472,7 @@  discard block
 block discarded – undo
472 472
 	 * @throws InvalidArgumentException
473 473
 	 */
474 474
 	public function tail() {
475
-		return $this->slice( 1, $this->count() );
475
+		return $this->slice(1, $this->count());
476 476
 	}
477 477
 
478 478
 	/**
@@ -484,8 +484,8 @@  discard block
 block discarded – undo
484 484
 	 *
485 485
 	 * @throws InvalidArgumentException
486 486
 	 */
487
-	public function take( $num ) {
488
-		return $this->slice( 0, $num - 1 );
487
+	public function take($num) {
488
+		return $this->slice(0, $num - 1);
489 489
 	}
490 490
 
491 491
 	/**
@@ -497,8 +497,8 @@  discard block
 block discarded – undo
497 497
 	 *
498 498
 	 * @throws InvalidArgumentException
499 499
 	 */
500
-	public function take_right( $num ) {
501
-		return $this->slice( $this->count() - $num, $this->count() );
500
+	public function take_right($num) {
501
+		return $this->slice($this->count() - $num, $this->count());
502 502
 	}
503 503
 
504 504
 	/**
@@ -508,10 +508,10 @@  discard block
 block discarded – undo
508 508
 	 *
509 509
 	 * @return Collection
510 510
 	 */
511
-	public function take_while( callable $condition ) {
512
-		$count = $this->count_while_true( $condition );
511
+	public function take_while(callable $condition) {
512
+		$count = $this->count_while_true($condition);
513 513
 
514
-		return $count ? $this->take( $count ) : $this->clear();
514
+		return $count ? $this->take($count) : $this->clear();
515 515
 	}
516 516
 
517 517
 	/**
@@ -519,9 +519,9 @@  discard block
 block discarded – undo
519 519
 	 *
520 520
 	 * @param callable $callable Callback function.
521 521
 	 */
522
-	public function each( callable $callable ) {
523
-		foreach ( $this->elements as $element ) {
524
-			call_user_func( $callable, $element );
522
+	public function each(callable $callable) {
523
+		foreach ($this->elements as $element) {
524
+			call_user_func($callable, $element);
525 525
 		}
526 526
 	}
527 527
 
@@ -532,24 +532,24 @@  discard block
 block discarded – undo
532 532
 	 *
533 533
 	 * @return Collection
534 534
 	 */
535
-	public function map( callable $callable ) {
535
+	public function map(callable $callable) {
536 536
 		$elements = array();
537 537
 		$type = null;
538
-		foreach ( $this->elements as $element ) {
539
-			$result = call_user_func( $callable, $element );
538
+		foreach ($this->elements as $element) {
539
+			$result = call_user_func($callable, $element);
540 540
 
541
-			if ( null === $type ) {
542
-				$type = gettype( $result );
541
+			if (null === $type) {
542
+				$type = gettype($result);
543 543
 
544
-				if ( 'object' === $type ) {
545
-					$type = get_class( $result );
544
+				if ('object' === $type) {
545
+					$type = get_class($result);
546 546
 				}
547 547
 			}
548 548
 
549 549
 			$elements[] = $result;
550 550
 		}
551 551
 
552
-		return $this->new_from_trusted( $elements, $type ? : $this->get_type() );
552
+		return $this->new_from_trusted($elements, $type ?: $this->get_type());
553 553
 	}
554 554
 
555 555
 	/**
@@ -560,9 +560,9 @@  discard block
 block discarded – undo
560 560
 	 *
561 561
 	 * @return mixed
562 562
 	 */
563
-	public function reduce_right( callable $callable, $initial = null ) {
563
+	public function reduce_right(callable $callable, $initial = null) {
564 564
 		return array_reduce(
565
-			array_reverse( $this->elements ),
565
+			array_reverse($this->elements),
566 566
 			$callable,
567 567
 			$initial
568 568
 		);
@@ -575,9 +575,9 @@  discard block
 block discarded – undo
575 575
 	 */
576 576
 	public function shuffle() {
577 577
 		$elements = $this->elements;
578
-		shuffle( $elements );
578
+		shuffle($elements);
579 579
 
580
-		return $this->new_from_trusted( $elements );
580
+		return $this->new_from_trusted($elements);
581 581
 	}
582 582
 
583 583
 	/**
@@ -589,19 +589,19 @@  discard block
 block discarded – undo
589 589
 	 *
590 590
 	 * @throws InvalidArgumentException
591 591
 	 */
592
-	public function merge( $elements ) {
593
-		if ( $elements instanceof static ) {
592
+	public function merge($elements) {
593
+		if ($elements instanceof static) {
594 594
 			$elements = $elements->to_array();
595 595
 		}
596 596
 
597
-		if ( ! is_array( $elements ) ) {
598
-			throw new InvalidArgumentException( 'Merge must be given array or Collection' );
597
+		if (!is_array($elements)) {
598
+			throw new InvalidArgumentException('Merge must be given array or Collection');
599 599
 		}
600 600
 
601
-		$this->type->validate_elements( $elements );
601
+		$this->type->validate_elements($elements);
602 602
 
603 603
 		return $this->new_from_trusted(
604
-			array_merge( $this->elements, $elements )
604
+			array_merge($this->elements, $elements)
605 605
 		);
606 606
 	}
607 607
 
@@ -613,11 +613,11 @@  discard block
 block discarded – undo
613 613
 	 * @throws OutOfBoundsException
614 614
 	 */
615 615
 	public function first() {
616
-		if ( empty( $this->elements ) ) {
617
-			throw new OutOfBoundsException( 'Cannot get first element of empty Collection' );
616
+		if (empty($this->elements)) {
617
+			throw new OutOfBoundsException('Cannot get first element of empty Collection');
618 618
 		}
619 619
 
620
-		return reset( $this->elements );
620
+		return reset($this->elements);
621 621
 	}
622 622
 
623 623
 	/**
@@ -628,11 +628,11 @@  discard block
 block discarded – undo
628 628
 	 * @throws OutOfBoundsException
629 629
 	 */
630 630
 	public function last() {
631
-		if ( empty( $this->elements ) ) {
632
-			throw new OutOfBoundsException( 'Cannot get last element of empty Collection' );
631
+		if (empty($this->elements)) {
632
+			throw new OutOfBoundsException('Cannot get last element of empty Collection');
633 633
 		}
634 634
 
635
-		return end( $this->elements );
635
+		return end($this->elements);
636 636
 	}
637 637
 
638 638
 	/**
@@ -641,7 +641,7 @@  discard block
 block discarded – undo
641 641
 	 * @return int
642 642
 	 */
643 643
 	public function count() {
644
-		return count( $this->elements );
644
+		return count($this->elements);
645 645
 	}
646 646
 
647 647
 	/**
@@ -650,8 +650,8 @@  discard block
 block discarded – undo
650 650
 	 * @return array
651 651
 	 */
652 652
 	public function serialize() {
653
-		return $this->map(function( $element ) {
654
-			if ( $element instanceof Serializes ) {
653
+		return $this->map(function($element) {
654
+			if ($element instanceof Serializes) {
655 655
 				return $element->serialize();
656 656
 			}
657 657
 
@@ -665,14 +665,14 @@  discard block
 block discarded – undo
665 665
 	 * @return mixed
666 666
 	 */
667 667
 	public function current() {
668
-		return $this->at( $this->position );
668
+		return $this->at($this->position);
669 669
 	}
670 670
 
671 671
 	/**
672 672
 	 * Move forward to next element.
673 673
 	 */
674 674
 	public function next() {
675
-		$this->position ++;
675
+		$this->position++;
676 676
 	}
677 677
 
678 678
 	/**
@@ -690,7 +690,7 @@  discard block
 block discarded – undo
690 690
 	 * @return bool
691 691
 	 */
692 692
 	public function valid() {
693
-		return isset( $this->elements[ $this->position ] );
693
+		return isset($this->elements[$this->position]);
694 694
 	}
695 695
 
696 696
 	/**
@@ -709,9 +709,9 @@  discard block
 block discarded – undo
709 709
 	 *
710 710
 	 * @return static
711 711
 	 */
712
-	protected function new_from_trusted( array $elements, $type = null ) {
713
-		$collection = new static( null !== $type ? $type : $this->get_type() );
714
-		$collection->set_from_trusted( $elements );
712
+	protected function new_from_trusted(array $elements, $type = null) {
713
+		$collection = new static(null !== $type ? $type : $this->get_type());
714
+		$collection->set_from_trusted($elements);
715 715
 
716 716
 		return $collection;
717 717
 	}
@@ -721,7 +721,7 @@  discard block
 block discarded – undo
721 721
 	 *
722 722
 	 * @param array $elements Pre-validated elements to set.
723 723
 	 */
724
-	protected function set_from_trusted( array $elements ) {
724
+	protected function set_from_trusted(array $elements) {
725 725
 		$this->elements = $elements;
726 726
 	}
727 727
 
@@ -731,11 +731,11 @@  discard block
 block discarded – undo
731 731
 	 * @param callable $condition Condition to check.
732 732
 	 * @return int
733 733
 	 */
734
-	protected function count_while_true( callable $condition ) {
734
+	protected function count_while_true(callable $condition) {
735 735
 		$count = 0;
736 736
 
737
-		foreach ( $this->elements as $element ) {
738
-			if ( ! $condition($element) ) {
737
+		foreach ($this->elements as $element) {
738
+			if (!$condition($element)) {
739 739
 				break;
740 740
 			}
741 741
 			$count++;
@@ -751,11 +751,11 @@  discard block
 block discarded – undo
751 751
 	 *
752 752
 	 * @throws OutOfRangeException
753 753
 	 */
754
-	protected function validate_index( $index ) {
755
-		$exists = $this->index_exists( $index );
754
+	protected function validate_index($index) {
755
+		$exists = $this->index_exists($index);
756 756
 
757
-		if ( ! $exists ) {
758
-			throw new OutOfRangeException( 'Index out of bounds of collection' );
757
+		if (!$exists) {
758
+			throw new OutOfRangeException('Index out of bounds of collection');
759 759
 		}
760 760
 	}
761 761
 }
Please login to merge, or discard this patch.