Module: Rulezilla::DSL::ClassMethods

Defined in:
lib/rulezilla/dsl.rb

Instance Method Summary collapse

Instance Method Details

#all(record = {}) ⇒ Object



59
60
61
62
63
64
# File 'lib/rulezilla/dsl.rb', line 59

def all(record = {})
  validate_missing_attributes(record)
  result_node = tree.find_all(record_klass_instance(record))

  result_node&.map { |node| node.result(record_klass_instance(record)) }
end

#apply(record = {}) ⇒ Object



53
54
55
56
57
# File 'lib/rulezilla/dsl.rb', line 53

def apply(record = {})
  result_node = trace(record).last

  result_node&.result(record_klass_instance(record))
end

#include_rule(rule) ⇒ Object



76
77
78
79
80
81
82
# File 'lib/rulezilla/dsl.rb', line 76

def include_rule(rule)
  if rule.ancestors.include?(Rulezilla::DSL)
    tree.clone_and_append_children(rule.tree.root_node.children)
  else
    raise "#{rule.name} is not a Rulezilla class"
  end
end

#mandatory_attributesObject



49
50
51
# File 'lib/rulezilla/dsl.rb', line 49

def mandatory_attributes
  @mandatory_attributes ||= []
end

#results(record = nil) ⇒ Object



66
67
68
# File 'lib/rulezilla/dsl.rb', line 66

def results(record = nil)
  tree.all_results(record_klass_instance(record)).uniq
end

#trace(record = nil) ⇒ Object



70
71
72
73
74
# File 'lib/rulezilla/dsl.rb', line 70

def trace(record = nil)
  validate_missing_attributes(record)

  tree.trace(record_klass_instance(record))
end

#treeObject



84
85
86
# File 'lib/rulezilla/dsl.rb', line 84

def tree
  @tree ||= Tree.new(Node.new)
end