Releases: deliveredtechnologies/rulebook
Spring Aware Rules
- Rules are made injectable using @Autowired with SpringAwareRuleBookRunner
- ERROR_ON_FAILURE now throws meaningful exceptions
- @RuleBean is now used to properly decorate Spring POJO rules
Logging, Fat Jars, and Minor Fixes
This release includes:
- Enhanced support for Spring Boot Fat Jars
- Additional logging in RuleAdapter
- Fix for mapping facts to instance variables in POJO rules when NameValueReferableMap key is different than NameValueReferable name
- Corrections to the README
Null Facts Patch
Null facts used in the invocation of a rule caused an exception. This patch allows null facts to be used without throwing an exception.
Rules Auditing
- Added Rules Auditing
- Updated DSL to include support for Rules Auditing
- Added Rules Auditing for POJO Rules
POJO Result and Spring Boot Patches
- Fixed POJO Results - previously getResults() on RuleBookRunner always returned Optional true; now it only returns Optional true if a Result was set
- Fixed Spring Boot Bug - when POJO Rules were packaged in a Spring Boot uber jar, RuleBookRunner would fail to scan rules in a package; this has been corrected
DSL Enhancements
- RuleBooks using the RuleBookBuilder now must specify a default result immediately affter a result type is specified
- A Rule can break the rule chain when a rule fails if RuleChainActionType.STOP_ON_FAILURE is specified when the Rule is created
- Errors are no longer logged when a default result is not specified for a RuleBookRunner
RuleBook Thread Safety
- RuleBooks are made thread safe for POJO and DSL created RuleBooks
- RuleBooks can now be safely used as singletons with Spring
- RuleBook results are now unique per thread
Bug Fix: Result reads not chained on POJO Rules
- Result reads are now chained on POJO Rules - fixes Megabank example
- Conditions omitted from POJO rules now cause actions to always fire (instead of never fire)
Bug Fix: toString in NameValueTypeConvertibleMap
NameValueTypeConvertible is used in the lambda when() and then() functions. Previously, it was decorating the FactMap, but not delegating to its toString method. This meant when filtering facts via the using() method and using the System.out::println function reference, the String value of the fact was not being outputted (e.g. in the Home Loan example in the README).
The bug was corrected by having NameValueTypeConvertible delegate its toString method to the map it decorates.
Enhanced NameValueTypeConvertibleMap
- added BigDecimal to NameValueTypeConvertibleMap
- added Boolean to NameValueTypeConvertibleMap
Now when() and then() methods in the DSL will be able to convert facts of an unspecified type easily to BigDecimal or Boolean types using the methods getBigDeciVal() and getBoolVal, respectively.