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