Passed
Pull Request — master (#81)
by Def
01:23
created

Each   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 57
Duplicated Lines 0 %

Test Coverage

Coverage 76%

Importance

Changes 0
Metric Value
wmc 9
eloc 25
dl 0
loc 57
ccs 19
cts 25
cp 0.76
rs 10
c 0
b 0
f 0

5 Methods

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