Sha256: 96160276cb2e67f7ed30a96df6e8c09a01feee38e17a59b8e01620aa0b48161e
Contents?: true
Size: 929 Bytes
Versions: 16
Compression:
Stored size: 929 Bytes
Contents
class RailsOps::Hookup::DSLValidator attr_reader :error attr_reader :trace def initialize(hooks) @hooks = hooks @trace = [] end def validate! # Check infinity loop if target_hooks.any? { |name, targets| recursion?(targets, name) } fail SystemStackError.new, "Infinite loop detected in hooks configuration: #{inspect_trace}." end end def target_hooks @target_hooks ||= @hooks.map do |name, hash| [name, drilldown(hash)] end.to_h end private def inspect_trace @trace.map(&:to_s).join(' ~> ') end def recursion?(targets, name) if targets.include? name @trace << name.to_s return true end return targets.any? do |target| if @hooks[target] @trace |= [name, target] recursion? drilldown(@hooks[target]), name end end end def drilldown(hash) hash.values.flatten.map(&:target_operation) end end
Version data entries
16 entries across 16 versions & 1 rubygems