Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

deep clone the hash instead of marshalling so some object types (IO, …

…etc) do not cause subclassing to blow up
  • Loading branch information...
commit f74227d30f9389b4b23a888c9af49fb9b8248e1f 1 parent 9c08f47
@yyyc514 yyyc514 authored
Showing with 11 additions and 1 deletion.
  1. +11 −1 lib/httparty/module_inheritable_attributes.rb
View
12 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
Please sign in to comment.
Something went wrong with that request. Please try again.