lukaszmakuch / lmcondition
Condition library
Requires
Requires (Dev)
- phpdocumentor/phpdocumentor: 2.*
- phpunit/phpunit: 4.7.*
This package is not auto-updated.
Last update: 2025-01-08 12:02:35 UTC
README
This library allows to build complex conditions connected with AND/OR statements with subconditions support and then check them in some context.
Usage
Getting objects
Building conditions
Let's say we want to match books that are hard to read or those ones with titles longer than 50 characters:
$wiseBookCondition = (new ConditionComposite()) ->addOR(new Difficulty(Difficulty::HARD)) ->addOR(new TitleOfMoreCharsThan(50));
Or easy books with short titles for children:
$booksForChildrenCondition = (new ConditionComposite()) ->addAND(new Difficulty(Difficulty::EASY)) ->addAND((new TitleOfMoreCharsThan(15))->negate());
Or those with really long titles:
$titleLogerThan99Condition = new TitleOfMoreCharsThan(99);
Building context
An easy to read book with a long title:
$easyBookWithLongTitle = (new Book()) ->setTitle("A really long title of some book that must be wise.") ->markAsEasy();
A hard to read book with short title:
$hardBookWithShortTitle = (new Book()) ->markAsHard() ->setTitle("How?");
An easy to read book with a short title:
$easyBookWithShortTitle = (new Book()) ->markAsEasy() ->setTitle("Cats");
Checking
Is a condition true?
Is this book wise?
$wiseBookCondition->isTrueIn($easyBookWithLongTitle); //true $wiseBookCondition->isTrueIn($hardBookWithShortTitle); //true $wiseBookCondition->isTrueIn($easyBookWithShortTitle); //false
Is it for children?
$booksForChildrenCondition->isTrueIn($easyBookWithLongTitle); //false $booksForChildrenCondition->isTrueIn($hardBookWithShortTitle); //false $booksForChildrenCondition->isTrueIn($easyBookWithShortTitle); //true
Is the title longer than 99 characters?
$titleLogerThan99Condition->isTrueIn($easyBookWithLongTitle); //false $titleLogerThan99Condition->isTrueIn($hardBookWithShortTitle); //false $titleLogerThan99Condition->isTrueIn($easyBookWithShortTitle);//false
Does intersection exist between two conditions?
A title of a wise book may be longer than 99 characters.
/* @var $intersectDetector IntersectDetector */ $intersectDetector->intersectExists( $wiseBookCondition, $titleLogerThan99Condition ); //true
But books for children have no titles that long.
/* @var $intersectDetector IntersectDetector */ $intersectDetector->intersectExists( $booksForChildrenCondition, $titleLogerThan99Condition ); //false
Are two conditions equal?
Two condition objects may be equal.
/* @var $comparator EqualityComparator */ $comparator->equal( $titleLogerThan99Condition, new TitleOfMoreCharsThan(99) ); //true
Installation
Use composer to get the latest version:
$ composer require lukaszmakuch/lmcondition
Example
The above code is taken from an example code located in ./examples. You can check there all files needed to provide this functionality.
Documentation
For more information check the best documentation - unit tests in ./tests. There's also documentation generated in ./doc.