class RuleTable::Table
Public Class Methods
new()
click to toggle source
# File lib/rule_table.rb, line 19 def initialize @rules = [] end
Public Instance Methods
add_rule_for(target, *matchers)
click to toggle source
# File lib/rule_table.rb, line 23 def add_rule_for(target, *matchers) @rules << [ target, matchers ] end
match(object)
click to toggle source
# File lib/rule_table.rb, line 27 def match(object) @rules.find { |(_target, matchers)| matchers.all? { |m| m.matches?(object) } }.first end
match_with_trace(object)
click to toggle source
# File lib/rule_table.rb, line 33 def match_with_trace(object) trace = [] result = @rules.find { |(target, matchers)| partial_trace = { target: target, matched: [] } matchers.all? { |m| m.matches?(object).tap { |match_result| partial_trace[:matched] << m.matcher_name if match_result } }.tap { trace << partial_trace } }.first [ result, trace ] end