2017-25 © Pedro Peláez
 

bundle symfony-rule-engine-bundle

Symfony Rule Engine Bundle - Parses & Evaluates Rules Written in a JavaScript-like Syntax

image

nicoswd/symfony-rule-engine-bundle

Symfony Rule Engine Bundle - Parses & Evaluates Rules Written in a JavaScript-like Syntax

  • Friday, April 27, 2018
  • by nicoSWD
  • Repository
  • 1 Watchers
  • 3 Stars
  • 163 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 9 Versions
  • 8 % Grown

The README.md

Symfony Rule Engine Bundle

build coverage Scrutinizer Code Quality Latest Stable Version, (*1)

SensioLabsInsight, (*2)

This package bundles nicoSWD/php-rule-parser, (*3)

Requires PHP >= 7.0, (*4)

Compatible with Symfony 3 and 4!, (*5)

Install

$ composer require nicoswd/symfony-rule-engine-bundle
<?php

// in AppKernel::registerBundles()
$bundles = [
    // ...
    new nicoSWD\RuleBundle\RuleBundle(),
    // ...
];

Usage Example

<?php

$rule = '[1, 4, 3].join(glue) === "1-4-3"';
$variables = ['glue' => '-'];

$result = $this->get('rule_parser')->isTrue($rule, $variables);
var_dump($result); // bool(true)

Custom Functions

Custom functions are automatically discovered. They just need to be configured as service with the tag nico_swd.rule.function., (*6)

If you have multiple functions inside the same directory, the easiest way to make them visible to the bundle is this:, (*7)

services.yml, (*8)

AppBundle\Functions\:
    resource: '../../src/AppBundle/Functions'
    tags: ['nico_swd.rule.function']

Furthermore, custom functions must implement nicoSWD\Rules\Core\CallableUserFunction like in the example below, (*9)

<?php

namespace AppBundle\Functions;

use nicoSWD\Rules\Core\CallableUserFunction;
use nicoSWD\Rules\Tokens\BaseToken;
use nicoSWD\Rules\Tokens\TokenArray;

class ArrayFilter implements CallableUserFunction
{
    /**
     * @param BaseToken $param
     * @param BaseToken $param ...
     * @return BaseToken
     */
    public function call($param = null)
    {
        // Make sure this functions only works on arrays
        if (!$param instanceof TokenArray) {
            throw new \InvalidArgumentException();
        }

        return new TokenArray(
            array_values(
                array_filter(
                    $param->toArray()
                )
            )
        );
    }

    public function getName(): string
    {
        return 'array_filter';
    }
}

The functions optionally retrieve instances of nicoSWD\Rules\Tokens\BaseToken as arguments, and always must return one as well., (*10)

<?php

$rule = 'array_filter([0, false, 1]) === [1]';

$result = $this->get('rule_parser')->isTrue($rule);
var_dump($result); // bool(true)

The Versions

27/04 2018

dev-master

9999999-dev

Symfony Rule Engine Bundle - Parses & Evaluates Rules Written in a JavaScript-like Syntax

  Sources   Download

MIT

The Requires

 

The Development Requires

27/04 2018

v1.6.2

1.6.2.0

Symfony Rule Engine Bundle - Parses & Evaluates Rules Written in a JavaScript-like Syntax

  Sources   Download

MIT

The Requires

 

The Development Requires

12/04 2018

v1.6.1

1.6.1.0

Symfony Rule Engine Bundle - Parses & Evaluates Rules Written in a JavaScript-like Syntax

  Sources   Download

MIT

The Requires

 

The Development Requires

13/10 2017
13/10 2017

v1.4

1.4.0.0

  Sources   Download

MIT

The Requires

 

12/10 2017

v1.3

1.3.0.0

  Sources   Download

MIT

The Requires

 

12/10 2017

v1.1

1.1.0.0

  Sources   Download

MIT

The Requires