babel_diff 1.0.2 → 1.0.3

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
  SHA1:
3
- metadata.gz: 40e5cff53898404621639f5920c9187d447a5944
4
- data.tar.gz: cfb4ed4465ac118ee9886269eb81f91135156037
3
+ metadata.gz: 636cfb635813720ebceed48ded1eea465486bcde
4
+ data.tar.gz: a645857700b111c53dd4f467e87e9cd66a247e97
5
5
  SHA512:
6
- metadata.gz: c8ca5d822dbc325c367eedc74e087d64fb1d0b4eb90065febbd650f089475433767677905e952ed4c6cc50fbc7a89855c28436aeab95cdd98b30dc3d6fec577a
7
- data.tar.gz: b94bc9b0cc0f06be9a5f753797c35e68deaf4f10c2692905d8fecdf6f7334c72bce79085abc63148cf4b31f2104d2416d04cab23fdbc0f4af98227d555c07afd
6
+ metadata.gz: db1ff545db9294c18c2261482b90922cc71f800806a8fef30463a53af59718c54d3d71087cc78d0db887614e1ab4f874a88fec221922b6f9e706194dc70c0f0c
7
+ data.tar.gz: ee0c4a2297c52df41a54e851afeb89bfa42b9cce3c6d6e4086d1e4abab70b130be44c1f4a1beedcecaa83f1dbfe02c7efbc3b3ef72bed39b06e3a2897ee6d3e3
@@ -1,3 +1,3 @@
1
1
  module BabelDiff
2
- VERSION = "1.0.2"
2
+ VERSION = "1.0.3"
3
3
  end
@@ -4,71 +4,48 @@ require 'pry'
4
4
  module BabelDiff
5
5
  class YamlDiffer < Struct.new(:current_version, :previous_version)
6
6
  def updates
7
- process_difference(current_version_hash) unless @processed
7
+ process_difference unless @processed
8
8
  @processed = true
9
- updates_hash.to_yaml
9
+
10
+ unflatten(updates_hash).to_yaml
10
11
  end
11
12
 
12
13
  def additions
13
- process_difference(current_version_hash) unless @processed
14
+ process_difference unless @processed
14
15
  @processed = true
15
- additions_hash.to_yaml
16
+
17
+ unflatten(additions_hash).to_yaml
16
18
  end
17
19
 
18
- def process_difference(current_hash, keys = [])
19
- current_hash.each do |key, value|
20
- keys << key
21
- if value.is_a? Hash
22
- process_difference(value, keys)
23
- else
24
- if previous_version_is_missing_key?(keys)
25
- add_key_to_additions(keys, value)
26
- elsif previous_version_value_is_different?(keys, value)
27
- add_key_to_updates(keys, value)
28
- end
20
+ def process_difference
21
+ current = HashFlattener.new(current_version_hash).flatten
22
+ previous = HashFlattener.new(previous_version_hash).flatten
23
+
24
+ current.each do |k,v|
25
+ if ! previous.has_key?(k)
26
+ additions_hash[k] = v
27
+ elsif previous[k] != v
28
+ updates_hash[k] = v
29
29
  end
30
- keys.pop
31
30
  end
32
31
  end
33
32
 
34
- def previous_version_is_missing_key?(keys)
35
- current_value = previous_version_hash
36
- keys.each do |key|
37
- current_value = current_value[key]
38
- return true if current_value.nil?
39
- end
40
33
 
41
- return false
42
- end
34
+ private
43
35
 
44
- def previous_version_value_is_different?(keys, value)
45
- current_value = previous_version_hash
46
- keys.each do |key|
47
- current_value = current_value[key]
48
- end
36
+ def unflatten(hash)
37
+ {}.tap do |unflattened_hash|
38
+ hash.each do |k,v|
39
+ keys = k.split(".")
40
+ current_hash = unflattened_hash
49
41
 
50
- return current_value != value
51
- end
42
+ keys[0...-1].each { |key| current_hash = current_hash[key] ||= {} }
52
43
 
53
- def add_key_to_updates(keys, value)
54
- current_value = updates_hash
55
- keys[0...-1].each do |key|
56
- current_value = current_value[key] ||= {}
57
- end
58
- current_value[keys.last] = value
59
- end
60
-
61
- def add_key_to_additions(keys, value)
62
- current_value = additions_hash
63
- keys[0...-1].each do |key|
64
- current_value = current_value[key] ||= {}
44
+ current_hash[keys.last] = v
45
+ end
65
46
  end
66
- current_value[keys.last] = value
67
47
  end
68
48
 
69
-
70
- private
71
-
72
49
  def updates_hash
73
50
  @updated_hash ||= {}
74
51
  end
@@ -85,4 +62,24 @@ module BabelDiff
85
62
  YAML.load(current_version) || {}
86
63
  end
87
64
  end
65
+
66
+ class HashFlattener < Struct.new(:hash)
67
+
68
+ def flatten(current_hash = hash, keys = [])
69
+ current_hash.each do |key, value|
70
+ new_keys = keys.dup << key
71
+ if value.is_a? Hash
72
+ flatten(value, new_keys)
73
+ else
74
+ flat_hash[new_keys.join(".")] = value
75
+ end
76
+ end
77
+
78
+ flat_hash
79
+ end
80
+
81
+ def flat_hash
82
+ @_flat_hash ||= {}
83
+ end
84
+ end
88
85
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: babel_diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan McGarvey