class DecisionMaker::ClassDefinition
Public Class Methods
customize(rule_table, name, condition_name, action_name, error_handler)
click to toggle source
# File lib/decision_maker/class_definition.rb, line 3 def self.customize(rule_table, name, condition_name, action_name, error_handler) args = [rule_table, name, condition_name, action_name, error_handler] c = Class.new c.class_exec(*args) do |table, name, condition_name, action_name, error_handler| const_set 'TABLE', table define_method(:rule_table) { self.class::TABLE } define_method(name) do |key| rule_table[label(key)].fetch(action_name) end define_method(:label) do |key| found = rule_table.find do |label, rule| rule[condition_name] === key end if found rule_label, rule_content = found rule_label else error_handler.call(key) end end define_method(:for) do |label| rule_table[label].fetch(action_name) end end c end