Sha256: 4c04606fd3cde0ebf18799b3d97d4d14bf81868831e9e8921f38ab05d82dd880

Contents?: true

Size: 950 Bytes

Versions: 5

Compression:

Stored size: 950 Bytes

Contents

module Ooz
  module Common
    module HashDiff
      ID_KEYS = %w[_id]

      def self.diff(a, b)
        return a if a.class != b.class
        case a
        when Hash
          {}.tap do |diffed|
            a.each do |key, a_value|
              b_value = b[key]
              next if a_value == b_value && !ID_KEYS.include?(key)
              diffed[key] = diff(a_value, b_value)
              diffed.delete(key) if diffed[key] == {}
            end
            # All keys are IDs, so it's actually blank
            if (diffed.keys - ID_KEYS).empty?
              return {}
            end
          end
        when Array
          return a unless a.length == b.length
          a.map.with_index do |a_value, idx|
            b_value = b[idx]
            diff(a_value, b_value)
          end.reject do |el|
            el == {}
          end
        else
          a
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ooze-parser-0.1.11 lib/ooz/common/hash_diff.rb
ooze-parser-0.1.10 lib/ooz/common/hash_diff.rb
ooze-parser-0.1.9 lib/ooz/common/hash_diff.rb
ooze-parser-0.1.8 lib/ooz/common/hash_diff.rb
ooze-parser-0.1.7 lib/ooz/common/hash_diff.rb