Passed
Pull Request — master (#99)
by Def
03:05 queued 46s
created

Each::validateValue()   A

Complexity

Conditions 4
Paths 4

Size

Total Lines 16
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 8
CRAP Score 4.128

Importance

Changes 0
Metric Value
cc 4
eloc 9
nc 4
nop 2
dl 0
loc 16
ccs 8
cts 10
cp 0.8
crap 4.128
rs 9.9666
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Validator\Rule;
6
7
use Yiisoft\Validator\DataSetInterface;
8
use Yiisoft\Validator\ErrorMessage;
9
use Yiisoft\Validator\ErrorMessageFormatterInterface;
10
use Yiisoft\Validator\HasValidationErrorMessage;
11
use Yiisoft\Validator\Result;
12
use Yiisoft\Validator\Rule;
13
use Yiisoft\Validator\Rules;
14
15
/**
16
 * Each validator validates an array by checking each of its elements against a set of rules
17
 */
18
class Each extends Rule
19
{
20
    use HasValidationErrorMessage;
21
22
    private Rules $rules;
23
24
    private string $incorrectInputMessage = 'Value should be array or iterable';
25
    private string $message = '{error} {value} given.';
26
27 5
    public function __construct(Rules $rules)
28
    {
29 5
        $this->rules = $rules;
30 5
    }
31
32 2
    protected function validateValue($value, DataSetInterface $dataSet = null): Result
33
    {
34 2
        $result = new Result();
35 2
        if (!is_iterable($value)) {
36
            $result->addError(new ErrorMessage($this->incorrectInputMessage));
37
            return $result;
38
        }
39
40 2
        foreach ($value as $item) {
41 2
            $itemResult = $this->rules->validate($item, $dataSet);
42 2
            if ($itemResult->isValid() === false) {
43 2
                $result->addResultWithWrapper($itemResult, $this->message, ['value' => $item]);
44
            }
45
        }
46
47 2
        return $result;
48
    }
49
50
    public function incorrectInputMessage(string $message): self
51
    {
52
        $new = clone $this;
53
        $new->incorrectInputMessage = $message;
54
        return $new;
55
    }
56
57 2
    public function getOptions(?ErrorMessageFormatterInterface $formatter = null): array
58
    {
59 2
        return $this->rules->asArray($formatter);
60
    }
61
}
62