Skip to content

Feature/Add support for PHP 8.4 and typing hint enhancement. #26

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,7 @@
/phpunit.xml export-ignore
/tests export-ignore
/README.md export-ignore
sonar-project.properties export-ignore
/sonar-project.properties export-ignore
/phpstan.neon export-ignore
test.xml export-ignore
/wiki export-ignore
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ jobs:

strategy:
matrix:
php-version: [ '8.2', '8.3' ]
php-version: [ '8.2', '8.3', '8.4']

steps:
- name: Checkout source code
Expand Down
8 changes: 2 additions & 6 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"mockery/mockery": "^1.6.0",
"pestphp/pest": "^2.0",
"pestphp/pest-plugin-faker": "^2.0",
"phpstan/phpstan": "^1.0",
"phpstan/phpstan": "^1.12",
"phpstan/extension-installer": "^1.3",
"phpstan/phpstan-mockery": "^1.1"
},
Expand All @@ -36,11 +36,7 @@
"scripts": {
"test": "vendor/bin/pest --configuration=phpunit.xml --coverage-clover=coverage.xml --log-junit=test.xml",
"test-cov": "vendor/bin/pest --configuration=phpunit.xml --coverage-html=coverage",
"analyse": "vendor/bin/phpstan analyse src tests --no-progress --level=8",
"check": [
"@analyse",
"@test"
]
"analyse": "vendor/bin/phpstan analyse --no-progress"
},
"config": {
"allow-plugins": {
Expand Down
5 changes: 5 additions & 0 deletions phpstan.neon
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
parameters:
paths:
- src/
- tests/
level: 9
2 changes: 1 addition & 1 deletion src/Criteria.php
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,7 @@ public function withPageOffset(int $offset): self
);
}

