module Rubanok::DSL::Matching::ClassMethods

Public Instance Methods

match(*fields, activate_on: fields, activate_always: false, fail_when_no_matches: nil, &block) click to toggle source
# File lib/rubanok/dsl/matching.rb, line 70
def match(*fields, activate_on: fields, activate_always: false, fail_when_no_matches: nil, &block)
  rule = Rule.new(fields, activate_on: activate_on, activate_always: activate_always)

  rule.instance_eval(&block)

  define_method(rule.to_method_name) do |params = {}|
    params ||= {} if params.nil?

    clause = rule.matching_clause(params)

    if clause
      apply_rule! clause, params
    else
      default_match_handler(rule, params, fail_when_no_matches)
    end
  end

  rule.clauses.each do |clause|
    define_method(clause.to_method_name, &clause.block)
  end

  add_rule rule
end