Passed
Push — master ( cdaa8b...1fad8f )
by Rick
02:27
created

Utils::createClosureFromCallable()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 2.5

Importance

Changes 0
Metric Value
c 0
b 0
f 0
dl 0
loc 11
ccs 3
cts 6
cp 0.5
rs 9.4285
cc 2
eloc 5
nc 2
nop 1
crap 2.5
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 1
	public static function invert(\Closure $closure): \Closure
19
	{
20
		return function ($value) use ($closure)
21
		{
22 1
			return !$closure($value);
23 1
		};
24
	}
25
26
	/**
27
	 * @param \Closure $closure1
28
	 * @param \Closure $closure2
29
	 *
30
	 * @return \Closure
31
	 */
32 1
	public static function merge(\Closure $closure1, \Closure $closure2): \Closure
33
	{
34
		return function ($value) use ($closure1, $closure2)
35
		{
36 1
			return $closure1($value) || $closure2($value);
37 1
		};
38
	}
39
40
	/**
41
	 * @param \Closure $closure1
42
	 * @param \Closure $closure2
43
	 *
44
	 * @return \Closure
45
	 */
46 1
	public static function both(\Closure $closure1, \Closure $closure2): \Closure
47
	{
48
		return function ($value) use ($closure1, $closure2)
49
		{
50 1
			return $closure1($value) && $closure2($value);
51 1
		};
52
	}
53
54
	/**
55
	 * @param \Closure $closure
56
	 * @param array $values
57
	 *
58
	 * @return bool
59
	 */
60 4
	public static function validateArray(\Closure $closure, array $values): bool
61
	{
62 4
		foreach ($values as $value)
63 4
			if (!$closure($value))
64 2
				return false;
65
66 3
		return true;
67
	}
68
69
    /**
70
     * @param callable $callable
71
     *
72
     * @return \Closure
73
     */
74 21
    public static function createClosureFromCallable(callable $callable)
75
    {
76
        // Closure::fromCallable was introduced in PHP 7.1.0
77 21
        if (version_compare(PHP_VERSION, '7.1.0', '>='))
78 21
            return \Closure::fromCallable($callable);
79
        
80
        return function ($value) use ($callable)
81
        {
82
            return $callable($value);
83
        };
84
	}
85
}