Module: Rulezilla::DSL::ClassMethods

Defined in:
lib/rulezilla/dsl.rb

Instance Method Summary collapse

Instance Method Details

#all(record = {}) ⇒ Object



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

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



63
64
65
66
67
# File 'lib/rulezilla/dsl.rb', line 63

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

  result_node&.result(record_klass_instance(record))
end

#include_rule(rule) ⇒ Object



86
87
88
89
90
91
92
# File 'lib/rulezilla/dsl.rb', line 86

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



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

def mandatory_attributes
  @mandatory_attributes ||= []
end

#results(record = nil) ⇒ Object



76
77
78
# File 'lib/rulezilla/dsl.rb', line 76

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

#trace(record = nil) ⇒ Object



80
81
82
83
84
# File 'lib/rulezilla/dsl.rb', line 80

def trace(record = nil)
  validate_missing_attributes(record)

  tree.trace(record_klass_instance(record))
end

#treeObject



94
95
96
# File 'lib/rulezilla/dsl.rb', line 94

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