babel_diff 1.0.2 → 1.0.3

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
  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