Module: RSpec::Signal::Grouper

Defined in:
lib/rspec/signal/grouper.rb

Overview

Collapses failures that share a fingerprint into Groups.

Ordering is deterministic: biggest group first, ties broken by the order the failures were seen, so two runs of the same suite produce byte-identical reports.

Class Method Summary collapse

Class Method Details

.call(failures) ⇒ Array<Group>

Parameters:

Returns:



15
16
17
18
19
20
21
22
23
24
25
# File 'lib/rspec/signal/grouper.rb', line 15

def call(failures)
  groups = {}

  failures.each_with_index do |failure, index|
    key = failure.fingerprint.digest
    groups[key] ||= Group.new(fingerprint: failure.fingerprint, first_seen: index)
    groups[key] << failure
  end

  groups.values.sort_by { |group| [-group.size, group.first_seen] }
end