tanigami / specification
Basic classes for Specification pattern in PHP.
Installs: 25 241
Dependents: 1
Suggesters: 0
Security: 0
Stars: 30
Watchers: 2
Forks: 5
Open Issues: 0
Requires
- php: >=7.0
Requires (Dev)
- phpunit/phpunit: ^6.4
- squizlabs/php_codesniffer: ^3.1
README
Basic classes for Specification pattern in PHP. On top of the typical set of and
, or
and not
specificaitons, anyOf
, oneOf
, noneOf
specifications are proposed.
This package is based on the implementation in carlosbuenosvinos/ddd.
Installation
$ composer require tanigami/specification
Usage example
<?php use Tanigami\Specification\Specification; use Tanigami\Specification\OneOfSpecification; class Order { public function isPaid() { return true; } public function isShipped() { return false; } public function isCancelled() { return false; } } class UnshippedOrderSpecification extends Specification { public function isSatisfiedBy($order): bool { return !$order->isShipped(); } } class PaidOrderSpecification extends Specification { public function isSatisfiedBy($order): bool { return $order->isPaid(); } } class CancelledOrderSpecification extends Specification { public function isSatisfiedBy($order): bool { return $order->isCancelled(); } } $paid = new PaidOrderSpecification; $unshipped = new UnshippedOrderSpecification; $cancelled = new CancelledOrderSpecification; $paid->and($unshipped)->isSatisfiedBy(new Order); // => true (new OneOfSpecification($paid, $unshipped, $cancelled))->isSatisfiedBy(new Order); // => true