class Object

Add full_clone support to all objects.

Public Instance Methods

full_clone(progress={}) click to toggle source

The common part of the full_clone method.

# File lib/full_clone/object.rb, line 12
def full_clone(progress={})
  progress[object_id] = result = clone
  exclude = full_clone_exclude

  if exclude.empty?
    result.full_clone_no_exclusions(progress)
  else
    result.full_clone_with_exclusions(progress, exclude)
  end

  result
end
full_clone_exclude() click to toggle source

By default, no instance variables are excluded.

# File lib/full_clone/object.rb, line 7
def full_clone_exclude
  []
end
full_clone_no_exclusions(progress) click to toggle source

Do a full_clone with no exclusions

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

Do a full_clone with exclusions

# File lib/full_clone/object.rb, line 35
def full_clone_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_clone(progress)
      instance_variable_set(name, value)
    end
  end
end