diff --git a/src/ConditionalBuilder.php b/src/ConditionalBuilder.php index 147d5e7..59b4a60 100644 --- a/src/ConditionalBuilder.php +++ b/src/ConditionalBuilder.php @@ -18,9 +18,9 @@ class ConditionalBuilder extends ParentDelegationBuilder * Creates the first rule. Additional rules can be chained use `or` and `and` * @param string $name * @param string $operator - * @param string $value + * @param string|null $value */ - public function __construct($name, $operator, $value) + public function __construct($name, $operator, $value = null) { $this->and($name, $operator, $value); } @@ -38,10 +38,10 @@ public function build() * Creates an AND condition * @param string $name * @param string $operator - * @param string $value + * @param string|null $value * @return $this */ - public function andCondition($name, $operator, $value) + public function andCondition($name, $operator, $value = null) { $orCondition = $this->popOrCondition(); $orCondition[] = $this->createCondition($name, $operator, $value); @@ -54,10 +54,10 @@ public function andCondition($name, $operator, $value) * Creates an OR condition * @param string $name * @param string $operator - * @param string $value + * @param string|null $value * @return $this */ - public function orCondition($name, $operator, $value) + public function orCondition($name, $operator, $value = null) { $condition = $this->createCondition($name, $operator, $value); $this->pushOrCondition([$condition]); @@ -69,16 +69,16 @@ public function orCondition($name, $operator, $value) * Creates a condition * @param string $name * @param string $operator - * @param string $value + * @param string|null $value * @return array */ - protected function createCondition($name, $operator, $value) + protected function createCondition($name, $operator, $value = null) { - return [ + return array_filter([ 'field' => $name, 'operator' => $operator, 'value' => $value, - ]; + ], fn($value) => $value !== null); } /** diff --git a/src/LocationBuilder.php b/src/LocationBuilder.php index b58659d..4d2d626 100644 --- a/src/LocationBuilder.php +++ b/src/LocationBuilder.php @@ -14,8 +14,12 @@ class LocationBuilder extends ConditionalBuilder * @param string $value * @return array */ - protected function createCondition($name, $operator, $value) + protected function createCondition($name, $operator, $value = '') { + if ($value === '') { + throw new \InvalidArgumentException('Value is required for location conditions'); + } + return [ 'param' => $name, 'operator' => $operator, diff --git a/tests/ConditionalBuilderTest.php b/tests/ConditionalBuilderTest.php index 39c217c..4c328d2 100644 --- a/tests/ConditionalBuilderTest.php +++ b/tests/ConditionalBuilderTest.php @@ -9,7 +9,7 @@ class ConditionalBuilderTest extends TestCase { use ArraySubsetAsserts; - + public function testContionalLogic() { $builder = new ConditionalBuilder('color', '==', 'other'); @@ -27,6 +27,22 @@ public function testContionalLogic() $this->assertArraySubset($expectedConfig, $builder->build()); } + public function testContionalLogicOperatorOnly() + { + $builder = new ConditionalBuilder('color', '!=empty'); + + $expectedConfig = [ + [ + [ + 'field' => 'color', + 'operator' => '!=empty', + ], + ] + ]; + + $this->assertSame($expectedConfig, $builder->build()); + } + public function testAnd() { $builder = new ConditionalBuilder('color', '==', 'other'); @@ -86,4 +102,4 @@ public function testOr() $this->assertArraySubset($expectedConfig, $builder->build()); } -} \ No newline at end of file +}