Skip to content

A package containing base classes to be used as a starting ground for implementing the Specification pattern in PHP.

License

Notifications You must be signed in to change notification settings

anfischer/specification

Repository files navigation

PHP Specification pattern

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

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().

Install

Via Composer

$ composer require anfischer/specification

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:

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.

Testing

$ composer test

Contributing

Please see CONTRIBUTING and CODE_OF_CONDUCT for details.

Security

If you discover any security related issues, please email [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

About

A package containing base classes to be used as a starting ground for implementing the Specification pattern in PHP.

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages