Larium Specification

An implementation of the specification pattern.


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