Skip to content

Latest commit

 

History

History
85 lines (65 loc) · 2.31 KB

README.md

File metadata and controls

85 lines (65 loc) · 2.31 KB

RulerZ Build Status Scrutinizer Code Quality

This library allows to filter multiple types of targets using the same rule engine.

Rules can be written by using a dedicated language, very close to SQL. Therefore, they can be written by a user and saved in a database.

The rule engine used by RulerZ is hoa/ruler.

Currently supported target types:

  • array of arrays ;
  • array of objects ;
  • Doctrine ORM QueryBuilder.

There also is a blog post explaining the motivation behind this library.

Installation

composer require 'kphoen/rulerz'

Usage

$rulerz = new \RulerZ\RulerZ(
    new \RulerZ\Interpreter\HoaInterpreter(), [
        new \RulerZ\Executor\ArrayExecutor([
            'length' => 'strlen',
        ]),
        new \RulerZ\Executor\DoctrineQueryBuilderExecutor(),
    ]
);

// 1. Write a rule.
$rule  = 'group in :groups and points > :points and length(name) > 2';

// 2. Filter a collection
$usersQb = $entityManager
    ->createQueryBuilder()
    ->select('u')
    ->from('Entity\User', 'u');

// or an array of arrays
$usersArr = [
    ['name' => 'Joe', 'group' => 'guest', 'points' => 40],
    ['name' => 'Moe', 'group' => 'guest', 'points' => 20],
    ['name' => 'Al',  'group' => 'guest', 'points' => 40],
];

// or an array of objects
$usersObj = [
    new User('Joe', 'guest', 40),
    new User('Moe', 'guest', 20),
    new User('Al',  'guest', 40),
];

// 3. Enjoy!
$parameters = array(
    'points' => 30,
    'groups' => ['customer', 'guest'],
);

var_dump($rulerz->filter($usersQb, $rule, $parameters));
var_dump($rulerz->filter($usersArr, $rule, $parameters));
var_dump($rulerz->filter($usersObj, $rule, $parameters));

Documentation

The documentation can be found in the doc directory. Have a look at the index.md if you don't know what you are looking for.

Licence

This library is under the MIT licence.