Passed
Push — master ( 0e5e44...5d3dda )
by Alex
02:04
created

Validator::validateValueKeyMods()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 11
rs 10
c 0
b 0
f 0
cc 3
nc 3
nop 1
1
<?php
2
namespace Staticall\Petrovich\Petrovich\Ruleset;
3
4
use Staticall\Petrovich\Petrovich;
5
6
class Validator
7
{
8
    /**
9
     * Performs basic validation over provided rules
10
     * Useful for testing and/or any format changes
11
     *
12
     * @param array $rules
13
     *
14
     * @return bool
15
     */
16
    public function validate(array $rules) : bool
17
    {
18
        if ($this->validateRootKeys($rules) === false) {
19
            return false;
20
        }
21
22
        foreach ($rules as $rule) {
23
            if ($this->validateSecondKeys($rule) === false) {
24
                return false;
25
            }
26
27
            foreach ($rule as $item) {
28
                foreach ($item as $itemData) {
29
                    if (\is_array($itemData) === false) {
30
                        return false;
31
                    }
32
33
                    if ($this->validateValueKeys($itemData) === false) {
34
                        return false;
35
                    }
36
                }
37
            }
38
        }
39
40
        return true;
41
    }
42
43
    /**
44
     * Validates all available root keys
45
     *
46
     * @param array $rules
47
     *
48
     * @return bool
49
     */
50
    public function validateRootKeys(array $rules) : bool
51
    {
52
        $availableKeys = Petrovich\Ruleset::getAvailableRootKeys();
53
54
        foreach (\array_keys($rules) as $key) {
55
            if (\in_array($key, $availableKeys, true) === false) {
56
                return false;
57
            }
58
        }
59
60
        return true;
61
    }
62
63
    public function validateSecondKeys(array $rule) : bool
64
    {
65
        $availableKeys = Petrovich\Ruleset::getAvailableSecondKeys();
66
67
        foreach (\array_keys($rule) as $ruleSecondKey) {
68
            if (\in_array($ruleSecondKey, $availableKeys, true) === false) {
69
                return false;
70
            }
71
        }
72
73
        return true;
74
    }
75
76
    public function validateValueKeys(array $rule) : bool
77
    {
78
        $availableKeys = Petrovich\Ruleset::getAvailableValueKeys();
79
80
        foreach (\array_keys($rule) as $ruleValueKey) {
81
            if (\in_array($ruleValueKey, $availableKeys, true) === false) {
82
                return false;
83
            }
84
        }
85
86
        if (\array_key_exists(Petrovich\Ruleset::VALUE_KEY_TAGS, $rule)) {
87
            if (\is_array($rule[Petrovich\Ruleset::VALUE_KEY_TAGS]) === false) {
88
                return false;
89
            }
90
        }
91
92
        if (
93
            $this->validateValueKeyTest($rule) === false
94
            ||
95
            $this->validateValueKeyMods($rule) === false
96
            ||
97
            $this->validateValueKeyTags($rule) === false
98
            ||
99
            $this->validateValueKeyGender($rule) === false
100
        ) {
101
            return false;
102
        }
103
104
        return true;
105
    }
106
107
    public function validateValueKeyTest(array $rule) : bool
108
    {
109
        if (\array_key_exists(Petrovich\Ruleset::VALUE_KEY_TEST, $rule) === false) {
110
            return true;
111
        }
112
113
        if (\is_array($rule[Petrovich\Ruleset::VALUE_KEY_TEST]) === false) {
114
            return false;
115
        }
116
117
        return true;
118
    }
119
120
    public function validateValueKeyMods(array $rule) : bool
121
    {
122
        if (\array_key_exists(Petrovich\Ruleset::VALUE_KEY_MODS, $rule) === false) {
123
            return true;
124
        }
125
126
        if (\is_array($rule[Petrovich\Ruleset::VALUE_KEY_MODS]) === false) {
127
            return false;
128
        }
129
130
        return true;
131
    }
132
133
    public function validateValueKeyTags(array $rule) : bool
134
    {
135
        if (\array_key_exists(Petrovich\Ruleset::VALUE_KEY_TAGS, $rule) === false) {
136
            return true;
137
        }
138
139
        if (\is_array($rule[Petrovich\Ruleset::VALUE_KEY_TAGS]) === false) {
140
            return false;
141
        }
142
143
        return true;
144
    }
145
146
    public function validateValueKeyGender(array $rule) : bool
147
    {
148
        $availableGenders = Petrovich\Ruleset::getAvailableGenders();
149
150
        if (\array_key_exists(Petrovich\Ruleset::VALUE_KEY_GENDER, $rule) === false) {
151
            return true;
152
        }
153
154
        if (\is_string($rule[Petrovich\Ruleset::VALUE_KEY_GENDER]) === false) {
155
            return false;
156
        }
157
158
        if (\in_array($rule[Petrovich\Ruleset::VALUE_KEY_GENDER], $availableGenders) === false) {
159
            return false;
160
        }
161
162
        return true;
163
    }
164
}
165