hash_deep_diff 0.3.1 → 0.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 184fe8aaacd6b6d10635f8ff8f0986381c8e2d907b14a80d86050aea75896136
|
4
|
+
data.tar.gz: e4e33cc8c4ce40d84b0fbbe78fa380d1d62f65805f3ce5dc01e2049100db5b16
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
-
|
60
|
-
|
61
|
-
|
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
|
-
|
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
|
@@ -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
|
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} = #{
|
25
|
-
+right#{diff_prefix} = #{
|
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} = #{
|
37
|
-
+right#{diff_prefix} = #{
|
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
|
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.
|
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
|
+
date: 2022-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|