Class: ObjectDeepDiff::HashDeepDiff

Inherits:
Object
  • Object
show all
Defined in:
lib/object_deep_diff/hash_deep_diff.rb

Instance Method Summary collapse

Constructor Details

#initialize(left_hash, right_hash) ⇒ HashDeepDiff

Returns a new instance of HashDeepDiff.



4
5
6
7
# File 'lib/object_deep_diff/hash_deep_diff.rb', line 4

def initialize(left_hash, right_hash)
  @left_hash = left_hash
  @right_hash = right_hash
end

Instance Method Details

#callObject



9
10
11
12
13
14
# File 'lib/object_deep_diff/hash_deep_diff.rb', line 9

def call
  (@left_hash.keys + @right_hash.keys).uniq.each_with_object({}) do |key, hash|
    comp_result = comparison(@left_hash[key], @right_hash[key])
    hash[key] = comp_result if comp_result && !comp_result.empty?
  end
end

#comparison(left_val, right_val) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/object_deep_diff/hash_deep_diff.rb', line 16

def comparison(left_val, right_val)
  case true
  when left_val.is_a?(Hash) && right_val.is_a?(Hash)
    self.class.new(left_val, right_val).call
  when left_val.is_a?(Array) && right_val.is_a?(Array)
    res = [left_val - right_val, right_val - left_val]
    res.all?(&:empty?) ? nil : res
  when left_val != right_val
    [left_val, right_val]
  end
end