diff --git a/CHANGELOG.md b/CHANGELOG.md index 1406806..3fa69b0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -56,6 +56,7 @@ - Chg #224: Change `$iterableFilterHandlers` to context object in `IterableFilterHandlerInterface::match()` (@vjik) - New #224: Add filtering by nested values support in `IterableDataReader` (@vjik) - Chg #225: Rename classes: `All` to `AndX`, `Any` to `OrX`. Remove `Group` class (@vjik) +- Chg #226: Refactor filter classes to use readonly properties instead of getters (@vjik) ## 1.0.1 January 25, 2023 diff --git a/src/Reader/Filter/Between.php b/src/Reader/Filter/Between.php index 79fa2aa..dad52c3 100644 --- a/src/Reader/Filter/Between.php +++ b/src/Reader/Filter/Between.php @@ -19,24 +19,9 @@ final class Between implements FilterInterface * @param bool|DateTimeInterface|float|int|string $maxValue Maximal field value. */ public function __construct( - private readonly string $field, - private readonly bool|DateTimeInterface|float|int|string $minValue, - private readonly bool|DateTimeInterface|float|int|string $maxValue + public readonly string $field, + public readonly bool|DateTimeInterface|float|int|string $minValue, + public readonly bool|DateTimeInterface|float|int|string $maxValue ) { } - - public function getField(): string - { - return $this->field; - } - - public function getMinValue(): float|DateTimeInterface|bool|int|string - { - return $this->minValue; - } - - public function getMaxValue(): float|DateTimeInterface|bool|int|string - { - return $this->maxValue; - } } diff --git a/src/Reader/Filter/Compare.php b/src/Reader/Filter/Compare.php index 546da99..87d8551 100644 --- a/src/Reader/Filter/Compare.php +++ b/src/Reader/Filter/Compare.php @@ -16,29 +16,17 @@ abstract class Compare implements FilterInterface * @param string $field Name of the field to compare. * @param bool|DateTimeInterface|float|int|string $value Value to compare to. */ - public function __construct( - private readonly string $field, - private bool|DateTimeInterface|float|int|string $value, + final public function __construct( + public readonly string $field, + public readonly bool|DateTimeInterface|float|int|string $value, ) { } - public function getField(): string - { - return $this->field; - } - - public function getValue(): float|DateTimeInterface|bool|int|string - { - return $this->value; - } - /** * @param bool|DateTimeInterface|float|int|string $value Value to compare to. */ final public function withValue(bool|DateTimeInterface|float|int|string $value): static { - $new = clone $this; - $new->value = $value; - return $new; + return new static($this->field, $value); } } diff --git a/src/Reader/Filter/EqualsNull.php b/src/Reader/Filter/EqualsNull.php index 9a48c4c..0b50edb 100644 --- a/src/Reader/Filter/EqualsNull.php +++ b/src/Reader/Filter/EqualsNull.php @@ -15,12 +15,7 @@ final class EqualsNull implements FilterInterface * @param string $field Name of the field to check. */ public function __construct( - private readonly string $field, + public readonly string $field, ) { } - - public function getField(): string - { - return $this->field; - } } diff --git a/src/Reader/Filter/In.php b/src/Reader/Filter/In.php index 76c0d43..fb818ae 100644 --- a/src/Reader/Filter/In.php +++ b/src/Reader/Filter/In.php @@ -15,21 +15,21 @@ */ final class In implements FilterInterface { - /** - * @var bool[]|float[]|int[]|string[] Values to check against. - */ - private array $values; - /** * @param string $field Name of the field to compare. * @param bool[]|float[]|int[]|string[] $values Values to check against. */ public function __construct( - private readonly string $field, - array $values + public readonly string $field, + /** @var bool[]|float[]|int[]|string[] Values to check against. */ + public readonly array $values ) { + $this->assertValues($values); + } + + private function assertValues(array $values): void + { foreach ($values as $value) { - /** @psalm-suppress DocblockTypeContradiction */ if (!is_scalar($value)) { throw new InvalidArgumentException( sprintf( @@ -39,19 +39,5 @@ public function __construct( ); } } - $this->values = $values; - } - - public function getField(): string - { - return $this->field; - } - - /** - * @return bool[]|float[]|int[]|string[] - */ - public function getValues(): array - { - return $this->values; } } diff --git a/src/Reader/Filter/Like.php b/src/Reader/Filter/Like.php index 762dc17..8180bea 100644 --- a/src/Reader/Filter/Like.php +++ b/src/Reader/Filter/Like.php @@ -21,24 +21,9 @@ final class Like implements FilterInterface * - `false` - case-insensitive. */ public function __construct( - private readonly string $field, - private readonly string $value, - private readonly ?bool $caseSensitive = null, + public readonly string $field, + public readonly string $value, + public readonly ?bool $caseSensitive = null, ) { } - - public function getField(): string - { - return $this->field; - } - - public function getValue(): string - { - return $this->value; - } - - public function getCaseSensitive(): ?bool - { - return $this->caseSensitive; - } } diff --git a/src/Reader/Filter/Not.php b/src/Reader/Filter/Not.php index a7de17b..a31c8e2 100644 --- a/src/Reader/Filter/Not.php +++ b/src/Reader/Filter/Not.php @@ -15,12 +15,7 @@ final class Not implements FilterInterface * @param FilterInterface $filter Filter to negate. */ public function __construct( - private readonly FilterInterface $filter, + public readonly FilterInterface $filter, ) { } - - public function getFilter(): FilterInterface - { - return $this->filter; - } } diff --git a/src/Reader/Iterable/FilterHandler/BetweenHandler.php b/src/Reader/Iterable/FilterHandler/BetweenHandler.php index 8f57271..ec4721e 100644 --- a/src/Reader/Iterable/FilterHandler/BetweenHandler.php +++ b/src/Reader/Iterable/FilterHandler/BetweenHandler.php @@ -25,9 +25,9 @@ public function match(object|array $item, FilterInterface $filter, Context $cont { /** @var Between $filter */ - $value = $context->readValue($item, $filter->getField()); - $min = $filter->getMinValue(); - $max = $filter->getMaxValue(); + $value = $context->readValue($item, $filter->field); + $min = $filter->minValue; + $max = $filter->maxValue; if (!$value instanceof DateTimeInterface) { return $value >= $min && $value <= $max; diff --git a/src/Reader/Iterable/FilterHandler/EqualsHandler.php b/src/Reader/Iterable/FilterHandler/EqualsHandler.php index efe6896..bc6539c 100644 --- a/src/Reader/Iterable/FilterHandler/EqualsHandler.php +++ b/src/Reader/Iterable/FilterHandler/EqualsHandler.php @@ -24,8 +24,8 @@ public function match(object|array $item, FilterInterface $filter, Context $cont { /** @var Equals $filter */ - $itemValue = $context->readValue($item, $filter->getField()); - $argumentValue = $filter->getValue(); + $itemValue = $context->readValue($item, $filter->field); + $argumentValue = $filter->value; if (!$itemValue instanceof DateTimeInterface) { return $itemValue == $argumentValue; diff --git a/src/Reader/Iterable/FilterHandler/EqualsNullHandler.php b/src/Reader/Iterable/FilterHandler/EqualsNullHandler.php index 90c8457..6eae9ad 100644 --- a/src/Reader/Iterable/FilterHandler/EqualsNullHandler.php +++ b/src/Reader/Iterable/FilterHandler/EqualsNullHandler.php @@ -23,6 +23,6 @@ public function match(object|array $item, FilterInterface $filter, Context $cont { /** @var EqualsNull $filter */ - return $context->readValue($item, $filter->getField()) === null; + return $context->readValue($item, $filter->field) === null; } } diff --git a/src/Reader/Iterable/FilterHandler/GreaterThanHandler.php b/src/Reader/Iterable/FilterHandler/GreaterThanHandler.php index cc185b5..8032f4f 100644 --- a/src/Reader/Iterable/FilterHandler/GreaterThanHandler.php +++ b/src/Reader/Iterable/FilterHandler/GreaterThanHandler.php @@ -24,8 +24,8 @@ public function match(object|array $item, FilterInterface $filter, Context $cont { /** @var GreaterThan $filter */ - $itemValue = $context->readValue($item, $filter->getField()); - $argumentValue = $filter->getValue(); + $itemValue = $context->readValue($item, $filter->field); + $argumentValue = $filter->value; if (!$itemValue instanceof DateTimeInterface) { return $itemValue > $argumentValue; diff --git a/src/Reader/Iterable/FilterHandler/GreaterThanOrEqualHandler.php b/src/Reader/Iterable/FilterHandler/GreaterThanOrEqualHandler.php index c39ac51..8065cce 100644 --- a/src/Reader/Iterable/FilterHandler/GreaterThanOrEqualHandler.php +++ b/src/Reader/Iterable/FilterHandler/GreaterThanOrEqualHandler.php @@ -25,8 +25,8 @@ public function match(object|array $item, FilterInterface $filter, Context $cont { /** @var GreaterThanOrEqual $filter */ - $itemValue = $context->readValue($item, $filter->getField()); - $argumentValue = $filter->getValue(); + $itemValue = $context->readValue($item, $filter->field); + $argumentValue = $filter->value; if (!$itemValue instanceof DateTimeInterface) { return $itemValue >= $argumentValue; diff --git a/src/Reader/Iterable/FilterHandler/InHandler.php b/src/Reader/Iterable/FilterHandler/InHandler.php index 4d4a67f..fe12f17 100644 --- a/src/Reader/Iterable/FilterHandler/InHandler.php +++ b/src/Reader/Iterable/FilterHandler/InHandler.php @@ -25,8 +25,8 @@ public function match(object|array $item, FilterInterface $filter, Context $cont { /** @var In $filter */ - $itemValue = $context->readValue($item, $filter->getField()); - $argumentValue = $filter->getValues(); + $itemValue = $context->readValue($item, $filter->field); + $argumentValue = $filter->values; return in_array($itemValue, $argumentValue); } diff --git a/src/Reader/Iterable/FilterHandler/LessThanHandler.php b/src/Reader/Iterable/FilterHandler/LessThanHandler.php index 011a2d2..4ef0f34 100644 --- a/src/Reader/Iterable/FilterHandler/LessThanHandler.php +++ b/src/Reader/Iterable/FilterHandler/LessThanHandler.php @@ -24,8 +24,8 @@ public function match(object|array $item, FilterInterface $filter, Context $cont { /** @var LessThan $filter */ - $itemValue = $context->readValue($item, $filter->getField()); - $argumentValue = $filter->getValue(); + $itemValue = $context->readValue($item, $filter->field); + $argumentValue = $filter->value; if (!$itemValue instanceof DateTimeInterface) { return $itemValue < $argumentValue; diff --git a/src/Reader/Iterable/FilterHandler/LessThanOrEqualHandler.php b/src/Reader/Iterable/FilterHandler/LessThanOrEqualHandler.php index 5ddd9f6..f6c0120 100644 --- a/src/Reader/Iterable/FilterHandler/LessThanOrEqualHandler.php +++ b/src/Reader/Iterable/FilterHandler/LessThanOrEqualHandler.php @@ -25,8 +25,8 @@ public function match(object|array $item, FilterInterface $filter, Context $cont { /** @var LessThanOrEqual $filter */ - $itemValue = $context->readValue($item, $filter->getField()); - $argumentValue = $filter->getValue(); + $itemValue = $context->readValue($item, $filter->field); + $argumentValue = $filter->value; if (!$itemValue instanceof DateTimeInterface) { return $itemValue <= $argumentValue; diff --git a/src/Reader/Iterable/FilterHandler/LikeHandler.php b/src/Reader/Iterable/FilterHandler/LikeHandler.php index d0f0d02..4616863 100644 --- a/src/Reader/Iterable/FilterHandler/LikeHandler.php +++ b/src/Reader/Iterable/FilterHandler/LikeHandler.php @@ -25,13 +25,13 @@ public function match(object|array $item, FilterInterface $filter, Context $cont { /** @var Like $filter */ - $itemValue = $context->readValue($item, $filter->getField()); + $itemValue = $context->readValue($item, $filter->field); if (!is_string($itemValue)) { return false; } - return $filter->getCaseSensitive() === true - ? str_contains($itemValue, $filter->getValue()) - : mb_stripos($itemValue, $filter->getValue()) !== false; + return $filter->caseSensitive === true + ? str_contains($itemValue, $filter->value) + : mb_stripos($itemValue, $filter->value) !== false; } } diff --git a/src/Reader/Iterable/FilterHandler/NotHandler.php b/src/Reader/Iterable/FilterHandler/NotHandler.php index a65b7f7..abfebab 100644 --- a/src/Reader/Iterable/FilterHandler/NotHandler.php +++ b/src/Reader/Iterable/FilterHandler/NotHandler.php @@ -23,7 +23,7 @@ public function match(object|array $item, FilterInterface $filter, Context $cont { /** @var Not $filter */ - $subFilter = $filter->getFilter(); + $subFilter = $filter->filter; $filterHandler = $context->getFilterHandler($subFilter::class); return !$filterHandler->match($item, $subFilter, $context); diff --git a/tests/Reader/Filter/CompareTest.php b/tests/Reader/Filter/CompareTest.php index ac5915a..385f0eb 100644 --- a/tests/Reader/Filter/CompareTest.php +++ b/tests/Reader/Filter/CompareTest.php @@ -7,13 +7,19 @@ use PHPUnit\Framework\TestCase; use Yiisoft\Data\Reader\Filter\LessThan; +use function PHPUnit\Framework\assertNotSame; +use function PHPUnit\Framework\assertSame; + final class CompareTest extends TestCase { - public function testWithValue() + public function testWithValue(): void { - $filter = new LessThan('field', 1); + $sourceFilter = new LessThan('field', 1); + + $filter = $sourceFilter->withValue(2); - $this->assertNotSame($filter, $filter->withValue(1)); - $this->assertSame(2, $filter->withValue(2)->getValue()); + assertNotSame($sourceFilter, $filter); + assertSame('field', $filter->field); + assertSame(2, $filter->value); } } diff --git a/tests/Reader/Filter/LikeTest.php b/tests/Reader/Filter/LikeTest.php deleted file mode 100644 index 5afbcb9..0000000 --- a/tests/Reader/Filter/LikeTest.php +++ /dev/null @@ -1,29 +0,0 @@ -assertSame('name', $like->getField()); - $this->assertSame('Kesha', $like->getValue()); - $this->assertNull($like->getCaseSensitive()); - } - - public function testWithCaseSensitive(): void - { - $like = new Like('name', 'Kesha', true); - - $this->assertSame('name', $like->getField()); - $this->assertSame('Kesha', $like->getValue()); - $this->assertTrue($like->getCaseSensitive()); - } -} diff --git a/tests/Reader/Iterable/IterableDataReaderTest.php b/tests/Reader/Iterable/IterableDataReaderTest.php index 06c49bc..fd81608 100644 --- a/tests/Reader/Iterable/IterableDataReaderTest.php +++ b/tests/Reader/Iterable/IterableDataReaderTest.php @@ -431,7 +431,7 @@ public function match( Context $context, ): bool { /** @var Equals $filter */ - return $item[$filter->getField()] === 2; + return $item[$filter->field] === 2; } } );