An implementation of the Specification pattern for Php7
Install using composer:
composer require stratadox/specification
// The business logic
$allBoxes = CollectionOfBoxes::containing(
Box::ofWeight(1),
Box::ofWeight(2),
Box::ofWeight(3),
Box::ofWeight(5),
Box::ofWeight(12),
Box::ofWeight(26)
);
$weighBetween2and10 = AreHeavier::than(2)->and(AreLighter::than(10));
$this->assertEquals(
CollectionOfBoxes::containing(
Box::ofWeight(3),
Box::ofWeight(5),
Box::ofWeight(26)
),
$allBoxes->that($weighBetween2and10->or(AreHeavier::than(20)))
);