class RulesProcessor::Processor

Attributes

options[RW]
records[RW]
ruleset[RW]

Public Class Methods

new(args = {}) click to toggle source
# File lib/rules_processor/processor.rb, line 6
def initialize(args = {})
  @records = args[:records]
  @ruleset = args[:ruleset]
  @options = args[:options]
end

Public Instance Methods

process() click to toggle source
# File lib/rules_processor/processor.rb, line 12
def process
  ruleset.each do |rule|
    mark_skipped(rule) && next if already_matched?(rule)
    mark_not_match(rule) && next unless rule_matches?(rule)

    mark_match(rule) && actions_processor(rule)

    process
    break
  end
  matching_result
end

Private Instance Methods

actions_processor(rule) click to toggle source
# File lib/rules_processor/processor.rb, line 56
def actions_processor(rule)
  klass = RulesProcessor.configuration.actions_class
  klass.new(records: records, rule: rule, options: options).process
end
already_matched() click to toggle source
# File lib/rules_processor/processor.rb, line 44
def already_matched
  @already_matched ||= []
end
already_matched?(rule) click to toggle source
# File lib/rules_processor/processor.rb, line 48
def already_matched?(rule)
  already_matched.include?(rule.id)
end
mark_match(rule) click to toggle source
# File lib/rules_processor/processor.rb, line 31
def mark_match(rule)
  matching_result << {rule.id => :match}
  already_matched << rule.id
end
mark_not_match(rule) click to toggle source
# File lib/rules_processor/processor.rb, line 36
def mark_not_match(rule)
  matching_result << {rule.id => :not_match}
end
mark_skipped(rule) click to toggle source
# File lib/rules_processor/processor.rb, line 40
def mark_skipped(rule)
  matching_result << {rule.id => :skipped}
end
matching_result() click to toggle source
# File lib/rules_processor/processor.rb, line 27
def matching_result
  @matching_result ||= []
end
rule_matches?(rule) click to toggle source
# File lib/rules_processor/processor.rb, line 52
def rule_matches?(rule)
  RulesProcessor::RuleMatcher.new(records: records, rule: rule, options: options).matches?
end