Passed
Push — master ( 442b95...b71bb5 )
by Rick
05:36
created

Utils   A

Complexity

Total Complexity 10

Size/Duplication

Total Lines 72
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 15
dl 0
loc 72
ccs 19
cts 19
cp 1
rs 10
c 0
b 0
f 0
wmc 10

5 Methods

Rating   Name   Duplication   Size   Complexity  
A merge() 0 5 2
A invert() 0 5 1
A createClosureFromCallable() 0 9 2
A both() 0 5 2
A validateArray() 0 7 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
class Utils
12
{
13
	/**
14
	 * @param \Closure $closure
15
	 *
16
	 * @return \Closure
17
	 */
18
	public static function invert(\Closure $closure): \Closure
19
	{
20 3
		return function ($value) use ($closure)
21
		{
22 3
			return !$closure($value);
23 3
		};
24
	}
25
26
	/**
27
	 * @param \Closure $closure1
28
	 * @param \Closure $closure2
29
	 *
30
	 * @return \Closure
31
	 */
32
	public static function merge(\Closure $closure1, \Closure $closure2): \Closure
33
	{
34 3
		return function ($value) use ($closure1, $closure2)
35
		{
36 3
			return $closure1($value) || $closure2($value);
37 3
		};
38
	}
39
40
	/**
41
	 * @param \Closure $closure1
42
	 * @param \Closure $closure2
43
	 *
44
	 * @return \Closure
45
	 */
46
	public static function both(\Closure $closure1, \Closure $closure2): \Closure
47
	{
48 3
		return function ($value) use ($closure1, $closure2)
49
		{
50 3
			return $closure1($value) && $closure2($value);
51 3
		};
52
	}
53
54
	/**
55
	 * @param \Closure $closure
56
	 * @param array $values
57
	 *
58
	 * @return bool
59
	 */
60 12
	public static function validateArray(\Closure $closure, array $values): bool
61
	{
62 12
		foreach ($values as $value)
63 12
			if (!$closure($value))
64 12
				return false;
65
66 9
		return true;
67
	}
68
69
    /**
70
     * @param callable $callable
71
     *
72
     * @return \Closure
73
     */
74 63
    public static function createClosureFromCallable(callable $callable)
75
    {
76
        // Closure::fromCallable was introduced in PHP 7.1.0
77 63
        if (version_compare(PHP_VERSION, '7.1.0', '>='))
78 42
            return \Closure::fromCallable($callable);
79
        
80 21
        return function ($value) use ($callable)
81
        {
82 20
            return $callable($value);
83 21
        };
84
	}
85
}