A package containing base classes to be used as a starting ground for implementation of the Specification pattern in PHP (for more information see https://martinfowler.com/apsupp/spec.pdf).
This package includes the typical set of and(), or() and not() specifications as well as specifications for allOf(), anyOf() and noneOf().
Via Composer
$ composer require anfischer/specification
General usage of this package can be inferred from its test cases.
However a very basic and simplified example of usage with a single specification to (not) satisfy might look like this:
use Anfischer\Specification\Specification;
class Invoice
{
public function isOverdue()
{
/* Logic snip */
return true;
}
}
class OverdueInvoiceSpecification extends Specification
{
public function isSatisfiedBy($invoice): bool
{
return $invoice->isOverdue();
}
}
$overdue = new OverdueInvoiceSpecification;
// Will return true
$overdue->isSatisfiedBy(new Invoice);
// Will return false
$overdue->not()->isSatisfiedBy(new Invoice);
Please see CHANGELOG for more information on what has changed recently.
$ composer test
Please see CONTRIBUTING and CODE_OF_CONDUCT for details.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.