hash_deep_diff 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 43343dfc0eed6ad00b863b65b535f206b6a14544c8c23560f01954e16c7ef19b
4
- data.tar.gz: 613e764bf1a0390bfba99eceaa6e65e69355903858c229f8d150661c8a923af4
3
+ metadata.gz: 184fe8aaacd6b6d10635f8ff8f0986381c8e2d907b14a80d86050aea75896136
4
+ data.tar.gz: e4e33cc8c4ce40d84b0fbbe78fa380d1d62f65805f3ce5dc01e2049100db5b16
5
5
  SHA512:
6
- metadata.gz: 701aad97711690dbaff2719a3c0f6a4c0bbbf2a3ffdcd088b6451803c392a019dd37dba9b3cffc3a7843862b8341d6a7e17eaa2935aba8be4f069fb81160a052
7
- data.tar.gz: 920a5d22b16bb78866c752c5a60469f37af9d58f8f0f3852c1822f594223f995ed4c87f14777d3dc857a73310d1c851581edd9fdba36bc3b433d069133211d95
6
+ metadata.gz: b299b5217a613175c47e5d56da723e0691cf7e2344abc9bbf9fab9525c96c776616971636365f0c2067f05ec8d22c205c98d896df4b1b17ee73f3541bb4e5736
7
+ data.tar.gz: 159ffbeb7cdef03c130ed356f965379db05ebf8adec8b7e5186e1a45b4cbcc68489ce17b92a7e2bc38e58cdd2fafcb31c573703f566f348b0efdc0ef8c504d4e
@@ -26,49 +26,20 @@ module HashDeepDiff
26
26
  @path = path.to_ary
27
27
  end
28
28
 
29
- def extra_report(memo, keys, value)
30
- if value.respond_to?(:to_hash)
31
- value.each_key { |key| extra_report(memo, keys + [key], value[key]) }
32
- else
33
- memo << Delta::Left.new(path: keys, value: value)
34
- end
35
- end
36
-
37
- def missing_report(memo, keys, value)
38
- if value.respond_to?(:to_hash)
39
- value.each_key { |key| missing_report(memo, keys + [key], value[key]) }
40
- else
41
- memo << Delta::Right.new(path: keys, value: value)
42
- end
43
- end
44
-
45
- def delta_report(memo, keys, value)
46
- if value.respond_to?(:to_hash) && value.keys != %i[left right]
47
- value.each_key { |key| delta_report(memo, keys + [key], value[key]) }
48
- elsif value.instance_of?(Array) && value.size == 3 && value.all? { |el| el.respond_to?(:to_hash) }
49
- # [{}, {}, {:i=>:i}]
50
- extra_report(memo, keys, value[0]) unless value[0].empty?
51
- delta_report(memo, keys, value[1]) unless value[1].empty?
52
- missing_report(memo, keys, value[2]) unless value[2].empty?
53
- else
54
- memo << Delta::Inner.new(path: keys, value: value)
55
- end
56
- end
57
-
58
29
  def deep_delta(&block)
59
- result = delta(&block)
60
-
61
- result.each_with_object([]) do |diff, memo|
62
- if left.dig(*diff.path).respond_to?(:to_hash) && right.dig(*diff.path).respond_to?(:to_hash)
63
- self.class.new(left.dig(*diff.path), right.dig(*diff.path), path + diff.path).diff.each do |diff|
64
- memo << diff
65
- end
30
+ delta(&block).flat_map do |diff|
31
+ if diff.complex?
32
+ self.class.new(diff.left, diff.right, diff.path).diff
66
33
  else
67
- memo << diff
34
+ diff
68
35
  end
69
36
  end
70
37
  end
71
38
 
39
+ def left_delta
40
+ left_diff_keys.map { |key| Delta::Left.new(path: path + [key], value: left[key]) }
41
+ end
42
+
72
43
  def right_delta
73
44
  right_diff_keys.map { |key| Delta::Right.new(path: path + [key], value: right[key]) }
74
45
  end
@@ -86,10 +57,6 @@ module HashDeepDiff
86
57
  end
87
58
  end
88
59
 
89
- def left_delta
90
- left_diff_keys.map { |key| Delta::Left.new(path: path + [key], value: left[key]) }
91
- end
92
-
93
60
  def common_keys
94
61
  left.keys & right.keys
95
62
  end
@@ -42,6 +42,10 @@ module HashDeepDiff
42
42
  def to_str
43
43
  raise NoMethodError, "expected #{self.class} to implement #to_str"
44
44
  end
45
+
46
+ def complex?
47
+ raise NoMethodError, "expected #{self.class} to implement #complex?"
48
+ end
45
49
  end
46
50
 
47
51
  # Override #initialize method
@@ -13,16 +13,12 @@ module HashDeepDiff
13
13
  def to_str
14
14
  if @delta.values.first.respond_to?(:to_hash)
15
15
  if @delta.values.first.keys == %i[left right]
16
- if @delta.values.first[:left].respond_to?(:to_hash) && @delta.values.first[:right].respond_to?(:to_hash)
17
- HashDeepDiff::Comparison.new(
18
- @delta.values.first[:left],
19
- @delta.values.first[:right],
20
- path
21
- ).report
16
+ if complex?
17
+ HashDeepDiff::Comparison.new(left, right, path).report
22
18
  else
23
19
  lines = <<~Q
24
- -left#{diff_prefix} = #{@delta.values.first[:left]}
25
- +right#{diff_prefix} = #{@delta.values.first[:right]}
20
+ -left#{diff_prefix} = #{left}
21
+ +right#{diff_prefix} = #{right}
26
22
  Q
27
23
  lines.strip
28
24
  end
@@ -33,12 +29,24 @@ module HashDeepDiff
33
29
  end
34
30
  else
35
31
  lines = <<~Q
36
- -left#{diff_prefix} = #{@delta.values.first[:left]}
37
- +right#{diff_prefix} = #{@delta.values.first[:right]}
32
+ -left#{diff_prefix} = #{left}
33
+ +right#{diff_prefix} = #{right}
38
34
  Q
39
35
  lines.strip
40
36
  end
41
37
  end
38
+
39
+ def complex?
40
+ left.respond_to?(:to_hash) && right.respond_to?(:to_hash)
41
+ end
42
+
43
+ def left
44
+ @delta.values.first[:left]
45
+ end
46
+
47
+ def right
48
+ @delta.values.first[:right]
49
+ end
42
50
  end
43
51
  end
44
52
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HashDeepDiff
4
- VERSION = '0.3.1'
4
+ VERSION = '0.3.2'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: hash_deep_diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bohdan Pohorilets
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-11 00:00:00.000000000 Z
11
+ date: 2022-04-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler