ArrayValidator   A
last analyzed

Complexity

Total Complexity 7

Size/Duplication

Total Lines 75
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 4

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 7
lcom 1
cbo 4
dl 0
loc 75
rs 10
c 0
b 0
f 0
ccs 19
cts 19
cp 1

5 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 2
A validator() 0 6 1
A validate() 0 13 2
A getContainer() 0 4 1
A createContextStorageFromBlocks() 0 4 1
1
<?php declare(strict_types=1);
2
3
namespace Limoncello\Validation;
4
5
/**
6
 * Copyright 2015-2020 [email protected]
7
 *
8
 * Licensed under the Apache License, Version 2.0 (the "License");
9
 * you may not use this file except in compliance with the License.
10
 * You may obtain a copy of the License at
11
 *
12
 * http://www.apache.org/licenses/LICENSE-2.0
13
 *
14
 * Unless required by applicable law or agreed to in writing, software
15
 * distributed under the License is distributed on an "AS IS" BASIS,
16
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17
 * See the License for the specific language governing permissions and
18
 * limitations under the License.
19
 */
20
21
use Limoncello\Validation\Contracts\Execution\ContextStorageInterface;
22
use Limoncello\Validation\Contracts\Rules\RuleInterface;
23
use Limoncello\Validation\Execution\ContextStorage;
24
use Limoncello\Validation\Validator\ArrayValidation;
25
use Limoncello\Validation\Validator\BaseValidator;
26
use Psr\Container\ContainerInterface;
27
28
/**
29
 * @package Limoncello\Validation
30
 */
31
class ArrayValidator extends BaseValidator
32
{
33
    use ArrayValidation;
34
35
    /**
36
     * @var ContainerInterface|null
37
     */
38
    private $container;
39
40
    /**
41
     * @param RuleInterface[]|iterable $rules
42
     * @param ContainerInterface|null  $container
43
     */
44 3
    public function __construct(iterable $rules, ContainerInterface $container = null)
45
    {
46 3
        parent::__construct();
47
48 3
        if (empty($rules) === false) {
49 3
            $this->setRules($rules);
50
        }
51
52 3
        $this->container = $container;
53
    }
54
55
    /**
56
     * @param RuleInterface[]|iterable $rules
57
     * @param ContainerInterface|null  $container
58
     *
59
     * @return self
60
     */
61 3
    public static function validator(iterable $rules = [], ContainerInterface $container = null): self
62
    {
63 3
        $validator = new static($rules, $container);
64
65 3
        return $validator;
66
    }
67
68
    /**
69
     * @inheritdoc
70
     */
71 3
    public function validate($input): bool
72
    {
73 3
        if ($this->areAggregatorsDirty() === true) {
74 2
            $this->resetAggregators();
75
        }
76
77 3
        $this->validateArrayImplementation($input, $this->getCaptureAggregator(), $this->getErrorAggregator());
78 3
        $this->markAggregatorsAsDirty();
79
80 3
        $isOk = $this->getErrorAggregator()->count() <= 0;
81
82 3
        return $isOk;
83
    }
84
85
    /**
86
     * @return ContainerInterface|null
87
     */
88 3
    protected function getContainer(): ?ContainerInterface
89
    {
90 3
        return $this->container;
91
    }
92
93
    /**
94
     * During validation you can pass to rules your custom context which might have any additional
95
     * resources needed by your rules (extra properties, database connection settings, container, and etc).
96
     *
97
     * @param array $blocks
98
     *
99
     * @return ContextStorageInterface
100
     */
101 3
    protected function createContextStorageFromBlocks(array $blocks): ContextStorageInterface
102
    {
103 3
        return new ContextStorage($blocks, $this->getContainer());
104
    }
105
}
106