Passed
Push — main ( 70b219...5ef774 )
by Breno
02:19
created

ValidationResultSet::isEmpty()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
c 0
b 0
f 0
nc 1
nop 0
dl 0
loc 3
rs 10
1
<?php
2
declare(strict_types=1);
3
4
namespace BrenoRoosevelt\Validation;
5
6
use BrenoRoosevelt\Validation\Exception\Guard;
7
use BrenoRoosevelt\Validation\Exception\ValidationExceptionInterface;
8
9
class ValidationResultSet
10
{
11
    use Guard;
12
13
    /** @var Result[] */
14
    private array $validationResults = [];
15
16
    public function add(Result ...$results): self
17
    {
18
        $instance = clone $this;
19
        array_push($instance->validationResults, ...$results);
20
        return $instance;
21
    }
22
23
    public function isOk(): bool
24
    {
25
        foreach ($this->validationResults as $violation) {
26
            if (!$violation->isOk()) {
27
                return false;
28
            }
29
        }
30
31
        return true;
32
    }
33
34
    public function getErrors(): array
35
    {
36
        $errors = [];
37
        foreach ($this->validationResults as $result) {
38
            foreach ($result->getErrors() as $error) {
39
                $field = $result->getField();
40
                if ($field !== null) {
41
                    $errors[$field][] = $error;
42
                } else {
43
                    $errors[] = $error;
44
                }
45
            }
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
    /**
63
     * @throws ValidationExceptionInterface
64
     */
65
    public function guard(?ValidationExceptionInterface $validationException = null): void
66
    {
67
        $this->guardResult($this, $validationException);
68
    }
69
}
70