Skip to content

Commit f9f97db

Browse files
authored
Merge pull request #2 from o-p/op/arithmetic
Add math operators, rename existing comparison operators.
2 parents 1ccb073 + 0b78da6 commit f9f97db

17 files changed

+468
-13
lines changed

src/OperatorManager.php

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ protected function buildins(): array
3737
'missing_some' => null,
3838
// Logic and Boolean Operations
3939
'if' => null,
40-
'==' => Operators\Equals::class,
41-
'===' => Operators\Same::class,
42-
'!=' => Operators\NotEquals::class,
43-
'!==' => Operators\NotSame::class,
40+
'==' => Operators\Equal::class,
41+
'===' => Operators\Identical::class,
42+
'!=' => Operators\NotEqual::class,
43+
'!==' => Operators\NotIdentical::class,
4444
'!' => Operators\Not::class,
4545
'!!' => Operators\Booleanify::class,
4646
'or' => Operators\OrOperator::class,
@@ -52,11 +52,11 @@ protected function buildins(): array
5252
'<=' => Operators\LessThanOrEqual::class,
5353
'max' => null,
5454
'min' => null,
55-
'+' => null,
56-
'-' => null,
57-
'*' => null,
58-
'/' => null,
59-
'%' => null,
55+
'+' => Operators\Plus::class,
56+
'-' => Operators\Minus::class,
57+
'*' => Operators\Multiply::class,
58+
'/' => Operators\Divide::class,
59+
'%' => Operators\Modulo::class,
6060
// Array Operations
6161
'map' => null,
6262
'reduce' => null,

src/Operators/Divide.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
namespace JsonLogic\Operators;
3+
4+
use Closure;
5+
use JsonLogic\Parameters;
6+
7+
/**
8+
* @operator /
9+
*/
10+
class Divide extends Operator
11+
{
12+
protected $alias = '/';
13+
14+
public function params($param): Closure
15+
{
16+
$this->autoValidateParams($param);
17+
$prepared = Parameters::from($param);
18+
19+
return function (&$data) use (&$prepared) {
20+
return $prepared->reduce(function ($a, $b) {
21+
return $a / $b;
22+
}, $data);
23+
};
24+
}
25+
}

src/Operators/Equals.php renamed to src/Operators/Equal.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
/**
88
* @operator ==
99
*/
10-
class Equals extends Operator
10+
class Equal extends Operator
1111
{
1212
protected $alias = '==';
1313
protected $minParamCounts = 2;

src/Operators/Same.php renamed to src/Operators/Identical.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
/**
88
* @operator ===
99
*/
10-
class Same extends Operator
10+
class Identical extends Operator
1111
{
1212
protected $alias = '===';
1313
protected $minParamCounts = 2;

src/Operators/Minus.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
namespace JsonLogic\Operators;
3+
4+
use Closure;
5+
use JsonLogic\Parameters;
6+
7+
/**
8+
* @operator -
9+
*/
10+
class Minus extends Operator
11+
{
12+
protected $alias = '-';
13+
14+
public function params($param): Closure
15+
{
16+
$this->autoValidateParams($param);
17+
$prepared = Parameters::from($param);
18+
19+
return function (&$data) use (&$prepared) {
20+
return $prepared->reduce(function ($a, $b) {
21+
return $a - $b;
22+
}, $data);
23+
};
24+
}
25+
}

src/Operators/Modulo.php

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
namespace JsonLogic\Operators;
3+
4+
use Closure;
5+
use JsonLogic\Parameters;
6+
7+
/**
8+
* @operator %
9+
*/
10+
class Modulo extends Operator
11+
{
12+
protected $alias = '%';
13+
14+
public function params($param): Closure
15+
{
16+
$this->autoValidateParams($param);
17+
$prepared = Parameters::from($param);
18+
19+
return function (&$data) use (&$prepared) {
20+
return $prepared->reduce(function ($a, $b) {
21+
return $a % $b;
22+
}, $data);
23+
};
24+
}
25+
}

src/Operators/Multiply.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
namespace JsonLogic\Operators;
3+
4+
use Closure;
5+
use JsonLogic\Parameters;
6+
7+
/**
8+
* @operator *
9+
*/
10+
class Multiply extends Operator
11+
{
12+
protected $alias = '*';
13+
14+
public function params($param): Closure
15+
{
16+
$this->autoValidateParams($param);
17+
$prepared = Parameters::from($param);
18+
19+
return function (&$data) use (&$prepared) {
20+
return array_product($prepared->values($data));
21+
};
22+
}
23+
}

src/Operators/NotEquals.php renamed to src/Operators/NotEqual.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
/**
88
* @operator !=
99
*/
10-
class NotEquals extends Operator
10+
class NotEqual extends Operator
1111
{
1212
protected $alias = '!=';
1313
protected $minParamCounts = 2;

src/Operators/NotSame.php renamed to src/Operators/NotIdentical.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
/**
88
* @operator !==
99
*/
10-
class NotSame extends Operator
10+
class NotIdentical extends Operator
1111
{
1212
protected $alias = '!==';
1313
protected $minParamCounts = 2;

src/Operators/Plus.php

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<?php
2+
namespace JsonLogic\Operators;
3+
4+
use Closure;
5+
use JsonLogic\Parameters;
6+
7+
/**
8+
* @operator +
9+
*/
10+
class Plus extends Operator
11+
{
12+
protected $alias = '+';
13+
14+
public function params($param): Closure
15+
{
16+
$this->autoValidateParams($param);
17+
$prepared = Parameters::from($param);
18+
19+
return function (&$data) use (&$prepared) {
20+
return array_sum($prepared->values($data));
21+
};
22+
}
23+
}

0 commit comments

Comments
 (0)