ArrayValidator::check()   A
last analyzed

Complexity

Conditions 4
Paths 2

Size

Total Lines 23
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 15
CRAP Score 4

Importance

Changes 0
Metric Value
cc 4
eloc 16
nc 2
nop 2
dl 0
loc 23
ccs 15
cts 15
cp 1
crap 4
rs 9.7333
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Validator;
6
7
use Assert\Assertion;
8
use Assert\InvalidArgumentException;
9
10
class ArrayValidator
11
{
12 10
    public static function check(array $fields, array $rules): void
13
    {
14 10
        foreach (array_keys(array_diff_key($rules, $fields)) as $field) {
15 2
            $fields[$field] = null;
16
        }
17
18
        array_walk($fields, function ($value, $field) use ($rules) : void {
19 10
            Assertion::keyExists($rules, $field);
20 10
            array_map(
21
                function ($validationRule) use ($value, $field) : void {
22 10
                    $validation = explode(':', $validationRule);
23 10
                    $method = $validation[0];
24 10
                    $params = array_key_exists(1, $validation) ? $validation[1] : null;
25 10
                    $ruleMethod = self::getRuleParams($method, $params);
26
27 10
                    list($param1, $param2) = $ruleMethod[RuleParser::getRuleMethod($method)]($params);
28
                    try {
29 9
                        call_user_func_array([Assertion::class, $method], [$value, $param1, $param2]);
30 7
                    } catch (InvalidArgumentException $e) {
31 7
                        throw ValidationException::withField($field, $e->getMessage());
32
                    }
33 10
                },
34 10
                explode('|', $rules[$field])
35
            );
36 10
        });
37 2
    }
38
39 10
    private static function getRuleParams(string $method, ?string $params): array
40
    {
41
        return [
42
            'singleParam' => function () use ($method, $params) {
43
                return [
44 9
                    $params ? RuleParser::getRule($method, $params) : null,
45
                    null
46
                ];
47 10
            },
48
            'multipleParams' => function () use ($method, $params) {
49 1
                return RuleParser::getRule($method, $params);
50 10
            },
51
        ];
52
    }
53
}
54