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.
The library uses the incredible expression-language component from Symfony to provide the DSL for expressions.
$ composer require danfekete/spec
$d = [2];
$spec = new Specification(new ExpressionSpec('1 > d[0]'));
$spec->isSatisfiedBy(['d' => $d]); // return false
/*
* 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
- Cache parsed code permanently
Array builder, builds specification from arraysJSON builder
MIT, see LICENSE