-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFallbacks.php
120 lines (105 loc) · 3.25 KB
/
Fallbacks.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
<?php
namespace JsonLogic;
use JsonLogic\Operators\CallableOperator;
use JsonLogic\Rule;
use JsonLogic\Support\Logical;
use function array_keys;
use function array_merge;
use function array_unique;
use function count;
use function is_array;
use function is_numeric;
use function is_string;
/**
* For fully fallback to official JsonLogic lib
*
* phpcs:disable PSR1.Methods.CamelCapsMethodName.NotCamelCaps
*/
trait Fallbacks
{
/** @deprecated 1.0.0 */
public static function get_operator($logic)
{
return array_keys($logic)[0];
}
/** @deprecated 1.0.0 */
public static function get_values($logic, $fix_unary = true)
{
$op = static::get_operator($logic);
$values = $logic[$op];
if ($fix_unary && (!is_array($values) or static::is_logic($values))) {
$values = [ $values ];
}
return $values;
}
/** @deprecated 1.0.0 */
public static function is_logic($array): bool
{
return Rule::isValid($array);
}
/** @deprecated 1.0.0 */
public static function truthy($logic): bool
{
return Logical::truthy($logic);
}
/** @deprecated 1.0.0 */
public static function uses_data($logic): array
{
if (is_object($logic)) {
$logic = (array) $logic;
}
$collection = [];
if (self::is_logic($logic)) {
$op = array_keys($logic)[0];
$values = (array) $logic[$op];
if ($op === 'var') {
$collection[] = $values[0];
} else {
foreach ($values as $value) {
$collection = array_merge($collection, self::uses_data($value));
}
}
}
return array_unique($collection);
}
/** @deprecated 1.0.0 */
public static function rule_like($rule, $pattern): bool
{
if (is_string($pattern) and $pattern[0] === '{') {
$pattern = json_decode($pattern, true);
}
switch ($pattern) {
case $rule:
case '@':
return true;
case 'number':
return is_numeric($rule);
case 'string':
return is_string($rule);
case 'array':
return is_array($rule) && !static::is_logic($rule);
default:
if (static::is_logic($pattern) && static::is_logic($rule)) {
$patternOp = static::get_operator($pattern);
if ($patternOp === '@' || $patternOp === static::get_operator($rule)) {
return static::rule_like(
static::get_values($rule, false),
static::get_values($pattern, false)
);
}
}
return is_array($pattern)
&& is_array($rule)
&& count($pattern) === count($rule)
&& !in_array(false, array_map('static::rule_like', $pattern, $rule));
}
}
/** @deprecated 1.0.0 */
public static function add_operation(string $name, callable $callable): void
{
JsonLogic::operators()->register(
$name,
new CallableOperator($callable)
);
}
}