module DeepDive
Public Class Methods
included(base)
click to toggle source
# File lib/deep_dive/deep_dive.rb, line 169 def self.included(base) base.extend(CMeth) end
inherited(sub)
click to toggle source
# File lib/deep_dive/deep_dive.rb, line 173 def self.inherited(sub) sub.include(DeepDive) end
verbose=(t)
click to toggle source
# File lib/deep_dive/deep_dive.rb, line 21 def self.verbose=(t) @@verbosity = t end
verbose?()
click to toggle source
# File lib/deep_dive/deep_dive.rb, line 25 def self.verbose? defined?(@@verbosity) && @@verbosity end
Public Instance Methods
_replicate(dupit: true, oc: {}, patch: {})
click to toggle source
Not meant to be called externally. Use either ddup or dclone. The patch list will take the value and use that wherver it finds the key instance variable down the object graph.
# File lib/deep_dive/deep_dive.rb, line 60 def _replicate(dupit: true, oc: {}, patch: {}) unless oc.member? self puts "DeepDive: replicating #{self.class}:<#{self.object_id.to_s(16)}>" if DeepDive::verbose? copy = oc[self] = if dupit dup else clone end copy.instance_variables.map do |var| [var, instance_variable_get(var)] end.reject do |var, ob| not ob.respond_to? :_replicate end.reject do |var, ob| self.class.excluded?(var, self) end.each do |var, value| unless patch.member? var puts "DeepDive: rep instance var #{self.class}.#{var}(#{value.class}:<#{value.object_id.to_s(16)}>)" if DeepDive::verbose? copy.instance_variable_set(var, value._replicate(oc: oc, dupit: dupit, patch: patch)) else puts "DeepDive: PATCH instance var #{self.class}.#{var}(#{patch[var].class}:<#{patch[var].object_id.to_s(16)}>)" if DeepDive::verbose? copy.instance_variable_set(var, patch[var]) end end end oc[self] end