Sha256: 848a19e7536c75d86be48b01d01d89401aa2b8e34717a3aad57aef1284f32629

Contents?: true

Size: 1.02 KB

Versions: 5

Compression:

Stored size: 1.02 KB

Contents

require 'date'

Object.class_eval do
  def deep_clone
    clone = self.clone
    instance_variables.each do |name|
      value = instance_variable_get name
      clone.instance_variable_set name, value.deep_clone
    end
    clone
  end
end

Hash.class_eval do
  def deep_clone
    clone = super
    clone.clear
    each{|k, v| clone[k.deep_clone] = v.deep_clone}
    clone
  end
end

Struct.class_eval do
  def deep_clone
    clone = super
    clone.clear
    each_pair{|k, v| clone[k.deep_clone] = v.deep_clone}
    clone
  end
end

Array.class_eval do
  def deep_clone
    clone = super
    clone.clear
    each{|v| clone << v.deep_clone}
    clone
  end
end

[Class, Proc, Regexp].each do |klass|
  klass.class_eval do
    def clone; self end
    alias_method :deep_clone, :clone
  end
end

[Symbol, TrueClass, FalseClass, Numeric, TrueClass, FalseClass, NilClass].each do |klass|
  klass.send :alias_method, :clone, :self
end

[String, Symbol, Range, Regexp, Time, Date].each do |klass|
  klass.send :alias_method, :deep_clone, :clone
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ruby_ext-4.0.3 lib/ruby_ext/core/deep_clone.rb
ruby_ext-4.0.2 lib/ruby_ext/core/deep_clone.rb
ruby_ext-4.0.1 lib/ruby_ext/core/deep_clone.rb
ruby_ext-4.0.0 lib/ruby_ext/core/deep_clone.rb
ruby_ext-0.5.10 lib/ruby_ext/core/deep_clone.rb