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
|