Passed
Push — main ( 0234a4...50ef61 )
by Breno
01:36
created

ValidationResultSet::guard()   A

Complexity

Conditions 5
Paths 7

Size

Total Lines 18
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 10
nc 7
nop 1
dl 0
loc 18
rs 9.6111
c 0
b 0
f 0
1
<?php
2
declare(strict_types=1);
3
4
namespace BrenoRoosevelt\Validation;
5
6
use BrenoRoosevelt\Validation\Exception\ValidationException;
7
use BrenoRoosevelt\Validation\Exception\ValidationExceptionInterface;
8
9
class ValidationResultSet
10
{
11
    /** @var Result[] */
12
    private array $validationResults = [];
13
14
    public function add(Result ...$errorResult): self
15
    {
16
        $instance = clone $this;
17
        array_push($instance->validationResults, ...$errorResult);
18
        return $instance;
19
    }
20
21
    public function isOk(): bool
22
    {
23
        foreach ($this->validationResults as $violation) {
24
            if (!$violation->isOk()) {
25
                return false;
26
            }
27
        }
28
29
        return true;
30
    }
31
32
    public function getErrors(): array
33
    {
34
        $errors = [];
35
        foreach ($this->validationResults as $violation) {
36
            if (null === ($field = $violation->getField())) {
37
                array_push($errors, ...$violation->getErrors());
38
                continue;
39
            }
40
41
            if (!isset($errors[$field])) {
42
                $errors[$field] = [];
43
            }
44
45
            array_push($errors[$field], ...$violation->getErrors());
46
        }
47
48
        return $errors;
49
    }
50
51
    /** @return Result[] */
52
    public function validationResults(): array
53
    {
54
        return $this->validationResults;
55
    }
56
57
    public function isEmpty(): bool
58
    {
59
        return empty($this->validationResults);
60
    }
61
}
62