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