Class: Ibex::Impact::CoverageImpact
- Inherits:
-
Object
- Object
- Ibex::Impact::CoverageImpact
- Defined in:
- lib/ibex/impact/coverage_impact.rb,
sig/ibex/impact/coverage_impact.rbs
Overview
Selects separated runtime coverage reports for affected productions.
Instance Attribute Summary collapse
- #reports ⇒ Array[Hash[Symbol, Object?]] readonly
- #status ⇒ String readonly
- #warnings ⇒ Array[String] readonly
Instance Method Summary collapse
- #coverage_status(reports) ⇒ String
-
#initialize(automaton, production_ids, reports) ⇒ CoverageImpact
constructor
A new instance of CoverageImpact.
- #select_reports(reports) ⇒ Array[Hash[Symbol, Object?]]
- #to_h ⇒ Hash[Symbol, Object?]
Constructor Details
#initialize(automaton, production_ids, reports) ⇒ CoverageImpact
Returns a new instance of CoverageImpact.
13 14 15 16 17 18 19 20 |
# File 'lib/ibex/impact/coverage_impact.rb', line 13 def initialize(automaton, production_ids, reports) @automaton = automaton @production_ids = production_ids.sort @warnings = [] @reports = select_reports(reports) @status = coverage_status(reports) freeze end |
Instance Attribute Details
#reports ⇒ Array[Hash[Symbol, Object?]] (readonly)
9 10 11 |
# File 'lib/ibex/impact/coverage_impact.rb', line 9 def reports @reports end |
#status ⇒ String (readonly)
8 9 10 |
# File 'lib/ibex/impact/coverage_impact.rb', line 8 def status @status end |
#warnings ⇒ Array[String] (readonly)
10 11 12 |
# File 'lib/ibex/impact/coverage_impact.rb', line 10 def warnings @warnings end |
Instance Method Details
#coverage_status(reports) ⇒ String
46 47 48 49 50 |
# File 'lib/ibex/impact/coverage_impact.rb', line 46 def coverage_status(reports) return "not_requested" if reports.empty? @reports.empty? ? "unmatched" : "matched" end |
#select_reports(reports) ⇒ Array[Hash[Symbol, Object?]]
30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/ibex/impact/coverage_impact.rb', line 30 def select_reports(reports) selected = reports.filter_map do |path, report| unless report.grammar_digest == @automaton.grammar_digest @warnings << "#{path}: coverage grammar digest does not match the analysis input; report ignored" next end hits = report.production_hits.keys & @production_ids next if hits.empty? { path: path, productions: hits.sort } end selected.sort_by { |entry| entry.fetch(:path) } end |
#to_h ⇒ Hash[Symbol, Object?]
23 24 25 |
# File 'lib/ibex/impact/coverage_impact.rb', line 23 def to_h { status: @status, reports: @reports } end |