Class: RSpec::Hermetic::Diff

Inherits:
Object
  • Object
show all
Defined in:
lib/rspec/hermetic/diff.rb

Class Method Summary collapse

Class Method Details

.between(before_snapshot, after_snapshot) ⇒ Object



35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/rspec/hermetic/diff.rb', line 35

def self.between(before_snapshot, after_snapshot)
  changes = []
  probe_names = before_snapshot.data.keys | after_snapshot.data.keys

  probe_names.each do |probe|
    before_data = before_snapshot.data.fetch(probe, {})
    after_data = after_snapshot.data.fetch(probe, {})
    keys = before_data.keys | after_data.keys

    keys.each do |key|
      before_value = before_data.key?(key) ? before_data[key] : Change::MISSING
      after_value = after_data.key?(key) ? after_data[key] : Change::MISSING
      next if before_value == after_value

      changes << Change.new(probe: probe, key: key, before: before_value, after: after_value)
    end
  end

  ChangeSet.new(
    changes: changes,
    before_errors: before_snapshot.errors,
    after_errors: after_snapshot.errors,
    before_timings: before_snapshot.timings,
    after_timings: after_snapshot.timings
  )
end