Sha256: 4ed7ad7d7ec3f3b6d9a2b45327cf7f633568053f03e2a30118bc906d701a3284

Contents?: true

Size: 803 Bytes

Versions: 25

Compression:

Stored size: 803 Bytes

Contents

module Elastics
  module Struct
    # allows deep merge between Hashes
    module Mergeable

      def deep_merge(*hashes)
        merged = deep_dup
        hashes.each {|h2| merged.replace(deep_merge_hash(merged,h2))}
        merged
      end

      def deep_merge!(*hashes)
        replace deep_merge(*hashes)
      end

      def deep_dup
        Marshal.load(Marshal.dump(self))
      end

  private

      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

    end
  end
end

Version data entries

25 entries across 25 versions & 2 rubygems

Version Path
elastics-client-1.3.3 lib/elastics/struct/mergeable.rb
elastics-client-1.3.2 lib/elastics/struct/mergeable.rb
elastics-client-1.3.1 lib/elastics/struct/mergeable.rb
elastics-client-1.3.0 lib/elastics/struct/mergeable.rb
elastics-client-1.2.1 lib/elastics/struct/mergeable.rb
elastics-client-1.2.0 lib/elastics/struct/mergeable.rb
elastics-client-1.1.11 lib/elastics/struct/mergeable.rb
elastics-client-1.1.10 lib/elastics/struct/mergeable.rb
elastics-client-1.1.9 lib/elastics/struct/mergeable.rb
elastics-client-1.1.8 lib/elastics/struct/mergeable.rb
elastics-client-1.1.7 lib/elastics/struct/mergeable.rb
elastics-client-1.1.6 lib/elastics/struct/mergeable.rb
elastics-client-1.1.5 lib/elastics/struct/mergeable.rb
elastics-client-1.1.4 lib/elastics/struct/mergeable.rb
elastics-client-1.1.3 lib/elastics/struct/mergeable.rb
elastics-client-1.1.2 lib/elastics/struct/mergeable.rb
elastics-client-1.1.1 lib/elastics/struct/mergeable.rb
elastics-models-1.1.0 lib/elastics/struct/mergeable.rb
elastics-models-1.0.10 lib/elastics/struct/mergeable.rb
elastics-models-1.0.9 lib/elastics/struct/mergeable.rb