Module: Kettle::Drift::Process::CalculateDiff

Defined in:
lib/kettle/drift/process/calculate_diff.rb

Class Method Summary collapse

Class Method Details

.call(new_results, old_results) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/kettle/drift/process/calculate_diff.rb', line 8

def call(new_results, old_results)
  new_entries = flatten_results(new_results)
  return Kettle::Drift::Diff.new(state: :complete, fixed_entries: [], new_entries: [], unchanged_entries: []) if new_entries.empty? && old_results.nil?
  return Kettle::Drift::Diff.new(state: :new, new_entries: new_entries, unchanged_entries: []) if old_results.nil?

  old_entries = flatten_results(old_results)
  new_map = index_entries(new_entries)
  old_map = index_entries(old_entries)

  added = (new_map.keys - old_map.keys).map { |key| new_map.fetch(key) }
  fixed = (old_map.keys - new_map.keys).map { |key| old_map.fetch(key) }
  unchanged = (new_map.keys & old_map.keys).map { |key| new_map.fetch(key) }

  state = if new_entries.empty?
    :complete
  elsif added.empty? && fixed.empty?
    :no_changes
  elsif added.empty?
    :better
  elsif fixed.empty?
    :worse
  else
    :updated
  end

  Kettle::Drift::Diff.new(
    state: state,
    new_entries: added,
    fixed_entries: fixed,
    unchanged_entries: unchanged,
  )
end