Sha256: 7ce38ff8fae92fead6dcae8358a34f9f65d430565704d665d53e945b6f9f3bbe

Contents?: true

Size: 927 Bytes

Versions: 14

Compression:

Stored size: 927 Bytes

Contents

class Object
  # Returns a deep copy of object if it's duplicable. If it's
  # not duplicable, returns +self+.
  #
  #   object = Object.new
  #   dup    = object.deep_dup
  #   dup.instance_variable_set(:@a, 1)
  #
  #   object.instance_variable_defined?(:@a) #=> false
  #   dup.instance_variable_defined?(:@a)    #=> true
  def deep_dup
    duplicable? ? dup : self
  end
end

class Array
  # Returns a deep copy of array.
  #
  #   array = [1, [2, 3]]
  #   dup   = array.deep_dup
  #   dup[1][2] = 4
  #
  #   array[1][2] #=> nil
  #   dup[1][2]   #=> 4
  def deep_dup
    map { |it| it.deep_dup }
  end
end

class Hash
  # Returns a deep copy of hash.
  #
  #   hash = { a: { b: 'b' } }
  #   dup  = hash.deep_dup
  #   dup[:a][:c] = 'c'
  #
  #   hash[:a][:c] #=> nil
  #   dup[:a][:c]  #=> "c"
  def deep_dup
    each_with_object(dup) do |(key, value), hash|
      hash[key.deep_dup] = value.deep_dup
    end
  end
end

Version data entries

14 entries across 14 versions & 2 rubygems

Version Path
motion-support-1.2.1 motion/core_ext/object/deep_dup.rb
motion-support-1.1.1 motion/core_ext/object/deep_dup.rb
motion-support-1.2.0 motion/core_ext/object/deep_dup.rb
motion-support-1.1.0 motion/core_ext/object/deep_dup.rb
motion-support-1.0.0 motion/core_ext/object/deep_dup.rb
motion-support-0.3.0 motion/core_ext/object/deep_dup.rb
motion_blender-support-0.2.8 motion/core_ext/object/deep_dup.rb
motion_blender-support-0.2.7 motion/core_ext/object/deep_dup.rb
motion-support-0.2.6 motion/core_ext/object/deep_dup.rb
motion-support-0.2.5 motion/core_ext/object/deep_dup.rb
motion-support-0.2.4 motion/core_ext/object/deep_dup.rb
motion-support-0.2.3 motion/core_ext/object/deep_dup.rb
motion-support-0.2.2 motion/core_ext/object/deep_dup.rb
motion-support-0.2.0 motion/core_ext/object/deep_dup.rb