module Flex::Struct::Mergeable
allows deep merge between Hashes
Public Instance Methods
deep_dup()
click to toggle source
# File lib/flex/struct/mergeable.rb, line 16 def deep_dup Marshal.load(Marshal.dump(self)) end
deep_merge(*hashes)
click to toggle source
# File lib/flex/struct/mergeable.rb, line 6 def deep_merge(*hashes) merged = deep_dup hashes.each {|h2| merged.replace(deep_merge_hash(merged,h2))} merged end
deep_merge!(*hashes)
click to toggle source
# File lib/flex/struct/mergeable.rb, line 12 def deep_merge!(*hashes) replace deep_merge(*hashes) end
Private Instance Methods
deep_merge_hash(h1, h2)
click to toggle source
# File lib/flex/struct/mergeable.rb, line 22 def deep_merge_hash(h1, h2) h2 ||= {} h1.merge(h2) do |key, oldval, newval| case when oldval.is_a?(::Hash) && newval.is_a?(::Hash) deep_merge_hash(oldval, newval) when oldval.is_a?(::Array) && newval.is_a?(::Array) oldval + newval else newval end end end