Permalink
Browse files

Merge branch 'deep_clone' of https://github.com/yyyc514/httparty into…

… yyyc514-deep_clone
  • Loading branch information...
2 parents ad76817 + f74227d commit b673389f900b3961247102869cafc7d9cb139714 @jnunemaker committed Sep 7, 2012
Showing with 11 additions and 1 deletion.
  1. +11 −1 lib/httparty/module_inheritable_attributes.rb
@@ -4,6 +4,16 @@ def self.included(base)
base.extend(ClassMethods)
end
+ # borrowed from Rails 3.2 ActiveSupport
+ def self.hash_deep_dup(h)
+ duplicate = h.dup
+ duplicate.each_pair do |k,v|
+ tv = duplicate[k]
+ duplicate[k] = tv.is_a?(Hash) && v.is_a?(Hash) ? hash_deep_dup(tv) : v
+ end
+ duplicate
+ end
+
module ClassMethods #:nodoc:
def mattr_inheritable(*args)
@mattr_inheritable_attrs ||= [:mattr_inheritable_attrs]
@@ -22,7 +32,7 @@ def inherited(subclass)
if instance_variable_get(ivar).respond_to?(:merge)
method = <<-EOM
def self.#{inheritable_attribute}
- #{ivar} = superclass.#{inheritable_attribute}.merge Marshal.load(Marshal.dump(#{ivar}))
+ #{ivar} = superclass.#{inheritable_attribute}.merge ModuleInheritableAttributes.hash_deep_dup(#{ivar})
end
EOM
subclass.class_eval method

0 comments on commit b673389

Please sign in to comment.