simplecov-inline-html 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/.travis.yml +14 -0
- data/Gemfile +12 -0
- data/LICENSE +21 -0
- data/README.md +13 -0
- data/Rakefile +2 -0
- data/assets/application.css +812 -0
- data/assets/application.js +1707 -0
- data/assets/favicon_green.png +0 -0
- data/assets/favicon_red.png +0 -0
- data/assets/favicon_yellow.png +0 -0
- data/assets/loading.gif +0 -0
- data/assets/magnify.png +0 -0
- data/lib/simplecov-inline-html.rb +104 -0
- data/lib/simplecov-inline-html/version.rb +7 -0
- data/simplecov-inline-html.gemspec +22 -0
- data/views/file_list.erb +45 -0
- data/views/layout.erb +44 -0
- data/views/source_file.erb +23 -0
- metadata +77 -0
Binary file
|
Binary file
|
Binary file
|
data/assets/loading.gif
ADDED
Binary file
|
data/assets/magnify.png
ADDED
Binary file
|
@@ -0,0 +1,104 @@
|
|
1
|
+
require "erb"
|
2
|
+
require "cgi"
|
3
|
+
require "fileutils"
|
4
|
+
require "digest/sha1"
|
5
|
+
require "time"
|
6
|
+
|
7
|
+
# Ensure we are using a compatible version of SimpleCov
|
8
|
+
major, minor, patch = SimpleCov::VERSION.scan(/\d+/).first(3).map(&:to_i)
|
9
|
+
if major < 0 || minor < 9 || patch < 0
|
10
|
+
raise "The version of SimpleCov you are using is too old. "\
|
11
|
+
"Please update with `gem install simplecov` or `bundle update simplecov`"
|
12
|
+
end
|
13
|
+
|
14
|
+
module SimpleCov
|
15
|
+
module Formatter
|
16
|
+
class InlineHTMLFormatter
|
17
|
+
def format(result)
|
18
|
+
File.open(File.join(output_path, "index.html"), "wb") do |file|
|
19
|
+
file.puts template("layout").result(binding)
|
20
|
+
end
|
21
|
+
puts output_message(result)
|
22
|
+
end
|
23
|
+
|
24
|
+
def output_message(result)
|
25
|
+
"Coverage report generated for #{result.command_name} to #{output_path}. #{result.covered_lines} / #{result.total_lines} LOC (#{result.covered_percent.round(2)}%) covered."
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def file(name)
|
31
|
+
File.read(File.join(File.dirname(__FILE__), name))
|
32
|
+
end
|
33
|
+
|
34
|
+
# Returns the an erb instance for the template of given name
|
35
|
+
def template(name)
|
36
|
+
ERB.new(file("../views/#{name}.erb"))
|
37
|
+
end
|
38
|
+
|
39
|
+
def output_path
|
40
|
+
SimpleCov.coverage_path
|
41
|
+
end
|
42
|
+
|
43
|
+
# Returns the html for the given source_file
|
44
|
+
def formatted_source_file(source_file)
|
45
|
+
template("source_file").result(binding)
|
46
|
+
end
|
47
|
+
|
48
|
+
# Returns a table containing the given source files
|
49
|
+
def formatted_file_list(title, source_files)
|
50
|
+
title_id = title.gsub(/^[^a-zA-Z]+/, "").gsub(/[^a-zA-Z0-9\-\_]/, "")
|
51
|
+
# Silence a warning by using the following variable to assign to itself:
|
52
|
+
# "warning: possibly useless use of a variable in void context"
|
53
|
+
# The variable is used by ERB via binding.
|
54
|
+
title_id = title_id
|
55
|
+
template("file_list").result(binding)
|
56
|
+
end
|
57
|
+
|
58
|
+
def data_image(filename)
|
59
|
+
_name, type = filename.split(".")
|
60
|
+
"data:image/#{type};base64,#{Base64.encode64(file("../assets/#{filename}"))}"
|
61
|
+
end
|
62
|
+
|
63
|
+
def coverage_css_class(covered_percent)
|
64
|
+
if covered_percent > 90
|
65
|
+
"green"
|
66
|
+
elsif covered_percent > 80
|
67
|
+
"yellow"
|
68
|
+
else
|
69
|
+
"red"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
def strength_css_class(covered_strength)
|
74
|
+
if covered_strength > 1
|
75
|
+
"green"
|
76
|
+
elsif covered_strength == 1
|
77
|
+
"yellow"
|
78
|
+
else
|
79
|
+
"red"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
# Return a (kind of) unique id for the source file given. Uses SHA1 on path for the id
|
84
|
+
def id(source_file)
|
85
|
+
Digest::SHA1.hexdigest(source_file.filename)
|
86
|
+
end
|
87
|
+
|
88
|
+
def timeago(time)
|
89
|
+
"<abbr class=\"timeago\" title=\"#{time.iso8601}\">#{time.iso8601}</abbr>"
|
90
|
+
end
|
91
|
+
|
92
|
+
def shortened_filename(source_file)
|
93
|
+
source_file.filename.sub(SimpleCov.root, ".").gsub(/^\.\//, "")
|
94
|
+
end
|
95
|
+
|
96
|
+
def link_to_source_file(source_file)
|
97
|
+
%(<a href="##{id source_file}" class="src_link" title="#{shortened_filename source_file}">#{shortened_filename source_file}</a>)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__)))
|
104
|
+
require "simplecov-inline-html/version"
|
@@ -0,0 +1,22 @@
|
|
1
|
+
$LOAD_PATH.push File.expand_path("../lib", __FILE__)
|
2
|
+
require "simplecov-inline-html/version"
|
3
|
+
|
4
|
+
Gem::Specification.new do |gem|
|
5
|
+
gem.name = "simplecov-inline-html"
|
6
|
+
gem.version = SimpleCov::Formatter::InlineHTMLFormatter::VERSION
|
7
|
+
gem.platform = Gem::Platform::RUBY
|
8
|
+
gem.authors = ["Jon Rowe"]
|
9
|
+
gem.email = ["hello@jonrowe.co.uk"]
|
10
|
+
gem.homepage = "https://github.com/JonRowe/simplecov-inline-html"
|
11
|
+
gem.description = %(Inline HTML formatter for SimpleCov code coverage tool.)
|
12
|
+
gem.summary = gem.description
|
13
|
+
gem.license = "MIT"
|
14
|
+
|
15
|
+
gem.required_ruby_version = "~> 2.4"
|
16
|
+
gem.add_development_dependency "bundler", "~> 1.9"
|
17
|
+
|
18
|
+
gem.files = `git ls-files`.split("\n")
|
19
|
+
gem.test_files = `git ls-files -- {spec}/*`.split("\n")
|
20
|
+
gem.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename(f) }
|
21
|
+
gem.require_paths = ["lib"]
|
22
|
+
end
|
data/views/file_list.erb
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
<div class="file_list_container" id="<%= title_id %>">
|
2
|
+
<h2>
|
3
|
+
<span class="group_name"><%= title %></span>
|
4
|
+
(<span class="covered_percent"><span class="<%= coverage_css_class(source_files.covered_percent) %>"><%= source_files.covered_percent.round(2) %>%</span></span>
|
5
|
+
covered at
|
6
|
+
<span class="covered_strength">
|
7
|
+
<span class="<%= strength_css_class(source_files.covered_strength) %>">
|
8
|
+
<%= source_files.covered_strength.round(2) %>
|
9
|
+
</span>
|
10
|
+
</span> hits/line)
|
11
|
+
</h2>
|
12
|
+
<a name="<%= title_id %>"></a>
|
13
|
+
<div>
|
14
|
+
<b><%= source_files.length %></b> files in total.
|
15
|
+
<b><%= source_files.lines_of_code %></b> relevant lines.
|
16
|
+
<span class="green"><b><%= source_files.covered_lines %></b> lines covered</span> and
|
17
|
+
<span class="red"><b><%= source_files.missed_lines %></b> lines missed </span>
|
18
|
+
</div>
|
19
|
+
<table class="file_list">
|
20
|
+
<thead>
|
21
|
+
<tr>
|
22
|
+
<th>File</th>
|
23
|
+
<th>% covered</th>
|
24
|
+
<th>Lines</th>
|
25
|
+
<th>Relevant Lines</th>
|
26
|
+
<th>Lines covered</th>
|
27
|
+
<th>Lines missed</th>
|
28
|
+
<th>Avg. Hits / Line</th>
|
29
|
+
</tr>
|
30
|
+
</thead>
|
31
|
+
<tbody>
|
32
|
+
<% source_files.each do |source_file| %>
|
33
|
+
<tr>
|
34
|
+
<td class="strong"><%= link_to_source_file(source_file) %></td>
|
35
|
+
<td class="<%= coverage_css_class(source_file.covered_percent) %> strong"><%= source_file.covered_percent.round(2).to_s %> %</td>
|
36
|
+
<td><%= source_file.lines.count %></td>
|
37
|
+
<td><%= source_file.covered_lines.count + source_file.missed_lines.count %></td>
|
38
|
+
<td><%= source_file.covered_lines.count %></td>
|
39
|
+
<td><%= source_file.missed_lines.count %></td>
|
40
|
+
<td><%= source_file.covered_strength %></td>
|
41
|
+
</tr>
|
42
|
+
<% end %>
|
43
|
+
</tbody>
|
44
|
+
</table>
|
45
|
+
</div>
|
data/views/layout.erb
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html xmlns='http://www.w3.org/1999/xhtml'>
|
3
|
+
<head>
|
4
|
+
<title>Code coverage for <%= SimpleCov.project_name %></title>
|
5
|
+
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
6
|
+
<link rel="shortcut icon" type="image/png" href="<%= data_image("favicon_#{coverage_css_class(result.source_files.covered_percent)}.png") %>" />
|
7
|
+
<style>
|
8
|
+
<%= file("../assets/application.css") %>
|
9
|
+
</style>
|
10
|
+
<script type="text/javascript">
|
11
|
+
<%= file("../assets/application.js") %>
|
12
|
+
</script>
|
13
|
+
</head>
|
14
|
+
|
15
|
+
<body>
|
16
|
+
<div id="loading">
|
17
|
+
<img src="<%= data_image('loading.gif') %>" alt="loading"/>
|
18
|
+
</div>
|
19
|
+
<div id="wrapper" style="display: none;">
|
20
|
+
<div class="timestamp">Generated <%= timeago(Time.now) %></div>
|
21
|
+
<ul class="group_tabs"></ul>
|
22
|
+
|
23
|
+
<div id="content">
|
24
|
+
<%= formatted_file_list("All Files", result.source_files) %>
|
25
|
+
|
26
|
+
<% result.groups.each do |name, files| %>
|
27
|
+
<%= formatted_file_list(name, files) %>
|
28
|
+
<% end %>
|
29
|
+
</div>
|
30
|
+
|
31
|
+
<div id="footer">
|
32
|
+
Generated by <a href="http://github.com/colszowka/simplecov">simplecov</a> v<%= SimpleCov::VERSION %>
|
33
|
+
and simplecov-inlinehtml v<%= SimpleCov::Formatter::InlineHTMLFormatter::VERSION %><br/>
|
34
|
+
using <%= result.command_name %>
|
35
|
+
</div>
|
36
|
+
|
37
|
+
<div class="source_files">
|
38
|
+
<% result.source_files.each do |source_file| %>
|
39
|
+
<%= formatted_source_file(source_file) %>
|
40
|
+
<% end %>
|
41
|
+
</div>
|
42
|
+
</div>
|
43
|
+
</body>
|
44
|
+
</html>
|
@@ -0,0 +1,23 @@
|
|
1
|
+
<div class="source_table" id="<%= id source_file %>">
|
2
|
+
<div class="header">
|
3
|
+
<h3><%= shortened_filename source_file %></h3>
|
4
|
+
<h4><span class="<%= coverage_css_class(source_file.covered_percent) %>"><%= source_file.covered_percent.round(2).to_s %> %</span> covered</h4>
|
5
|
+
<div>
|
6
|
+
<b><%= source_file.lines_of_code %></b> relevant lines.
|
7
|
+
<span class="green"><b><%= source_file.covered_lines.count %></b> lines covered</span> and
|
8
|
+
<span class="red"><b><%= source_file.missed_lines.count %></b> lines missed.</span>
|
9
|
+
</div>
|
10
|
+
</div>
|
11
|
+
|
12
|
+
<pre>
|
13
|
+
<ol>
|
14
|
+
<% source_file.lines.each do |line| %>
|
15
|
+
<li class="<%= line.status %>" data-hits="<%= line.coverage ? line.coverage : '' %>" data-linenumber="<%= line.number %>">
|
16
|
+
<% if line.covered? %><span class="hits"><%= line.coverage %></span><% end %>
|
17
|
+
<% if line.skipped? %><span class="hits">skipped</span><% end %>
|
18
|
+
<code class="ruby"><%= CGI.escapeHTML(line.src.chomp) %></code>
|
19
|
+
</li>
|
20
|
+
<% end %>
|
21
|
+
</ol>
|
22
|
+
</pre>
|
23
|
+
</div>
|
metadata
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: simplecov-inline-html
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jon Rowe
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-03-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.9'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.9'
|
27
|
+
description: Inline HTML formatter for SimpleCov code coverage tool.
|
28
|
+
email:
|
29
|
+
- hello@jonrowe.co.uk
|
30
|
+
executables: []
|
31
|
+
extensions: []
|
32
|
+
extra_rdoc_files: []
|
33
|
+
files:
|
34
|
+
- ".gitignore"
|
35
|
+
- ".travis.yml"
|
36
|
+
- Gemfile
|
37
|
+
- LICENSE
|
38
|
+
- README.md
|
39
|
+
- Rakefile
|
40
|
+
- assets/application.css
|
41
|
+
- assets/application.js
|
42
|
+
- assets/favicon_green.png
|
43
|
+
- assets/favicon_red.png
|
44
|
+
- assets/favicon_yellow.png
|
45
|
+
- assets/loading.gif
|
46
|
+
- assets/magnify.png
|
47
|
+
- lib/simplecov-inline-html.rb
|
48
|
+
- lib/simplecov-inline-html/version.rb
|
49
|
+
- simplecov-inline-html.gemspec
|
50
|
+
- views/file_list.erb
|
51
|
+
- views/layout.erb
|
52
|
+
- views/source_file.erb
|
53
|
+
homepage: https://github.com/JonRowe/simplecov-inline-html
|
54
|
+
licenses:
|
55
|
+
- MIT
|
56
|
+
metadata: {}
|
57
|
+
post_install_message:
|
58
|
+
rdoc_options: []
|
59
|
+
require_paths:
|
60
|
+
- lib
|
61
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - "~>"
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '2.4'
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
version: '0'
|
71
|
+
requirements: []
|
72
|
+
rubyforge_project:
|
73
|
+
rubygems_version: 2.5.2
|
74
|
+
signing_key:
|
75
|
+
specification_version: 4
|
76
|
+
summary: Inline HTML formatter for SimpleCov code coverage tool.
|
77
|
+
test_files: []
|