Module: SixthSense::Runners::CoverageSnapshot

Defined in:
lib/sixth_sense/runners/coverage_snapshot.rb

Class Method Summary collapse

Class Method Details

.branch_executed?(branch) ⇒ Boolean

Returns:

  • (Boolean)


55
56
57
58
59
60
61
# File 'lib/sixth_sense/runners/coverage_snapshot.rb', line 55

def branch_executed?(branch)
  values = branch.respond_to?(:last) ? branch.last : branch
  return values.to_i.positive? if values.is_a?(Integer)
  return values.values.any? { |count| count.to_i.positive? } if values.respond_to?(:values)

  false
end

.branch_key(branch) ⇒ Object



51
52
53
# File 'lib/sixth_sense/runners/coverage_snapshot.rb', line 51

def branch_key(branch)
  branch.respond_to?(:first) ? branch.first.inspect : branch.inspect
end

.covered_branches(branches) ⇒ Object



37
38
39
40
41
42
43
# File 'lib/sixth_sense/runners/coverage_snapshot.rb', line 37

def covered_branches(branches)
  return [] unless branches.respond_to?(:each)

  branches.each_with_index.filter_map do |branch, index|
    "#{branch_key(branch)}:#{index}" if branch_executed?(branch)
  end
end

.covered_lines(line_counts) ⇒ Object



29
30
31
# File 'lib/sixth_sense/runners/coverage_snapshot.rb', line 29

def covered_lines(line_counts)
  Array(line_counts).each_with_index.filter_map { |count, index| index + 1 if count.to_i.positive? }
end

.executable_branches(branches) ⇒ Object



45
46
47
48
49
# File 'lib/sixth_sense/runners/coverage_snapshot.rb', line 45

def executable_branches(branches)
  return [] unless branches.respond_to?(:each)

  branches.each_with_index.map { |branch, index| "#{branch_key(branch)}:#{index}" }
end

.executable_lines(line_counts) ⇒ Object



33
34
35
# File 'lib/sixth_sense/runners/coverage_snapshot.rb', line 33

def executable_lines(line_counts)
  Array(line_counts).each_with_index.filter_map { |count, index| index + 1 unless count.nil? }
end

.snapshot_for(result) ⇒ Object



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/sixth_sense/runners/coverage_snapshot.rb', line 8

def snapshot_for(result)
  lines = {}
  executable_lines = {}
  branches = {}
  executable_branches = {}
  result.each do |path, payload|
    line_counts = payload.is_a?(Hash) ? payload[:lines] || payload["lines"] : payload
    branch_counts = payload[:branches] || payload["branches"] if payload.is_a?(Hash)
    lines[path] = covered_lines(line_counts)
    executable_lines[path] = executable_lines(line_counts)
    branches[path] = covered_branches(branch_counts)
    executable_branches[path] = executable_branches(branch_counts)
  end
  {
    "lines" => lines,
    "executable_lines" => executable_lines,
    "branches" => branches,
    "executable_branches" => executable_branches
  }
end