module DecisionMaker
Constants
- VERSION
Public Class Methods
define(&definition)
click to toggle source
# File lib/decision_maker.rb, line 36 def self.define(&definition) dsl = DSL.new dsl.instance_eval(&definition) d = dsl.definition ClassDefinition.customize(d.rule_table, d.name, d.condition_name, d.action_name, d.error_handler) end
generate(&definition)
click to toggle source
@example DecisionMaker.generate ticket_price = DecisionMaker.generate do rule( child: { condition: 0..9, action: 600 }, student: { condition: 10..16, action: 1200 }, adult: { condition: ->(age) { age > 16 }, action: 2000 }, ) end ticket_price.call(20) #=> 2000
@example Customizing names are available. It makes your code more illustrative
ticket_price = DecisionMaker.generate do name :calculate condition_name :age action_name :price rule( child: { age: 0..9, price: 600 }, student: { age: 10..16, price: 1200 }, adult: { age: ->(age) { age > 16 }, price: 2000 }, ) end ticket_price.calculate(20) #=> 2000
# File lib/decision_maker.rb, line 31 def self.generate(&definition) decision_table = define(&definition) decision_table.new end