GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.
Completed
Pull Request — master (#122)
by Carlos
07:37
created

Chain::hash()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 1
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
c 1
b 0
f 0
dl 0
loc 4
rs 10
cc 1
eloc 2
nc 1
nop 2
ccs 1
cts 1
cp 1
crap 1
1
<?php
2
/**
3
 * Particle.
4
 *
5
 * @link      http://github.com/particle-php for the canonical source repository
6
 * @copyright Copyright (c) 2005-2015 Particle (http://particle-php.com)
7
 * @license   https://github.com/particle-php/validator/blob/master/LICENSE New BSD License
8
 */
9
namespace Particle\Validator;
10
11
use Particle\Validator\Output\Structure;
12
use Particle\Validator\Output\Subject;
13
use Particle\Validator\Value\Container;
14
15
/**
16
 * Represents a collection of Rules which may break the chain of validation (but usually don't).
17
 *
18
 * @package Particle\Validator
19
 */
20
class Chain
21
{
22
    /**
23
     * The key we want to validate.
24
     *
25
     * @var string
26
     */
27
    protected $key;
28
29
    /**
30
     * The name that we can use in error messages.
31
     *
32
     * @var string
33
     */
34
    protected $name;
35
36
    /**
37
     * The array of all rules for this chain.
38
     *
39
     * @var Rule[]
40
     */
41
    protected $rules = [];
42
43
    /**
44
     * The message stack to append messages to.
45
     *
46
     * @var MessageStack
47
     */
48
    protected $messageStack;
49
50
    /**
51
     * Construct the chain.
52
     *
53
     * @param string $key
54
     * @param string $name
55
     * @param bool $required
56
     * @param bool $allowEmpty
57
     */
58 151
    public function __construct($key, $name, $required, $allowEmpty)
59
    {
60 151
        $this->key = $key;
61 151
        $this->name = $name;
62
63 151
        $this->addRule(new Rule\Required($required));
64 151
        $this->addRule(new Rule\NotEmpty($allowEmpty));
65 151
    }
66
67
    /**
68
     * Overwrite the default __clone behaviour to make sure the rules are cloned too.
69
     */
70 3
    public function __clone()
71
    {
72 3
        $rules = [];
73 3
        foreach ($this->rules as $rule) {
74 3
            $rules[] = clone $rule;
75 3
        }
76 3
        $this->rules = $rules;
77 3
    }
78
79
    /**
80
     * Validate the value to consist only out of alphanumeric characters.
81
     *
82
     * @param bool $allowWhitespace
83
     * @return $this
84
     */
85 7
    public function alnum($allowWhitespace = false)
86
    {
87 7
        return $this->addRule(new Rule\Alnum($allowWhitespace));
88
    }
89
90
    /**
91
     * Validate that the value only consists our of alphabetic characters.
92
     *
93
     * @param bool $allowWhitespace
94
     * @return $this
95
     */
96 7
    public function alpha($allowWhitespace = false)
97
    {
98 7
        return $this->addRule(new Rule\Alpha($allowWhitespace));
99
    }
100
101
    /**
102
     * Validate that the value is between $min and $max (inclusive).
103
     *
104
     * @param int $min
105
     * @param int $max
106
     * @return $this
107
     */
108 6
    public function between($min, $max)
109
    {
110 6
        return $this->addRule(new Rule\Between($min, $max));
111
    }
112
113
    /**
114
     * Validate that the value is a boolean.
115
     *
116
     * @return $this
117
     */
118 9
    public function bool()
119
    {
120 9
        return $this->addRule(new Rule\Boolean());
121
    }
122
123
    /**
124
     * Validate by executing a callback function, and returning its result.
125
     *
126
     * @param callable $callable
127
     * @return $this
128
     */
129 5
    public function callback(callable $callable)
130
    {
131 5
        return $this->addRule(new Rule\Callback($callable));
132
    }
133
134
    /**
135
     * Validates that the value is a date. If format is passed, it *must* be in that format.
136
     *
137
     * @param string|null $format
138
     * @return $this
139
     */
140 8
    public function datetime($format = null)
141
    {
142 8
        return $this->addRule(new Rule\Datetime($format));
143
    }
144
145
    /**
146
     * Validates that all characters of the value are decimal digits.
147
     *
148
     * @return $this
149
     */
150 4
    public function digits()
151
    {
152 4
        return $this->addRule(new Rule\Digits());
153
    }
154
155
    /**
156
     * Validates a value to be a nested array, which can then be validated using a new Validator instance.
157
     *
158
     * @param callable $callback
159
     * @return $this
160
     */
161 5
    public function each(callable $callback)
162
    {
163 5
        return $this->addRule(new Rule\Each($callback));
164
    }
165
166
    /**
167
     * Validates that the value is a valid email address (format only).
168
     * @return $this
169
     */
170 6
    public function email()
171
    {
172 6
        return $this->addRule(new Rule\Email());
173
    }
174
175
    /**
176
     * Validates that the value is equal to $value.
177
     *
178
     * @param string $value
179
     * @return $this
180
     */
181 2
    public function equals($value)
182
    {
183 2
        return $this->addRule(new Rule\Equal($value));
184
    }
185
186
    /**
187
     * Validates that the value is greater than $value.
188
     *
189
     * @param int $value
190
     * @return $this
191
     */
192 3
    public function greaterThan($value)
193
    {
194 3
        return $this->addRule(new Rule\GreaterThan($value));
195
    }
196
197
    /**
198
     * Validates that the value is in the array with optional "loose" checking.
199
     *
200
     * @param string $hashAlgorithm
201
     * @param bool $allowUppercase
202
     * @return $this
203
     * @see \Particle\Validator\Rule\Hash
204 4
     */
205
    public function hash($hashAlgorithm, $allowUppercase = false)
206 4
    {
207
        return $this->addRule(new Rule\Hash($hashAlgorithm, $allowUppercase));
208
    }
209
210
    /**
211
     * Validates that the value is in the array with optional "loose" checking.
212
     *
213
     * @param array $array
214
     * @param bool $strict
215 10
     * @return $this
216
     */
217 10
    public function inArray(array $array, $strict = true)
218
    {
219
        return $this->addRule(new Rule\InArray($array, $strict));
220
    }
221
222
    /**
223
     * Validates the value represents a valid integer
224
     *
225
     * @return $this
226 11
     * @see \Particle\Validator\Rule\Integer
227
     */
228 11
    public function integer()
229
    {
230
        return $this->addRule(new Rule\Integer());
231
    }
232
233
    /**
234
     * Validate the value to be of precisely length $length.
235
     *
236
     * @param int $length
237 13
     * @return $this
238
     */
239 13
    public function length($length)
240
    {
241
        return $this->addRule(new Rule\Length($length));
242
    }
243
244
    /**
245
     * Validates that the length of the value is between $min and $max.
246
     *
247
     * If $max is null, it has no upper limit. The default is inclusive.
248
     *
249
     * @param int $min
250
     * @param int|null $max
251 7
     * @return $this
252
     */
253 7
    public function lengthBetween($min, $max)
254
    {
255
        return $this->addRule(new Rule\LengthBetween($min, $max));
256
    }
257
258
    /**
259
     * Validates that the value is less than $value.
260
     *
261
     * @param int $value
262 3
     * @return $this
263
     */
264 3
    public function lessThan($value)
265
    {
266
        return $this->addRule(new Rule\LessThan($value));
267
    }
268
269
    /**
270
     * Mount a rule object onto this chain.
271
     *
272
     * @param Rule $rule
273 1
     * @return $this
274
     */
275 1
    public function mount(Rule $rule)
276
    {
277
        return $this->addRule($rule);
278
    }
279
280
    /**
281
     * Validates that the value is either a integer or a float.
282
     *
283 11
     * @return $this
284
     */
285 11
    public function numeric()
286
    {
287
        return $this->addRule(new Rule\Numeric());
288
    }
289
290
    /**
291
     * Validates that the value matches the regular expression $regex.
292
     *
293
     * @param string $regex
294 2
     * @return $this
295
     */
296 2
    public function regex($regex)
297
    {
298
        return $this->addRule(new Rule\Regex($regex));
299
    }
300
301
    /**
302
     * Validates that the value is a valid URL. The schemes array is to selectively whitelist URL schemes.
303
     *
304
     * @param array $schemes
305 7
     * @return $this
306
     */
307 7
    public function url(array $schemes = [])
308
    {
309
        return $this->addRule(new Rule\Url($schemes));
310
    }
311
312
    /**
313
     * Validates that the value is a valid UUID
314
     *
315
     * @param int $version
316 12
     * @return $this
317
     */
318 12
    public function uuid($version = Rule\Uuid::UUID_V4)
319
    {
320
        return $this->addRule(new Rule\Uuid($version));
321
    }
322
323
    /**
324
     * Set a callable or boolean value which may be used to alter the required requirement on validation time.
325
     *
326
     * This may be incredibly helpful when doing conditional validation.
327
     *
328
     * @param callable|bool $required
329 5
     * @return $this
330
     */
331 5
    public function required($required)
332 5
    {
333
        $this->getRequiredRule()->setRequired($required);
334
        return $this;
335
    }
336
337
    /**
338
     * Set a callable or boolean value which may be used to alter the allow empty requirement on validation time.
339
     *
340
     * This may be incredibly helpful when doing conditional validation.
341
     *
342
     * @param callable|bool $allowEmpty
343 4
     * @return $this
344
     */
345 4
    public function allowEmpty($allowEmpty)
346 4
    {
347
        $this->getNotEmptyRule()->setAllowEmpty($allowEmpty);
348
        return $this;
349
    }
350
351
    /**
352
     * Attach a representation of this Chain to the Output\Structure $structure.
353
     *
354
     * @internal
355
     * @param Structure $structure
356
     * @param MessageStack $messageStack
357 2
     * @return Structure
358
     */
359 2
    public function output(Structure $structure, MessageStack $messageStack)
360
    {
361 2
        $subject = new Subject($this->key, $this->name);
362 2
363 2
        foreach ($this->rules as $rule) {
364
            $rule->output($subject, $messageStack);
365 2
        }
366
367 2
        $structure->addSubject($subject);
368
369
        return $structure;
370
    }
371
372
    /**
373
     * Validates the values in the $values array and appends messages to $messageStack. Returns the result as a bool.
374
     *
375
     * @param MessageStack $messageStack
376
     * @param Container $input
377
     * @param Container $output
378 148
     * @return bool
379
     */
380 148
    public function validate(MessageStack $messageStack, Container $input, Container $output)
381 148
    {
382 148
        $valid = true;
383 148
        foreach ($this->rules as $rule) {
384
            $rule->setMessageStack($messageStack);
385 148
            $rule->setParameters($this->key, $this->name);
386
387 148
            $valid = $rule->isValid($this->key, $input) && $valid;
388 15
389
            if ($rule->shouldBreakChain()) {
390 148
                break;
391
            }
392 148
        }
393 81
394 81
        if ($valid && $input->has($this->key)) {
395 148
            $output->set($this->key, $input->get($this->key));
396
        }
397
        return $valid;
398
    }
399
400
    /**
401
     * Shortcut method for storing a rule on this chain, and returning the chain.
402
     *
403
     * @param Rule $rule
404 151
     * @return $this
405
     */
406 151
    protected function addRule(Rule $rule)
407
    {
408 151
        $this->rules[] = $rule;
409
410
        return $this;
411
    }
412
413
    /**
414
     * Returns the first rule, which is always the required rule.
415
     *
416 5
     * @return Rule\Required
417
     */
418 5
    protected function getRequiredRule()
419
    {
420
        return $this->rules[0];
421
    }
422
423
    /**
424
     * Returns the second rule, which is always the allow empty rule.
425
     *
426 4
     * @return Rule\NotEmpty
427
     */
428 4
    protected function getNotEmptyRule()
429
    {
430
        return $this->rules[1];
431
    }
432
}
433