module Rulezilla::DSL::ClassMethods
Public Instance Methods
all(record = {})
click to toggle source
# File lib/rulezilla/dsl.rb, line 57 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 = {})
click to toggle source
# File lib/rulezilla/dsl.rb, line 51 def apply(record = {}) result_node = trace(record).last result_node&.result(record_klass_instance(record)) end
include_rule(rule)
click to toggle source
# File lib/rulezilla/dsl.rb, line 74 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_attributes()
click to toggle source
# File lib/rulezilla/dsl.rb, line 47 def mandatory_attributes @mandatory_attributes ||= [] end
results(record = nil)
click to toggle source
# File lib/rulezilla/dsl.rb, line 64 def results(record = nil) tree.all_results(record_klass_instance(record)).uniq end
trace(record = nil)
click to toggle source
# File lib/rulezilla/dsl.rb, line 68 def trace(record = nil) validate_missing_attributes(record) tree.trace(record_klass_instance(record)) end
tree()
click to toggle source
# File lib/rulezilla/dsl.rb, line 82 def tree @tree ||= Tree.new(Node.new) end
Private Instance Methods
condition(&block)
click to toggle source
# File lib/rulezilla/dsl.rb, line 121 def condition(&block) tree.current_node.condition = block end
define(name = nil, &block)
click to toggle source
# File lib/rulezilla/dsl.rb, line 113 def define(name = nil, &block) tree.create_and_move_to_child(name) instance_eval(&block) tree.go_up end
Also aliased as: group
missing_attributes(record)
click to toggle source
# File lib/rulezilla/dsl.rb, line 92 def missing_attributes(record) record_attributes = if record.is_a?(Hash) || record.is_a?(OpenStruct) record.to_h.keys.map(&:to_sym) else record.methods end mandatory_attributes.map(&:to_sym) - record_attributes end
record_klass_instance(record)
click to toggle source
# File lib/rulezilla/dsl.rb, line 88 def record_klass_instance(record) Object.const_get("#{name}Record").new(record) end
result(value = nil, &block)
click to toggle source
# File lib/rulezilla/dsl.rb, line 125 def result(value = nil, &block) tree.current_node.result = value.nil? ? block : value end
Also aliased as: default
validate_attributes_presence(*fields)
click to toggle source
DSL
methods
# File lib/rulezilla/dsl.rb, line 109 def validate_attributes_presence(*fields) @mandatory_attributes = mandatory_attributes | fields end
validate_missing_attributes(record)
click to toggle source
# File lib/rulezilla/dsl.rb, line 102 def validate_missing_attributes(record) unless missing_attributes(record).empty? raise "Missing #{missing_attributes(record).join(', ')} attributes from: #{record}" end end