class Object

Add full_dup support to the object class.

Public Instance Methods

full_dup(progress={}) click to toggle source

The common part of the full_dup.

# File lib/full_dup/object.rb, line 12
def full_dup(progress={})
  progress[object_id] = result = dup
  exclude = full_dup_exclude

  if exclude.empty?
    result.full_dup_no_exclusions(progress)
  else
    result.full_dup_with_exclusions(progress, exclude)
  end

  result
end
full_dup_exclude() click to toggle source

By default, no instance variables are excluded.

# File lib/full_dup/object.rb, line 7
def full_dup_exclude
  []
end
full_dup_no_exclusions(progress) click to toggle source

Do a full_dup with no exclusions

# File lib/full_dup/object.rb, line 26
def full_dup_no_exclusions(progress)
  instance_variables.each do |name|
    value = instance_variable_get(name)
    value = progress[value.object_id] || value.full_dup(progress)
    instance_variable_set(name, value)
  end
end
full_dup_with_exclusions(progress, exclude) click to toggle source

Do a full_dup with exclusions

# File lib/full_dup/object.rb, line 35
def full_dup_with_exclusions(progress, exclude)
  instance_variables.each do |name|
    unless exclude.include?(name)
      value = instance_variable_get(name)
      value = progress[value.object_id] || value.full_dup(progress)
      instance_variable_set(name, value)
    end
  end
end