PHP Specification pattern
![Software License][ico-license]
![Coverage Status][ico-scrutinizer]
![Total Downloads][ico-downloads], (*1)
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)., (*2)
This package includes the typical set of and(), or() and not() specifications as well as specifications for allOf(), anyOf() and noneOf()., (*3)
Install
Via Composer, (*4)
``` bash
$ composer require anfischer/specification, (*5)
## Usage
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:
``` php
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);
Change log
Please see CHANGELOG for more information on what has changed recently., (*6)
Testing
bash
$ composer test
, (*7)
Contributing
Please see CONTRIBUTING and CODE_OF_CONDUCT for details., (*8)
Security
If you discover any security related issues, please email kontakt@season.dk instead of using the issue tracker., (*9)
Credits
License
The MIT License (MIT). Please see License File for more information., (*10)