Skip to content

lukaszmakuch/lmcondition

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

65 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

PHP Condition library

This library allows to build complex conditions connected with AND/OR statements with subconditions support and then check them in some context.

travis

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.

About

Allows to build complex conditions connected with AND/OR statements with subconditions support and then check them in some context.

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages