Introduction
The central idea of Specification is to separate the statement of how to match a candidate, from the candidate object that it is matched against.
Larium Specification supports:
- CompositeSpecification, its Logic Expressions and lower bounds, upper bounds and exact values comparison. (GreaterThan, GreaterThanOrEqual, LessThan, LessThanOrEqual, Equal)
- HardCodedSpecification
- Subsumption (In Beta)
- Partially Fulfilled Specifications
Installation
You can install Larium Specification using Composer dependency manager.
Command line
$ composer require "larium/specification":"@stable"
composer.json file
Add Larium Specification package inside require tag in your composer.json file.{
"require": {
"larium/specification": "@stable"
}
}
Usage
HardCodedSpecification
HardCodedSpecification allow the coding of the selection criteria into the isSatisfiedBy method as a lambda function.
<?php
declare(strict_types = 1);
use Larium\Specification\Candidate;
use Larium\Specification\HardCodedSpecification;
$candidate = new Candidate(['source' => 'transaction']);
$spec = new HardCodedSpecification(function (Candidate $candidate) {
return $candidate->get('source') === 'transaction';
});
$spec->isSatisfiedBy($candidate); # true
CompositeSpecification
<?php
declare(strict_types = 1);
use Larium\Specification\Candidate;
use Larium\Specification\HardCodedSpecification;
use Larium\Specification\CompositeSpecification;
$heightSpec = new HardCodedSpecification(function (Candidate $candidate) {
return intval($candidate->get('height')) > 5;
});
$widthSpec = new HardCodedSpecification(function (Candidate $candidate) {
return intval($candidate->get('width')) >= 5;
});
$spec = new CompositeSpecification($heightSpec, $widthSpec);
$candidate = new Candidate(['height' => 6, 'width' => 9]);
$spec->isSatisfiedBy($candidate); # true