mumukit-core 1.8.0 → 1.9.0

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: 78e756bba387ca8a2bd6a2f49f60d4de28c3b6191fd74ebb7e4f6b1d0080b617
4
- data.tar.gz: 8b511a6014dfcec02463c3f8a72aa831d1252a323962d3d9fa3272693f07f33c
3
+ metadata.gz: 624663db1c388c4edce0d607f1932c049004246c6a90e1ec5719beeef6aacdee
4
+ data.tar.gz: 061f70162e4c1fd9418cc2084cb4679123b33bb6616be1e058812f6983721ea2
5
5
  SHA512:
6
- metadata.gz: 986c2b699aec7723dd4f30d22aa5766d4716f172c82551b11d55283b02f1af1d2898777f645fd68381166099af43c4ff0c7eabd8c8ad44216b376e7a207cacf1
7
- data.tar.gz: acb5580d6f0026eb444762f42e3b8ac2818b1575e3441d732e6a29b04c329031bc6da3f77091b92a6cf7d8af4683f6321cc80b4e247ba95866471fcec69674d1
6
+ metadata.gz: 10e9553c6876db756916559cfd9113a222e026eb0b21b9f2ee45333536032e269736ad21c0013f902184e49da576a6e1366cf13431eb341433c7034b730715c1
7
+ data.tar.gz: 38f22a0c8a1062674e14111491e93af03ab0b09934b7227fe39dc1c471d41d3be84dfd46254452f1078f403b483ae52294edc03de93902f21eadfc1685c81cf6
@@ -10,7 +10,7 @@ module Mumukit::Core
10
10
  end
11
11
 
12
12
  def config
13
- @config ||= defaults
13
+ @config ||= defaults.dup
14
14
  end
15
15
 
16
16
  def defaults
@@ -25,4 +25,37 @@ class Hash
25
25
  s2 = Set.new(other)
26
26
  { deletions: (s1 - s2).to_h, additions: (s2 - s1).to_h }
27
27
  end
28
+
29
+ def deep_diff(other)
30
+ diff = diff(other)
31
+ deep_diff = diff.dup
32
+ deep_deletions = deep_diff[:deletions]
33
+ deep_additions = deep_diff[:additions]
34
+
35
+ diff[:deletions].each do |k, v|
36
+ added_v = diff[:additions][k]
37
+ next if !diff[:additions].include?(k) || v.class != added_v.class
38
+ if Array === v
39
+ values = v.zip(added_v)
40
+ deep_deletions[k] = []
41
+ deep_additions[k] = []
42
+ values.select { |v1, v2| v1 != v2 }.each do |v1, v2|
43
+ if Hash === v1 && Hash === v2
44
+ sub_diff = v1.deep_diff(v2)
45
+ deep_deletions[k] << sub_diff[:deletions]
46
+ deep_additions[k] << sub_diff[:additions]
47
+ else
48
+ deep_deletions[k] << v1
49
+ deep_additions[k] << v2
50
+ end
51
+ end
52
+ elsif Hash === v
53
+ sub_diff = v.deep_diff(added_v)
54
+ deep_deletions[k] = sub_diff[:deletions]
55
+ deep_additions[k] = sub_diff[:additions]
56
+ end
57
+ end
58
+
59
+ deep_diff
60
+ end
28
61
  end
@@ -16,7 +16,7 @@
16
16
  message = proc do |actual|
17
17
  expected_hash = as_matcher_json(expected, options)
18
18
  actual_hash = as_matcher_json(actual, options)
19
- diff = expected_hash.diff(actual_hash)
19
+ diff = expected_hash.deep_diff(actual_hash)
20
20
  <<-EOS
21
21
  expected: #{expected_hash} (#{expected.class})
22
22
  got: #{actual_hash} (#{actual.class})
@@ -1,5 +1,5 @@
1
1
  module Mumukit
2
2
  module Core
3
- VERSION = '1.8.0'
3
+ VERSION = '1.9.0'
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mumukit-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.8.0
4
+ version: 1.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Franco Leonardo Bulgarelli
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-11-06 00:00:00.000000000 Z
11
+ date: 2018-11-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler