Skip to content

danfekete/Spec

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

21 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Spec

Build Status

Spec is a PHP implementation of the Specification pattern which can be used for building simple or complex business rules.

In computer programming, the specification pattern is a particular software design pattern, whereby business rules can be recombined by chaining the business rules together using boolean logic. The pattern is frequently used in the context of domain-driven design.

https://en.wikipedia.org/wiki/Specification_pattern

The library uses the incredible expression-language component from Symfony to provide the DSL for expressions.

Installation

$ composer require danfekete/spec

Usage

1. Simple expression

$d = [2];
$spec = new Specification(new ExpressionSpec('1 > d[0]'));
$spec->isSatisfiedBy(['d' => $d]); // return false

2. Boolean chaining

/*
 * You can use classes in expression code
*/
class Nan {

    public function isNan($value)
    {
        return is_nan($value);
    }

}

$spec = new Specification(new AndSpec(
    new NotSpec(new ExpressionSpec('checker.isNan(d)')),
    new OrSpec(
        new ExpressionSpec('d != 12'),
        new ExpressionSpec('d > 10')
    ),
    new AndSpec(
        new ExpressionSpec('d > 5'),
        new ExpressionSpec('d < 20')
    )
));

$spec->isSatisfiedBy(['d' => 17, 'checker' => new Nan()]); // return true

TODO

  1. Cache parsed code permanently
  2. Array builder, builds specification from arrays
  3. JSON builder

License

MIT, see LICENSE

About

Simple specification pattern implementation

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages