Froze rails gems
[depot.git] / vendor / rails / activesupport / lib / active_support / core_ext / hash / deep_merge.rb
diff --git a/vendor/rails/activesupport/lib/active_support/core_ext/hash/deep_merge.rb b/vendor/rails/activesupport/lib/active_support/core_ext/hash/deep_merge.rb
new file mode 100644 (file)
index 0000000..f8842ba
--- /dev/null
@@ -0,0 +1,23 @@
+module ActiveSupport #:nodoc:
+  module CoreExtensions #:nodoc:
+    module Hash #:nodoc:
+      # Allows for deep merging
+      module DeepMerge
+        # Returns a new hash with +self+ and +other_hash+ merged recursively.
+        def deep_merge(other_hash)
+          self.merge(other_hash) do |key, oldval, newval|
+            oldval = oldval.to_hash if oldval.respond_to?(:to_hash)
+            newval = newval.to_hash if newval.respond_to?(:to_hash)
+            oldval.class.to_s == 'Hash' && newval.class.to_s == 'Hash' ? oldval.deep_merge(newval) : newval
+          end
+        end
+
+        # Returns a new hash with +self+ and +other_hash+ merged recursively.
+        # Modifies the receiver in place.
+        def deep_merge!(other_hash)
+          replace(deep_merge(other_hash))
+        end
+      end
+    end
+  end
+end