module Rulezilla::DSL::ClassMethods
Public Instance Methods
Source
# 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
Source
# File lib/rulezilla/dsl.rb, line 53 def apply(record = {}) result_node = trace(record).last result_node&.result(record_klass_instance(record)) end
Source
# 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
Source
# File lib/rulezilla/dsl.rb, line 49 def mandatory_attributes @mandatory_attributes ||= [] end
Source
# File lib/rulezilla/dsl.rb, line 66 def results(record = nil) tree.all_results(record_klass_instance(record)).uniq end
Source
# File lib/rulezilla/dsl.rb, line 70 def trace(record = nil) validate_missing_attributes(record) tree.trace(record_klass_instance(record)) end
Private Instance Methods
Source
# File lib/rulezilla/dsl.rb, line 123 def condition(&block) tree.current_node.condition = block end
Source
# File lib/rulezilla/dsl.rb, line 115 def define(name = nil, &block) tree.create_and_move_to_child(name) instance_eval(&block) tree.go_up end
Also aliased as: group
Source
# File lib/rulezilla/dsl.rb, line 94 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
Source
# File lib/rulezilla/dsl.rb, line 90 def record_klass_instance(record) Object.const_get("#{name}Record").new(record) end
Source
# File lib/rulezilla/dsl.rb, line 127 def result(value = nil, &block) tree.current_node.result = value.nil? ? block : value end
Also aliased as: default
Source
# File lib/rulezilla/dsl.rb, line 111 def validate_attributes_presence(*fields) @mandatory_attributes = mandatory_attributes | fields end
DSL
methods
Source
# File lib/rulezilla/dsl.rb, line 104 def validate_missing_attributes(record) unless missing_attributes(record).empty? raise "Missing #{missing_attributes(record).join(', ')} attributes from: #{record}" end end