CollectionValidation::each()   B
last analyzed

Complexity

Conditions 5
Paths 7

Size

Total Lines 14
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
dl 0
loc 14
rs 8.8571
c 1
b 0
f 0
cc 5
eloc 7
nc 7
nop 3
1
<?php
2
/**
3
 * Author: Nil Portugués Calderó <[email protected]>
4
 * Date: 9/16/14
5
 * Time: 10:19 PM
6
 *
7
 * For the full copyright and license information, please view the LICENSE
8
 * file that was distributed with this source code.
9
 */
10
11
namespace NilPortugues\Validator\Validation\Collection;
12
13
use NilPortugues\Validator\AbstractValidator;
14
15
/**
16
 * Class CollectionValidation
17
 * @package NilPortugues\Validator\Validation\CollectionAttribute
18
 */
19
class CollectionValidation
20
{
21
    /**
22
     * @param mixed $value
23
     *
24
     * @return bool
25
     */
26
    public static function isArray($value)
27
    {
28
        return \is_array($value)
29
        || (\is_object($value) && $value instanceof \ArrayObject)
30
        || (\is_object($value) && $value instanceof \SplFixedArray);
31
    }
32
33
    /**
34
     * @param                                           $value
35
     * @param \NilPortugues\Validator\AbstractValidator $valueValidator
36
     * @param \NilPortugues\Validator\AbstractValidator $keyValidator
37
     *
38
     * @return bool
39
     */
40
    public static function each($value, AbstractValidator $valueValidator, AbstractValidator $keyValidator = null)
41
    {
42
        $isValid = true;
43
44
        foreach ($value as $key => $data) {
45
            if ($keyValidator instanceof AbstractValidator) {
46
                $isValid = $isValid && $keyValidator->validate($key);
47
            }
48
49
            $isValid = $isValid && $valueValidator->validate($data);
50
        }
51
52
        return $isValid;
53
    }
54
55
    /**
56
     * @param                   $value
57
     * @param AbstractValidator $keyValidator
58
     *
59
     * @return bool
60
     */
61
    public static function hasKeyFormat($value, AbstractValidator $keyValidator)
62
    {
63
        if ($value instanceof \ArrayObject) {
64
            $value = $value->getArrayCopy();
65
        }
66
67
        if ($value instanceof \SplFixedArray) {
68
            $value = $value->toArray();
69
        }
70
71
        $arrayKeys = \array_keys($value);
72
        $isValid   = true;
73
74
        foreach ($arrayKeys as $key) {
75
            $isValid = $isValid && $keyValidator->validate($key);
76
        }
77
78
        return $isValid;
79
    }
80
81
    /**
82
     * @param       $haystack
83
     * @param mixed $needle
84
     * @param bool  $strict
85
     *
86
     * @return bool
87
     */
88
    public static function endsWith($haystack, $needle, $strict = false)
89
    {
90
        $last = \end($haystack);
91
        \settype($strict, 'bool');
92
93
        if (false === $strict) {
94
            return $last == $needle;
95
        }
96
97
        return $last === $needle;
98
    }
99
100
    /**
101
     * @param       $haystack
102
     * @param mixed $needle
103
     * @param bool  $strict
104
     *
105
     * @return bool
106
     */
107
    public static function contains($haystack, $needle, $strict = false)
108
    {
109
        if ($haystack instanceof \ArrayObject) {
110
            $haystack = $haystack->getArrayCopy();
111
        }
112
113
        if ($haystack instanceof \SplFixedArray) {
114
            $haystack = $haystack->toArray();
115
        }
116
117
        \settype($strict, 'bool');
118
119
        if (false === $strict) {
120
            return \in_array($needle, $haystack, false);
121
        }
122
123
        return \in_array($needle, $haystack, true);
124
    }
125
126
    /**
127
     * @param        $value
128
     * @param string $keyName
129
     *
130
     * @return bool
131
     */
132
    public static function hasKey($value, $keyName)
133
    {
134
        return \array_key_exists($keyName, $value);
135
    }
136
137
    /**
138
     * @param     $value
139
     * @param int $length
140
     *
141
     * @return bool
142
     */
143
    public static function hasLength($value, $length)
144
    {
145
        \settype($length, 'int');
146
147
        return \count($value) === $length;
148
    }
149
150
    /**
151
     * @param $value
152
     *
153
     * @return bool
154
     */
155
    public static function isNotEmpty($value)
156
    {
157
        return \count($value) > 0;
158
    }
159
160
    /**
161
     * @param       $haystack
162
     * @param mixed $needle
163
     * @param bool  $strict
164
     *
165
     * @return bool
166
     */
167
    public static function startsWith($haystack, $needle, $strict = false)
168
    {
169
        $first = \reset($haystack);
170
        \settype($strict, 'bool');
171
172
        if (false === $strict) {
173
            return $first == $needle;
174
        }
175
176
        return $first === $needle;
177
    }
178
}
179