Sha256: d92fc865a27b8db0c02e14ec1bca0e3cca75bbb28d4c9237f90953dc1e42f286

Contents?: true

Size: 1.12 KB

Versions: 8

Compression:

Stored size: 1.12 KB

Contents

class Object
  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

OpenObject.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].each do |klass|
  klass.class_eval do
    def deep_clone
      self
    end
  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

8 entries across 8 versions & 2 rubygems

Version Path
ruby_ext-0.4.11 lib/ruby_ext/deep_clone.rb
ruby_ext-0.4.10 lib/ruby_ext/deep_clone.rb
ruby_ext-0.4.9 lib/ruby_ext/deep_clone.rb
ruby_ext-0.4.7 lib/ruby_ext/deep_clone.rb
ruby_ext-0.4.6 lib/ruby_ext/deep_clone.rb
ruby-ext-0.4.6 lib/ruby_ext/deep_clone.rb
ruby-ext-0.4.4 lib/ruby_ext/deep_clone.rb
ruby-ext-0.4.3 lib/ruby_ext/deep_clone.rb