Passed
Pull Request — master (#41)
by Alexander
09:27
created

Each::validateAttribute()   B

Complexity

Conditions 9
Paths 12

Size

Total Lines 40
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 90

Importance

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