Class: Pinspec::Emit::StabilityFilter

Inherits:
Object
  • Object
show all
Defined in:
lib/pinspec/emit/stability_filter.rb

Defined Under Namespace

Classes: Report, Verdict

Constant Summary collapse

COMPARED =
%w[status return_value error enqueued_jobs mail_deliveries db_delta].freeze
OPTIONAL =
%w[sql_fingerprints].freeze
NEVER_COMPARED =
%w[duration_ms flags setup_error].freeze
MAX_DIFF_LINES =
10

Instance Method Summary collapse

Constructor Details

#initialize(compare_sql: false) ⇒ StabilityFilter

Returns a new instance of StabilityFilter.



44
45
46
# File 'lib/pinspec/emit/stability_filter.rb', line 44

def initialize(compare_sql: false)
  @compare_sql = compare_sql
end

Instance Method Details

#compared_fieldsObject



48
49
50
# File 'lib/pinspec/emit/stability_filter.rb', line 48

def compared_fields
  @compare_sql ? COMPARED + OPTIONAL : COMPARED
end

#filter(runs) ⇒ Object

Raises:

  • (ArgumentError)


52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/pinspec/emit/stability_filter.rb', line 52

def filter(runs)
  first, *rest = Array(runs)
  raise ArgumentError, "stability needs at least one run" if first.nil?

  verdicts = first.observations.map do |observation|
    others = rest.map { |run| run.observation(observation["case_id"]) }

    verdict_for(observation, others)
  end

  Report.new(verdicts: verdicts, runs: Array(runs).size, compared_fields: compared_fields)
end