Passed
Push — master ( ddc766...cecfbc )
by Alexander
01:30
created

Each   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Test Coverage

Coverage 60%

Importance

Changes 0
Metric Value
eloc 25
dl 0
loc 52
ccs 15
cts 25
cp 0.6
rs 10
c 0
b 0
f 0
wmc 8

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 3 1
A validateValue() 0 26 5
A incorrectInputMessage() 0 5 1
A message() 0 5 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Validator\Rule;
6
7
use Yiisoft\Validator\Rule;
8
use Yiisoft\Validator\Rules;
9
use Yiisoft\Validator\Result;
10
use Yiisoft\Validator\DataSetInterface;
11
12
/**
13
 * Each validator validates an array by checking each of its elements against a set of rules
14
 */
15
class Each extends Rule
16
{
17
    private Rules $rules;
18
19
    private string $incorrectInputMessage = 'Value should be array or iterable';
20
    private string $message = '{error} {value} given.';
21
22 1
    public function __construct(Rules $rules)
23
    {
24 1
        $this->rules = $rules;
25
    }
26
27 1
    protected function validateValue($value, DataSetInterface $dataSet = null): Result
28
    {
29 1
        $result = new Result();
30 1
        if (!is_iterable($value)) {
31
            $result->addError($this->incorrectInputMessage);
32
            return $result;
33
        }
34
35 1
        foreach ($value as $item) {
36 1
            $itemResult = $this->rules->validate($item, $dataSet);
37 1
            if ($itemResult->isValid() === false) {
38 1
                foreach ($itemResult->getErrors() as $error) {
39 1
                    $result->addError(
40 1
                        $this->translateMessage(
41 1
                            $this->message,
42
                            [
43 1
                                'error' => $error,
44 1
                                'value' => $item,
45
                            ]
46
                        )
47
                    );
48
                }
49
            }
50
        }
51
52 1
        return $result;
53
    }
54
55
    public function incorrectInputMessage(string $message): self
56
    {
57
        $new = clone $this;
58
        $new->incorrectInputMessage = $message;
59
        return $new;
60
    }
61
62
    public function message(string $message): self
63
    {
64
        $new = clone $this;
65
        $new->message = $message;
66
        return $new;
67
    }
68
}
69