cover_me 1.0.0.rc2 → 1.0.0.rc3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +8 -1
- data/lib/cover_me.rb +1 -1
- data/lib/cover_me/config.rb +3 -1
- data/lib/cover_me/directory_report.rb +35 -0
- data/lib/cover_me/emma_formatter.rb +28 -0
- data/lib/cover_me/global_report.rb +14 -0
- data/lib/cover_me/report.rb +3 -1
- data/lib/cover_me/templates/emma.xml.erb +37 -0
- data/lib/cover_me/templates/report.html.erb +2 -2
- metadata +7 -3
data/README
CHANGED
@@ -34,7 +34,7 @@ After spending a morning playing with it, I was quickly able to grow the idea in
|
|
34
34
|
|
35
35
|
CoverMe is pretty easy to use, and has been tested with Ruby 1.9.2 and Rails 3. First, add CoverMe to your Gemfile:
|
36
36
|
|
37
|
-
gem 'cover_me', '>= 1.0.0.
|
37
|
+
gem 'cover_me', '>= 1.0.0.rc2', :group => :test
|
38
38
|
|
39
39
|
Now make sure to install the gem with Bundler:
|
40
40
|
|
@@ -71,3 +71,10 @@ CoverMe is easily configurable, under the covers it uses the "Configatron":http:
|
|
71
71
|
} (default)
|
72
72
|
end
|
73
73
|
|
74
|
+
==Contributors
|
75
|
+
|
76
|
+
* Mark Bates
|
77
|
+
* Alex Crichton
|
78
|
+
* Andrea Campi
|
79
|
+
* Rob Zolkos
|
80
|
+
* jmthomas
|
data/lib/cover_me.rb
CHANGED
@@ -33,7 +33,7 @@ require File.expand_path(File.join(path, 'config'))
|
|
33
33
|
|
34
34
|
CoverMe.set_defaults
|
35
35
|
|
36
|
-
%w{index report formatter processor html_formatter results}.each do |file|
|
36
|
+
%w{index report formatter processor html_formatter emma_formatter results directory_report global_report}.each do |file|
|
37
37
|
require File.expand_path(File.join(path, file))
|
38
38
|
end
|
39
39
|
|
data/lib/cover_me/config.rb
CHANGED
@@ -19,7 +19,8 @@ module CoverMe
|
|
19
19
|
|
20
20
|
def set_defaults # :nodoc:
|
21
21
|
CoverMe.config do |c|
|
22
|
-
c.project.set_default(:root,
|
22
|
+
c.project.set_default(:root,
|
23
|
+
Configatron::Delayed.new{defined?(Rails) ? Rails.root.to_s : Dir.pwd})
|
23
24
|
c.results.set_default(:store, Configatron::Delayed.new {File.join(CoverMe.config.project.root, 'coverage.data')})
|
24
25
|
c.set_default(:file_pattern, Configatron::Delayed.new do
|
25
26
|
/(#{CoverMe.config.project.root}\/app\/.+\.rb|#{CoverMe.config.project.root}\/lib\/.+\.rb)/ix
|
@@ -40,6 +41,7 @@ module CoverMe
|
|
40
41
|
c.html_formatter.set_default(:output_path, Configatron::Delayed.new {File.join(CoverMe.config.project.root, 'coverage')})
|
41
42
|
c.html_formatter.set_default(:finalizer_files, {'report.css' => 'report.css', 'index.css' => 'index.css',
|
42
43
|
'jquery.js' => 'jquery.js', 'jquery.tablesorter.js' => 'jquery.tablesorter.js'})
|
44
|
+
c.emma_formatter.set_default(:output_path, Configatron::Delayed.new {File.join(CoverMe.config.project.root, 'coverage')})
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# Used to represent the directory summary.
|
2
|
+
class CoverMe::DirectoryReport
|
3
|
+
attr_accessor :name
|
4
|
+
attr_accessor :reports
|
5
|
+
attr_accessor :lines_of_code
|
6
|
+
attr_accessor :lines_executed
|
7
|
+
|
8
|
+
def initialize(name, reports) # :nodoc:
|
9
|
+
self.name = name
|
10
|
+
self.reports = reports
|
11
|
+
self.lines_of_code = 0
|
12
|
+
self.lines_executed = 0
|
13
|
+
reports.each do |report|
|
14
|
+
self.lines_of_code += report.lines_of_code
|
15
|
+
self.lines_executed += report.lines_executed
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def summarize(reports)
|
21
|
+
reports_by_dir = reports.group_by do |report|
|
22
|
+
dir_for_file(report.filename)
|
23
|
+
end
|
24
|
+
|
25
|
+
reports_by_dir.map do |dir,reports|
|
26
|
+
self.new(dir, reports)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def dir_for_file(filename)
|
32
|
+
File.dirname(filename).split(File::SEPARATOR).join('.')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# Generates Emma-style xml coverage files.
|
2
|
+
class CoverMe::EmmaFormatter < CoverMe::Formatter
|
3
|
+
|
4
|
+
def initialize(options = {}) # :nodoc:
|
5
|
+
super
|
6
|
+
self.options = ({:output_path => CoverMe.config.emma_formatter.output_path}.merge(self.options)).to_mash
|
7
|
+
end
|
8
|
+
|
9
|
+
def format_report(report)
|
10
|
+
# nothing to do
|
11
|
+
end
|
12
|
+
|
13
|
+
# Formats a CoverMe::Index object using the _emma.xml.erb_ template
|
14
|
+
def format_index(index)
|
15
|
+
reports_by_dir = CoverMe::DirectoryReport.summarize(index.reports)
|
16
|
+
global = CoverMe::GlobalReport.new(reports_by_dir)
|
17
|
+
write_file('coverage') do |file|
|
18
|
+
file.write(self.template('emma.xml.erb').result(binding))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
protected
|
23
|
+
def write_file(filename, extension = '.xml', &block) # :nodoc:
|
24
|
+
path = File.join(self.options.output_path, filename)
|
25
|
+
FileUtils.mkdir_p(File.dirname(path))
|
26
|
+
File.open(path + extension, 'w', &block)
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Used to represent the module summary.
|
2
|
+
class CoverMe::GlobalReport
|
3
|
+
attr_accessor :lines_of_code
|
4
|
+
attr_accessor :lines_executed
|
5
|
+
|
6
|
+
def initialize(reports) # :nodoc:
|
7
|
+
self.lines_of_code = 0
|
8
|
+
self.lines_executed = 0
|
9
|
+
reports.each do |report|
|
10
|
+
self.lines_of_code += report.lines_of_code
|
11
|
+
self.lines_executed += report.lines_executed
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/lib/cover_me/report.rb
CHANGED
@@ -5,6 +5,7 @@ class CoverMe::Report
|
|
5
5
|
attr_accessor :coverage
|
6
6
|
attr_accessor :lines
|
7
7
|
attr_accessor :lines_of_code
|
8
|
+
attr_accessor :lines_executed
|
8
9
|
attr_accessor :executed_percent
|
9
10
|
attr_accessor :unexecuted_percent
|
10
11
|
|
@@ -14,7 +15,8 @@ class CoverMe::Report
|
|
14
15
|
self.coverage = coverage
|
15
16
|
self.lines = self.coverage.size
|
16
17
|
self.lines_of_code = self.coverage.reject{|x| x.nil?}.size
|
17
|
-
self.
|
18
|
+
self.lines_executed = self.coverage.reject{|x| x.nil? || x < 1}.size
|
19
|
+
self.executed_percent = ((self.lines_executed.to_f / self.lines_of_code.to_f) * 100).round(1)
|
18
20
|
self.unexecuted_percent = (100 - self.executed_percent).round(1)
|
19
21
|
end
|
20
22
|
|
@@ -0,0 +1,37 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?><!-- cover_me report -->
|
2
|
+
|
3
|
+
<report>
|
4
|
+
<stats>
|
5
|
+
<packages value="42"/>
|
6
|
+
<classes value="42"/>
|
7
|
+
<methods value="42"/>
|
8
|
+
<srcfiles value="42"/>
|
9
|
+
<srclines value="42"/>
|
10
|
+
</stats>
|
11
|
+
<data>
|
12
|
+
<all name="all classes">
|
13
|
+
<coverage type="class, %" value="0% (0/0)"/>
|
14
|
+
<coverage type="method, %" value="0% (0/0)"/>
|
15
|
+
<coverage type="block, %" value="0% (0/0)"/>
|
16
|
+
<coverage type="line, %" value="0% (<%= global.lines_executed %>/<%= global.lines_of_code %>)"/>
|
17
|
+
|
18
|
+
<% reports_by_dir.sort_by(&:name).each do |dir| %>
|
19
|
+
<package name="<%= dir.name %>">
|
20
|
+
<coverage type="class, %" value="0% (0/0)"/>
|
21
|
+
<coverage type="method, %" value="0% (0/0)"/>
|
22
|
+
<coverage type="block, %" value="0% (0/0)"/>
|
23
|
+
<coverage type="line, %" value="0% (<%= dir.lines_executed %>/<%= dir.lines_of_code %>)"/>
|
24
|
+
|
25
|
+
<% dir.reports.sort.each do |report| %>
|
26
|
+
<srcfile name="<%= File.basename(report.filename) %>">
|
27
|
+
<coverage type="class, %" value="0% (0/0)"/>
|
28
|
+
<coverage type="method, %" value="0% (0/0)"/>
|
29
|
+
<coverage type="block, %" value="0% (0/0)"/>
|
30
|
+
<coverage type="line, %" value="<%= report.executed_percent.to_i %>% (<%= report.lines_executed %>/<%= report.lines_of_code %>)"/>
|
31
|
+
</srcfile>
|
32
|
+
<% end %>
|
33
|
+
</package>
|
34
|
+
<% end %>
|
35
|
+
</all>
|
36
|
+
</data>
|
37
|
+
</report>
|
@@ -3,8 +3,8 @@
|
|
3
3
|
<title><%= report.filename %></title>
|
4
4
|
<%
|
5
5
|
root = CoverMe.config.project.root.split(File::SEPARATOR)
|
6
|
-
file = File.dirname(report.
|
7
|
-
diff = file
|
6
|
+
file = File.dirname(report.original_filename).split(File::SEPARATOR)
|
7
|
+
diff = file[root.size..-1]
|
8
8
|
rel = (['..'] * diff.count).join(File::SEPARATOR)
|
9
9
|
%>
|
10
10
|
<link href="<%= File.join(rel, "report.css?#{rand}") %>" media="screen" rel="stylesheet" type="text/css" />
|
metadata
CHANGED
@@ -6,8 +6,8 @@ version: !ruby/object:Gem::Version
|
|
6
6
|
- 1
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 1.0.0.
|
9
|
+
- rc3
|
10
|
+
version: 1.0.0.rc3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- markbates
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2010-10-
|
18
|
+
date: 2010-10-21 00:00:00 -04:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -55,13 +55,17 @@ extra_rdoc_files:
|
|
55
55
|
- LICENSE
|
56
56
|
files:
|
57
57
|
- lib/cover_me/config.rb
|
58
|
+
- lib/cover_me/directory_report.rb
|
59
|
+
- lib/cover_me/emma_formatter.rb
|
58
60
|
- lib/cover_me/formatter.rb
|
61
|
+
- lib/cover_me/global_report.rb
|
59
62
|
- lib/cover_me/hash.rb
|
60
63
|
- lib/cover_me/html_formatter.rb
|
61
64
|
- lib/cover_me/index.rb
|
62
65
|
- lib/cover_me/processor.rb
|
63
66
|
- lib/cover_me/report.rb
|
64
67
|
- lib/cover_me/results.rb
|
68
|
+
- lib/cover_me/templates/emma.xml.erb
|
65
69
|
- lib/cover_me/templates/index.css
|
66
70
|
- lib/cover_me/templates/index.html.erb
|
67
71
|
- lib/cover_me/templates/jquery.js
|