Module: Philiprehberger::RuleEngine
- Defined in:
- lib/philiprehberger/rule_engine.rb,
lib/philiprehberger/rule_engine/rule.rb,
lib/philiprehberger/rule_engine/engine.rb,
lib/philiprehberger/rule_engine/helpers.rb,
lib/philiprehberger/rule_engine/version.rb
Defined Under Namespace
Modules: Helpers Classes: Engine, Error, Rule
Constant Summary collapse
- VERSION =
'0.5.0'
Class Method Summary collapse
-
.from_h(data) {|name| ... } ⇒ Engine
Reconstruct an engine from a serialized hash.
-
.new(mode: :all) {|engine| ... } ⇒ Engine
Create a new rule engine.
Class Method Details
.from_h(data) {|name| ... } ⇒ Engine
Reconstruct an engine from a serialized hash. The resolver block maps rule names to condition/action implementations.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/philiprehberger/rule_engine.rb', line 27 def self.from_h(data, &resolver) raise Error, 'resolver block is required' unless resolver mode = (data[:mode] || data['mode'] || :all).to_sym engine = Engine.new(mode: mode) rules = data[:rules] || data['rules'] || [] rules.each do |rule_data| name = rule_data[:name] || rule_data['name'] priority_val = rule_data[:priority] || rule_data['priority'] || 0 enabled_val = rule_data.key?(:enabled) ? rule_data[:enabled] : rule_data.fetch('enabled', true) = (rule_data[:tags] || rule_data['tags'] || []).map(&:to_sym) r = engine.add_rule(name, tags: ) do priority priority_val end r.enabled = enabled_val resolver.call(r) end engine end |