schemator-php
90 строк · 2.3 Кб
1<?php
2
3declare(strict_types=1);
4
5namespace Smoren\Schemator\Helpers;
6
7/**
8* @internal
9*/
10class RuleHelper
11{
12/**
13* Checks rule for value.
14*
15* @param mixed $value value to check
16* @param string $rule rule for checking
17* @param array<mixed> $args arguments for rule
18*
19* @return bool
20*/
21public static function evaluate($value, string $rule, array $args): bool
22{
23switch ($rule) {
24case '=':
25/**
26* @var scalar $lhs
27* @var scalar $rhs
28*/
29[$lhs, $rhs] = [$value, $args[0]];
30if (strval($lhs) === strval($rhs)) {
31return true;
32}
33break;
34case '!=':
35/**
36* @var scalar $lhs
37* @var scalar $rhs
38*/
39[$lhs, $rhs] = [$value, $args[0]];
40if (strval($lhs) !== strval($rhs)) {
41return true;
42}
43break;
44case '>':
45if ($value > $args[0]) {
46return true;
47}
48break;
49case '>=':
50if ($value >= $args[0]) {
51return true;
52}
53break;
54case '<':
55if ($value < $args[0]) {
56return true;
57}
58break;
59case '<=':
60if ($value <= $args[0]) {
61return true;
62}
63break;
64case 'between':
65if ($value >= $args[0] && $value <= $args[1]) {
66return true;
67}
68break;
69case 'between strict':
70if ($value > $args[0] && $value < $args[1]) {
71return true;
72}
73break;
74case 'in':
75/** @var array{array<mixed>} $args */
76if (in_array($value, $args[0])) {
77return true;
78}
79break;
80case 'not in':
81/** @var array{array<mixed>} $args */
82if (!in_array($value, $args[0])) {
83return true;
84}
85break;
86}
87
88return false;
89}
90}
91