Utils   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 68
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 9
eloc 12
dl 0
loc 68
ccs 16
cts 16
cp 1
rs 10
c 0
b 0
f 0

5 Methods

Rating   Name   Duplication   Size   Complexity  
A createClosureFromCallable() 0 3 1
A merge() 0 5 2
A invert() 0 5 1
A both() 0 5 2
A validateArray() 0 9 3
1
<?php
2
/**
3
 * Copyright 2017 NanoSector
4
 *
5
 * You should have received a copy of the MIT license with the project.
6
 * See the LICENSE file for more information.
7
 */
8
9
namespace ValidationClosures;
10
11
use Closure;
12
13
class Utils
14
{
15
	/**
16
	 * @param Closure $closure
17
	 *
18
	 * @return Closure
19
	 */
20
	public static function invert(Closure $closure): Closure
21
	{
22 2
		return static function ($value) use ($closure)
23
		{
24 2
			return !$closure($value);
25 2
		};
26
	}
27
28
	/**
29
	 * @param Closure $closure1
30
	 * @param Closure $closure2
31
	 *
32
	 * @return Closure
33
	 */
34
	public static function merge(Closure $closure1, Closure $closure2): Closure
35
	{
36 2
		return static function ($value) use ($closure1, $closure2)
37
		{
38 2
			return $closure1($value) || $closure2($value);
39 2
		};
40
	}
41
42
	/**
43
	 * @param Closure $closure1
44
	 * @param Closure $closure2
45
	 *
46
	 * @return Closure
47
	 */
48
	public static function both(Closure $closure1, Closure $closure2): Closure
49
	{
50 2
		return static function ($value) use ($closure1, $closure2)
51
		{
52 2
			return $closure1($value) && $closure2($value);
53 2
		};
54
	}
55
56
	/**
57
	 * @param Closure $closure
58
	 * @param array $values
59
	 *
60
	 * @return bool
61
	 */
62 8
	public static function validateArray(Closure $closure, array $values): bool
63
	{
64 8
		foreach ($values as $value) {
65 8
            if (!$closure($value)) {
66 8
                return false;
67
            }
68
        }
69
70 6
		return true;
71
	}
72
73
    /**
74
     * @param callable $callable
75
     *
76
     * @return Closure
77
     */
78 42
    public static function createClosureFromCallable(callable $callable): callable
79
    {
80 42
        return Closure::fromCallable($callable);
81
	}
82
}