Module: Polyrun::Coverage::ExampleDiff
- Defined in:
- lib/polyrun/coverage/example_diff.rb,
lib/polyrun/coverage/example_diff_snapshot.rb,
lib/polyrun/coverage/example_diff_track_filter.rb
Overview
Per-example line hit deltas from stdlib Coverage.peek_result snapshots.
Defined Under Namespace
Modules: Snapshot Classes: TrackFilter
Class Method Summary collapse
- .apply_track_under(delta, root:, track_under:, ignore_paths: []) ⇒ Object
- .coverage_active? ⇒ Boolean
-
.diff(before_blob, after_source, root: nil, track_under: nil, ignore_paths: nil) ⇒ Object
after_sourcemay be a normalized blob or a rawCoverage.peek_resulthash. - .diff_against_peek(before_blob, after_raw, filter: nil) ⇒ Object
- .diff_blobs(before_blob, after_blob, filter: nil) ⇒ Object
- .filter_lines(lines, root:, track_under:, ignore_paths: []) ⇒ Object
- .line_array(entry) ⇒ Object
-
.peek_blob(root: nil, track_under: nil, ignore_paths: nil) ⇒ Hash{String=>Hash}
Path => sparse line snapshot.
-
.snapshot_peek(raw, root: nil, track_under: nil, ignore_paths: nil) ⇒ Object
Frozen snapshot for storage between peeks (stdlib mutates line arrays in place).
Class Method Details
.apply_track_under(delta, root:, track_under:, ignore_paths: []) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/polyrun/coverage/example_diff.rb', line 73 def apply_track_under(delta, root:, track_under:, ignore_paths: []) filtered = filter_lines(delta[:lines] || [], root: root, track_under: track_under, ignore_paths: ignore_paths) unique = filtered.size churn = filtered.sum { |(_path, _line, hit_delta)| hit_delta } max_churn = filtered.map { |(_path, _line, hit_delta)| hit_delta }.max || 0 { unique_lines: unique, line_churn: churn, max_line_churn: max_churn, lines: filtered } end |
.coverage_active? ⇒ Boolean
50 51 52 |
# File 'lib/polyrun/coverage/example_diff.rb', line 50 def coverage_active? defined?(::Coverage) && ::Coverage.respond_to?(:running?) && ::Coverage.running? end |
.diff(before_blob, after_source, root: nil, track_under: nil, ignore_paths: nil) ⇒ Object
after_source may be a normalized blob or a raw Coverage.peek_result hash.
41 42 43 44 45 46 47 48 |
# File 'lib/polyrun/coverage/example_diff.rb', line 41 def diff(before_blob, after_source, root: nil, track_under: nil, ignore_paths: nil) filter = track_filter_for(root: root, track_under: track_under, ignore_paths: ignore_paths) if raw_peek_result?(after_source) diff_against_peek(before_blob, after_source, filter: filter) else diff_blobs(before_blob, after_source, filter: filter) end end |
.diff_against_peek(before_blob, after_raw, filter: nil) ⇒ Object
61 62 63 64 65 66 |
# File 'lib/polyrun/coverage/example_diff.rb', line 61 def diff_against_peek(before_blob, after_raw, filter: nil) before_blob ||= {} after_raw ||= {} paths = collect_diff_paths(before_blob, after_raw, filter: filter) diff_paths(paths, before_blob, after_raw, raw_after: true) end |
.diff_blobs(before_blob, after_blob, filter: nil) ⇒ Object
54 55 56 57 58 59 |
# File 'lib/polyrun/coverage/example_diff.rb', line 54 def diff_blobs(before_blob, after_blob, filter: nil) before_blob ||= {} after_blob ||= {} paths = collect_diff_paths(before_blob, after_blob, filter: filter) diff_paths(paths, before_blob, after_blob, raw_after: false) end |
.filter_lines(lines, root:, track_under:, ignore_paths: []) ⇒ Object
68 69 70 71 |
# File 'lib/polyrun/coverage/example_diff.rb', line 68 def filter_lines(lines, root:, track_under:, ignore_paths: []) filter = TrackFilter.new(root: root, track_under: track_under, ignore_paths: ignore_paths) lines.select { |path, _line, _delta| filter.include_path?(path) } end |
.line_array(entry) ⇒ Object
86 87 88 89 90 91 92 |
# File 'lib/polyrun/coverage/example_diff.rb', line 86 def line_array(entry) return [] unless entry.is_a?(Hash) return [] if entry["sparse"] arr = entry["lines"] || entry[:lines] arr.is_a?(Array) ? arr : [] end |
.peek_blob(root: nil, track_under: nil, ignore_paths: nil) ⇒ Hash{String=>Hash}
Returns path => sparse line snapshot.
11 12 13 14 15 16 17 18 19 20 |
# File 'lib/polyrun/coverage/example_diff.rb', line 11 def peek_blob(root: nil, track_under: nil, ignore_paths: nil) return {} unless coverage_active? snapshot_peek( ::Coverage.peek_result, root: root, track_under: track_under, ignore_paths: ignore_paths ) end |
.snapshot_peek(raw, root: nil, track_under: nil, ignore_paths: nil) ⇒ Object
Frozen snapshot for storage between peeks (stdlib mutates line arrays in place).
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/polyrun/coverage/example_diff.rb', line 23 def snapshot_peek(raw, root: nil, track_under: nil, ignore_paths: nil) return {} if raw.nil? || raw.empty? filter = track_filter_for(root: root, track_under: track_under, ignore_paths: ignore_paths) out = {} raw.each do |path, coverage_entry| next unless coverage_entry.is_a?(Hash) next if filter && !filter.include_path?(path.to_s) lines = coverage_entry[:lines] || coverage_entry["lines"] next unless lines.is_a?(Array) out[path.to_s] = Snapshot.sparse_snapshot_lines(lines) end out end |