jakubciszak/rule-engine

0.1.1 2024-10-09 10:25 UTC

This package is auto-updated.

Last update: 2025-03-09 18:01:12 UTC


README

Rule Engine is a PHP library designed to evaluate complex rules and propositions. It supports various operators and can handle propositions and variables.

This model is based on rule archetype pattern from book "Enterprise Patterns and MDA: Building Better Software with Archetype Patterns and UML" by Jim Arlow and Ila Neustadt.

Requirements

  • PHP 8.3 or higher
  • Composer

Installation

To install the library, use Composer:

composer require jakubciszak/rule-engine

Usage

Notation

This implementation use Reverse Polish Notation (RPN).
RPN is a mathematical notation in which operators follow their operands. This notation eliminates the need for parentheses that are used in standard infix notation, making the evaluation of expressions simpler and more efficient.

For example, the expression
(2 + 3) * 5
in standard notation would be written as
2 3 + 5 * in RPN.

In this notation, you first add 2 and 3 to get 5, and then multiply by 5 to get 25.

The Rule Engine uses RPN to simplify the process of building conditions, making it more intuitive to construct complex logical expressions.

Creating Rules

You can create rules using the provided methods for different operators:

use JakubCiszak\RuleEngine\Rule;
use JakubCiszak\RuleEngine\Operator;

$rule = (new Rule())
    ->variable('expectedAge', 22)
    ->variable('age')
    ->greaterThan()
    ->evaluate($context);

Evaluating Rules

To evaluate a rule, you need to provide a RuleContext:

use JakubCiszak\RuleEngine\RuleContext;

$context = new RuleContext();
$result = $rule->evaluate($context);

Development

Running Tests

To run the tests, use PHPUnit:

vendor/bin/phpunit

Contributing

Contributions are welcome! Please open an issue or submit a pull request.

License

This project is licensed under the MIT License.

Authors

Additional Information

  • The project uses the munusphp/munus library for functional programming constructs.
  • The source code is located in the src/ directory.
  • Tests are located in the tests/ directory.