public function withPageNumber(int $number, int $size = null): self
public function withPageNumber(int $number, ?int $size = null): self
{
return self::create(
groups: $this->groups,
Expand Down
10 changes: 7 additions & 3 deletions src/Errors/CriteriaError.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,8 +28,12 @@ class CriteriaError extends Error
* @param Throwable|null $previous
* @param array<string> $violations
*/
public function __construct(string $message = "", int $code = 0, Throwable $previous = null, array $violations = [])
{
public function __construct(
string $message = "",
int $code = 0,
?Throwable $previous = null,
array $violations = []
) {
parent::__construct($message, $code, $previous);

$this->violations = $violations;
Expand All @@ -42,7 +46,7 @@ public function __construct(string $message = "", int $code = 0, Throwable $prev
* @param Throwable|null $previous
* @return self
*/
public static function create(string $message, array $violations, int $code = 0, Throwable $previous = null): self
public static function create(string $message, array $violations, int $code = 0, ?Throwable $previous = null): self
{
return new self($message, $code, $previous, $violations);
}
Expand Down
96 changes: 78 additions & 18 deletions src/Filter.php
Original file line number Diff line number Diff line change
Expand Up @@ -22,12 +22,12 @@ final class Filter implements ValueObject
*
* @param string $field
* @param Operator $operator
* @param mixed $value
* @param scalar|null|array<scalar> $value
*/
public function __construct(
private readonly string $field,
private readonly Operator $operator,
private readonly mixed $value,
private readonly bool|float|int|string|null|array $value,
) {
$this->check();
}
Expand All @@ -37,10 +37,10 @@ public function __construct(
*
* @param string $field
* @param Operator $operator
* @param mixed $value
* @param scalar|null|array<scalar> $value
* @return Filter
*/
public static function create(string $field, Operator $operator, mixed $value): self
public static function create(string $field, Operator $operator, bool|float|int|string|null|array $value): self
{
return new self($field, $operator, $value);
}
Expand All @@ -67,62 +67,122 @@ public static function fromArray(array $filter): self
);
}

public static function equal(string $field, mixed $value): self
/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public static function equal(string $field, bool|float|int|string|null $value): self
{
return self::create($field, Operator::EQUAL, $value);
}

public static function notEqual(string $field, mixed $value): self
/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public static function notEqual(string $field, bool|float|int|string|null $value): self
{
return self::create($field, Operator::NOT_EQUAL, $value);
}

public static function greaterThan(string $field, mixed $value): self
/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public static function greaterThan(string $field, bool|float|int|string|null $value): self
{
return self::create($field, Operator::GT, $value);
}

public static function greaterOrEqualThan(string $field, mixed $value): self
/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public static function greaterOrEqualThan(string $field, bool|float|int|string|null $value): self
{
return self::create($field, Operator::GTE, $value);
}

public static function lessThan(string $field, mixed $value): self
/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public static function lessThan(string $field, bool|float|int|string|null $value): self
{
return self::create($field, Operator::LT, $value);
}

public static function lessOrEqualThan(string $field, mixed $value): self
/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public static function lessOrEqualThan(string $field, bool|float|int|string|null $value): self
{
return self::create($field, Operator::LTE, $value);
}

public static function in(string $field, mixed $value): self
/**
* @param string $field
* @param array<scalar> $value
* @return self
*/
public static function in(string $field, array $value): self
{
return self::create($field, Operator::IN, $value);
}

public static function notIn(string $field, mixed $value): self
/**
* @param string $field
* @param array<scalar> $value
* @return self
*/
public static function notIn(string $field, array $value): self
{
return self::create($field, Operator::NOT_IN, $value);
}

public static function like(string $field, mixed $value): self
/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public static function like(string $field, bool|float|int|string|null $value): self
{
return self::create($field, Operator::LIKE, $value);
}

public static function notLike(string $field, mixed $value): self
/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public static function notLike(string $field, bool|float|int|string|null $value): self
{
return self::create($field, Operator::NOT_LIKE, $value);
}

public static function contains(string $field, mixed $value): self
/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public static function contains(string $field, bool|float|int|string|null $value): self
{
return self::create($field, Operator::CONTAINS, $value);
}

public static function notContains(string $field, mixed $value): self
/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public static function notContains(string $field, bool|float|int|string|null $value): self
{
return self::create($field, Operator::NOT_CONTAINS, $value);
}
Expand Down Expand Up @@ -150,9 +210,9 @@ public function operator(): Operator
/**
* Return the field value.
*
* @return mixed
* @return scalar|null|array<scalar>
*/
public function value(): mixed
public function value(): bool|float|int|string|null|array
{
return $this->value;
}
Expand Down
50 changes: 50 additions & 0 deletions src/FilterGroup.php
Original file line number Diff line number Diff line change
Expand Up @@ -69,31 +69,61 @@ public function addFilter(Filter $new): self
return $this;
}

/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public function addFilterEqual(string $field, mixed $value): self
{
return $this->addFilter(Filter::equal($field, $value));
}

/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public function addFilterNotEqual(string $field, mixed $value): self
{
return $this->addFilter(Filter::notEqual($field, $value));
}

/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public function addFilterGreaterThan(string $field, mixed $value): self
{
return $this->addFilter(Filter::greaterThan($field, $value));
}

/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public function addFilterGreaterOrEqualThan(string $field, mixed $value): self
{
return $this->addFilter(Filter::greaterOrEqualThan($field, $value));
}

/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public function addFilterLessThan(string $field, mixed $value): self
{
return $this->addFilter(Filter::lessThan($field, $value));
}

/**
* @param string $field
* @param bool|float|int|string|null $value
* @return self
*/
public function addFilterLessOrEqualThan(string $field, mixed $value): self
{
return $this->addFilter(Filter::lessOrEqualThan($field, $value));
Expand All @@ -119,21 +149,41 @@ public function addFilterNotIn(string $field, array $value): self
return $this->addFilter(Filter::notIn($field, $value));
}

/**
* @param string $field
* @param string $value
* @return self
*/
public function addFilterLike(string $field, string $value): self
{
return $this->addFilter(Filter::like($field, $value));
}

/**
* @param string $field
* @param string $value
* @return self
*/
public function addFilterNotLike(string $field, string $value): self
{
return $this->addFilter(Filter::notLike($field, $value));
}

/**
* @param string $field
* @param string $value
* @return self
*/
public function addFilterContains(string $field, string $value): self
{
return $this->addFilter(Filter::contains($field, $value));
}

/**
* @param string $field
* @param string $value
* @return self
*/
public function addFilterNotContains(string $field, string $value): self
{
return $this->addFilter(Filter::notContains($field, $value));
Expand Down
Loading