Skip to content

Repository files navigation

PHP Specification

Scrutinizer Code QualityCode CoverageBuild Status

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

<?phpuseTanigami\Specification\Specification;
useTanigami\Specification\OneOfSpecification;
class Order
{
publicfunctionisPaid()
{
returntrue;
}
publicfunctionisShipped()
{
returnfalse;
}
publicfunctionisCancelled()
{
returnfalse;
}
}
class UnshippedOrderSpecification extends Specification
{
publicfunctionisSatisfiedBy($order): bool
{
return !$order->isShipped();
}
}
class PaidOrderSpecification extends Specification
{
publicfunctionisSatisfiedBy($order): bool
{
return$order->isPaid();
}
}
class CancelledOrderSpecification extends Specification
{
publicfunctionisSatisfiedBy($order): bool
{
return$order->isCancelled();
}
}
$paid = newPaidOrderSpecification;
$unshipped = newUnshippedOrderSpecification;
$cancelled = newCancelledOrderSpecification;
$paid->and($unshipped)->isSatisfiedBy(newOrder); // => true
(newOneOfSpecification($paid, $unshipped, $cancelled))->isSatisfiedBy(newOrder); // => true

About

Basic classes for Specification pattern in PHP.

Topics

Resources

Stars

32 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages