Completed
Push — master ( f70b57...5f6191 )
by Changwan
06:48
created

RuleNormalizer   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 26
Duplicated Lines 0 %

Coupling/Cohesion

Components 0
Dependencies 1

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
dl 0
loc 26
ccs 13
cts 13
cp 1
rs 10
c 0
b 0
f 0
wmc 10
lcom 0
cbo 1

1 Method

Rating   Name   Duplication   Size   Complexity  
C normalize() 0 23 10
1
<?php
2
namespace Wandu\Validator;
3
4
use InvalidArgumentException;
5
use Wandu\Validator\Contracts\Rule;
6
7
class RuleNormalizer
8
{
9 10
    public function normalize($rule)
10
    {
11 10
        while (is_callable($rule) || (is_object($rule) && $rule instanceof Rule)) {
12 5
            if (is_callable($rule)) {
13 4
                $rule = call_user_func($rule);
14
            } else {
15 4
                $rule = $rule->rules();
16
            }
17
        }
18
        // string -> array
19 10
        if (!is_array($rule)) {
20 9
            $rule = [$rule];
21
        }
22 10
        $normalized = [];
23 10
        foreach ($rule as $key => $value) {
24 10
            if (is_int($key) || $key === '' || $key === null) {
25 10
                $normalized[''] = array_merge($normalized[''] ?? [], (array) $value);
26
            } else {
27 10
                $normalized[$key] = $this->normalize($value);
28
            }
29
        }
30 10
        return $normalized;
31
    }
32
}
33