Class: Object

Inherits:
BasicObject
Defined in:
lib/full_dup/object.rb

Overview

Add full_dup support to the object class.

Instance Method Summary collapse

Instance Method Details

#full_dup(progress = {}) ⇒ Object

The common part of the full_dup.



12
13
14
15
16
17
18
19
20
21
22
23
# 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_excludeObject

By default, no instance variables are excluded.



7
8
9
# File 'lib/full_dup/object.rb', line 7

def full_dup_exclude
  []
end

#full_dup_no_exclusions(progress) ⇒ Object

Do a full_dup with no exclusions



26
27
28
29
30
31
32
# 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) ⇒ Object

Do a full_dup with exclusions



35
36
37
38
39
40
41
42
43
# 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