Class: BabelDiff::YamlDiffer

Inherits:
Struct
  • Object
show all
Defined in:
lib/babel_diff/yaml_differ.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#current_versionObject

Returns the value of attribute current_version

Returns:

  • (Object)

    the current value of current_version



5
6
7
# File 'lib/babel_diff/yaml_differ.rb', line 5

def current_version
  @current_version
end

#previous_versionObject

Returns the value of attribute previous_version

Returns:

  • (Object)

    the current value of previous_version



5
6
7
# File 'lib/babel_diff/yaml_differ.rb', line 5

def previous_version
  @previous_version
end

Instance Method Details

#add_key_to_additions(keys, value) ⇒ Object



61
62
63
64
65
66
67
# File 'lib/babel_diff/yaml_differ.rb', line 61

def add_key_to_additions(keys, value)
  current_value = additions_hash
  keys[0...-1].each do |key|
    current_value = current_value[key] ||= {}
  end
  current_value[keys.last] = value
end

#add_key_to_updates(keys, value) ⇒ Object



53
54
55
56
57
58
59
# File 'lib/babel_diff/yaml_differ.rb', line 53

def add_key_to_updates(keys, value)
  current_value = updates_hash
  keys[0...-1].each do |key|
    current_value = current_value[key] ||= {}
  end
  current_value[keys.last] = value
end

#additionsObject



12
13
14
15
16
# File 'lib/babel_diff/yaml_differ.rb', line 12

def additions
  process_difference(current_version_hash) unless @processed
  @processed = true
  additions_hash.to_yaml
end

#previous_version_is_missing_key?(keys) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
40
41
42
# File 'lib/babel_diff/yaml_differ.rb', line 34

def previous_version_is_missing_key?(keys)
  current_value = previous_version_hash
  keys.each do |key|
    current_value = current_value[key]
    return true if current_value.nil?
  end

  return false
end

#previous_version_value_is_different?(keys, value) ⇒ Boolean

Returns:

  • (Boolean)


44
45
46
47
48
49
50
51
# File 'lib/babel_diff/yaml_differ.rb', line 44

def previous_version_value_is_different?(keys, value)
  current_value = previous_version_hash
  keys.each do |key|
    current_value = current_value[key]
  end

  return current_value != value
end

#process_difference(current_hash, keys = []) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/babel_diff/yaml_differ.rb', line 18

def process_difference(current_hash, keys = [])
  current_hash.each do |key, value|
    keys << key
    if value.is_a? Hash
      process_difference(value, keys)
    else
      if previous_version_is_missing_key?(keys)
        add_key_to_additions(keys, value)
      elsif  previous_version_value_is_different?(keys, value)
        add_key_to_updates(keys, value)
      end
    end
    keys.pop
  end
end

#updatesObject



6
7
8
9
10
# File 'lib/babel_diff/yaml_differ.rb', line 6

def updates
  process_difference(current_version_hash) unless @processed
  @processed = true
  updates_hash.to_yaml
end