Class: Covered::MarkdownSummary

Inherits:
Object
  • Object
show all
Defined in:
lib/covered/markdown_summary.rb

Overview

Generates a Markdown coverage summary.

Instance Method Summary collapse

Constructor Details

#initialize(threshold: 1.0) ⇒ MarkdownSummary

Initialize the report with an optional coverage threshold.



16
17
18
# File 'lib/covered/markdown_summary.rb', line 16

def initialize(threshold: 1.0)
	@threshold = threshold
end

Instance Method Details

#call(wrapper, output = $stdout) ⇒ Object

A coverage array gives, for each line, the number of line executions by the interpreter. A nil value means coverage is finished for this line (lines like else and end).



80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/covered/markdown_summary.rb', line 80

def call(wrapper, output = $stdout)
	output.puts "# Coverage Report"
	output.puts
	
	ordered = []
	buffer = StringIO.new
	
	statistics = self.each(wrapper) do |coverage|
		ordered << coverage unless coverage.complete?
	end
	
	statistics.print(output)
	
	if ordered.any?
		output.puts "", "\#\# Least Coverage:", ""
		ordered.sort_by!(&:missing_count).reverse!
		
		ordered.first(5).each do |coverage|
			path = wrapper.relative_path(coverage.path)
			
			output.puts "- `#{path}`: #{coverage.missing_count} lines not executed!"
		end
	end
	
	output.print(buffer.string)
end

#each(wrapper) ⇒ Object

Enumerate coverage below the threshold and return aggregate statistics.



25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/covered/markdown_summary.rb', line 25

def each(wrapper)
	statistics = Statistics.new
	
	wrapper.each do |coverage|
		statistics << coverage
		
		if @threshold.nil? or coverage.ratio < @threshold
			yield coverage
		end
	end
	
	return statistics
end

Print any annotations for the given line.



44
45
46
47
48
49
50
51
52
# File 'lib/covered/markdown_summary.rb', line 44

def print_annotations(output, coverage, line, line_offset)
	if annotations = coverage.annotations[line_offset]
		prefix = "#{line_offset}|".rjust(8) + "*|".rjust(8)
		output.write prefix
		
		output.write line.match(/^\s+/)
		output.puts "\# #{annotations.join(", ")}"
	end
end

Print a single source line.



65
66
67
68
69
70
71
72
73
74
75
# File 'lib/covered/markdown_summary.rb', line 65

def print_line(output, line, line_offset, count)
	prefix = "#{line_offset}|".rjust(8) + "#{count}|".rjust(8)
	
	output.write prefix
	output.write line
	
	# If there was no newline at end of file, we add one:
	unless line.end_with?($/)
		output.puts
	end
end

Print the line and hit-count header.



56
57
58
# File 'lib/covered/markdown_summary.rb', line 56

def print_line_header(output)
	output.puts "Line|".rjust(8) + "Hits|".rjust(8)
end