subzeta / ruling
无状态规则引擎
v2.1
2017-12-07 14:17 UTC
Requires
- php: >=7.1
- nicoswd/php-rule-parser: ^0.3.5
Requires (Dev)
- phpunit/phpunit: 5.1.4
This package is not auto-updated.
Last update: 2024-09-24 20:17:55 UTC
README
给定上下文断言语句的无状态规则引擎。
安装
$ composer require "subzeta/ruling" : "^2.0"
使用示例
require '/path/to/vendor/autoload.php'; use subzeta\Ruling\Ruling; $my = new \stdClass(); $my->sensitivity = 80; $my->joyfulness = 10; (new Ruling()) ->given([ 'sensitivity' => $my->sensitivity, 'joyfulness' => $my->joyfulness ])->when( ':sensitivity is greater than 90 or :joyfulness is less than 20' )->then(function() { echo 'Hell yeah, I should listen music right now!'; })->otherwise(function() { echo 'I\'m happy enough, thanks.'; })->execute(); // Outputs: Hell yeah, I should listen music right now!
调用
有三个主要入口
interpret
返回解释后的规则。使用上面的示例,输出将是:['80 > 90 || 10 < 20']
assert
返回一个布尔值,表示输出。使用上面的示例,输出将是:true
execute
如果已定义,则触发成功或失败回调。使用上面的示例,输出将是:'Hell yeah, I should listen it!'
错误处理
当发生错误时,会抛出不同类型的异常
InvalidContextException
当提供的上下文无效时(接受:'string-key-1' => value-1, ..., 'string-key-x' => value-x)。
InvalidRuleException
当提供的规则无效时(接受:'string' 或 ['string-1', ..., 'string-x'])
InvalidCallbackException
当提供的成功/失败回调不可调用时(接受:function(){return 'Hey Ho! Let's go!';})
支持的运算符
备注
- 对于 execute 方法,不需要提供回调,它将返回一个布尔值,就像 assert 一样。
- 规则遵循运算符优先级,并从右到左评估括号。
测试
$ phpunit
递归待办事项列表
- 增加单元测试的数量,以防止执行不良上下文或格式错误的规则。
待办事项
- 改进解释方法响应。
变更列表
- 允许别名("等于"可以写成"是","不等于"可以写成"不是"/"isn't")。
- 上下文值也可以允许可调用的函数。
- 添加了严格的比较运算符(相同,不同)。
- 实现一种显示解释规则的 dump 方法可能很有趣。
- 添加了 "in" 运算符。
- 上下文接受数组值。
许可证
MIT