Passed
Pull Request — master (#99)
by Def
02:19
created

Each   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 52
Duplicated Lines 0 %

Test Coverage

Coverage 75%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 24
dl 0
loc 52
ccs 18
cts 24
cp 0.75
rs 10
c 1
b 0
f 0
wmc 8

4 Methods

Rating   Name   Duplication   Size   Complexity  
A incorrectInputMessage() 0 5 1
A __construct() 0 3 1
A validateValue() 0 26 5
A getRawOptions() 0 3 1
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
                foreach ($itemResult->getRawErrors() as $error) {
44 2
                    $result->addError(
45 2
                        new ErrorMessage(
46 2
                            $this->message,
47
                            [
48 2
                                'error' => $error,
49 2
                                'value' => $item,
50
                            ]
51
                        )
52
                    );
53
                }
54
            }
55
        }
56
57 2
        return $result;
58
    }
59
60
    public function incorrectInputMessage(string $message): self
61
    {
62
        $new = clone $this;
63
        $new->incorrectInputMessage = $message;
64
        return $new;
65
    }
66
67 2
    public function getRawOptions(?ErrorMessageFormatterInterface $formatter = null): array
68
    {
69 2
        return $this->rules->asArray($formatter);
70
    }
71
}
72