edouard-metric_fu 1.0.2 → 1.0.3
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 +1 -1
- data/Rakefile +4 -4
- data/spec/base/configuration_spec.rb +1 -1
- data/spec/base/generator_spec.rb +0 -22
- data/spec/generators/churn_spec.rb +7 -7
- data/spec/generators/flay_spec.rb +0 -3
- data/spec/generators/flog_spec.rb +1 -9
- data/spec/generators/reek_spec.rb +0 -1
- data/spec/generators/saikuro_spec.rb +11 -21
- metadata +18 -56
- data/lib/base/base_template.rb +0 -134
- data/lib/base/configuration.rb +0 -207
- data/lib/base/generator.rb +0 -160
- data/lib/base/graph.rb +0 -37
- data/lib/base/md5_tracker.rb +0 -52
- data/lib/base/report.rb +0 -100
- data/lib/generators/churn.rb +0 -91
- data/lib/generators/flay.rb +0 -34
- data/lib/generators/flog.rb +0 -133
- data/lib/generators/rcov.rb +0 -87
- data/lib/generators/reek.rb +0 -37
- data/lib/generators/roodi.rb +0 -31
- data/lib/generators/saikuro.rb +0 -209
- data/lib/generators/stats.rb +0 -43
- data/lib/graphs/flay_grapher.rb +0 -34
- data/lib/graphs/flog_grapher.rb +0 -37
- data/lib/graphs/rcov_grapher.rb +0 -34
- data/lib/graphs/reek_grapher.rb +0 -44
- data/lib/graphs/roodi_grapher.rb +0 -34
- data/lib/metric_fu.rb +0 -24
- data/lib/templates/awesome/awesome_template.rb +0 -30
- data/lib/templates/awesome/churn.html.erb +0 -19
- data/lib/templates/awesome/default.css +0 -66
- data/lib/templates/awesome/flay.html.erb +0 -27
- data/lib/templates/awesome/flog.html.erb +0 -46
- data/lib/templates/awesome/index.html.erb +0 -28
- data/lib/templates/awesome/layout.html.erb +0 -27
- data/lib/templates/awesome/rcov.html.erb +0 -36
- data/lib/templates/awesome/reek.html.erb +0 -34
- data/lib/templates/awesome/roodi.html.erb +0 -21
- data/lib/templates/awesome/saikuro.html.erb +0 -71
- data/lib/templates/awesome/stats.html.erb +0 -41
- data/lib/templates/standard/churn.html.erb +0 -31
- data/lib/templates/standard/default.css +0 -64
- data/lib/templates/standard/flay.html.erb +0 -34
- data/lib/templates/standard/flog.html.erb +0 -53
- data/lib/templates/standard/index.html.erb +0 -38
- data/lib/templates/standard/rcov.html.erb +0 -43
- data/lib/templates/standard/reek.html.erb +0 -42
- data/lib/templates/standard/roodi.html.erb +0 -29
- data/lib/templates/standard/saikuro.html.erb +0 -84
- data/lib/templates/standard/standard_template.rb +0 -26
- data/lib/templates/standard/stats.html.erb +0 -55
- data/tasks/metric_fu.rake +0 -19
- data/tasks/railroad.rake +0 -39
- data/vendor/_fonts/monaco.ttf +0 -0
- data/vendor/saikuro/saikuro.rb +0 -1214
data/lib/graphs/roodi_grapher.rb
DELETED
@@ -1,34 +0,0 @@
|
|
1
|
-
require 'gruff'
|
2
|
-
module MetricFu
|
3
|
-
|
4
|
-
class RoodiGrapher
|
5
|
-
|
6
|
-
attr_accessor :roodi_count, :labels
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
self.roodi_count = []
|
10
|
-
self.labels = {}
|
11
|
-
end
|
12
|
-
|
13
|
-
def get_metrics(metrics, date)
|
14
|
-
self.roodi_count.push(metrics[:roodi][:problems].size)
|
15
|
-
self.labels.update( { self.labels.size => date })
|
16
|
-
end
|
17
|
-
|
18
|
-
def graph!
|
19
|
-
g = Gruff::Line.new(MetricFu.graph_size)
|
20
|
-
g.title = "Roodi: design problems"
|
21
|
-
g.theme = MetricFu.graph_theme
|
22
|
-
g.font = MetricFu.graph_font
|
23
|
-
g.data('roodi', self.roodi_count)
|
24
|
-
g.labels = self.labels
|
25
|
-
g.title_font_size = MetricFu.graph_title_font_size
|
26
|
-
g.legend_box_size = MetricFu.graph_legend_box_size
|
27
|
-
g.legend_font_size = MetricFu.graph_legend_font_size
|
28
|
-
g.marker_font_size = MetricFu.graph_marker_font_size
|
29
|
-
g.write(File.join(MetricFu.output_directory, 'roodi.png'))
|
30
|
-
end
|
31
|
-
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
data/lib/metric_fu.rb
DELETED
@@ -1,24 +0,0 @@
|
|
1
|
-
# Load a few things to make our lives easier elsewhere.
|
2
|
-
module MetricFu
|
3
|
-
LIB_ROOT = File.dirname(__FILE__)
|
4
|
-
end
|
5
|
-
base_dir = File.join(MetricFu::LIB_ROOT, 'base')
|
6
|
-
generator_dir = File.join(MetricFu::LIB_ROOT, 'generators')
|
7
|
-
template_dir = File.join(MetricFu::LIB_ROOT, 'templates')
|
8
|
-
graph_dir = File.join(MetricFu::LIB_ROOT, 'graphs')
|
9
|
-
|
10
|
-
# We need to require these two things first because our other classes
|
11
|
-
# depend on them.
|
12
|
-
require File.join(base_dir, 'report')
|
13
|
-
require File.join(base_dir, 'generator')
|
14
|
-
require File.join(base_dir, 'graph')
|
15
|
-
|
16
|
-
# Load the rakefile so users of the gem get the default metric_fu task
|
17
|
-
load File.join(MetricFu::LIB_ROOT, '..', 'tasks', 'metric_fu.rake')
|
18
|
-
|
19
|
-
# Now load everything else that's in the directory
|
20
|
-
Dir[File.join(base_dir, '*.rb')].each{|l| require l }
|
21
|
-
Dir[File.join(generator_dir, '*.rb')].each {|l| require l }
|
22
|
-
Dir[File.join(template_dir, 'standard/*.rb')].each {|l| require l}
|
23
|
-
Dir[File.join(template_dir, 'awesome/*.rb')].each {|l| require l}
|
24
|
-
Dir[File.join(graph_dir, '*.rb')].each {|l| require l}
|
@@ -1,30 +0,0 @@
|
|
1
|
-
class AwesomeTemplate < MetricFu::Template
|
2
|
-
|
3
|
-
def write
|
4
|
-
# Getting rid of the crap before and after the project name from integrity
|
5
|
-
@name = File.basename(Dir.pwd).gsub(/^\w+-|-\w+$/, "")
|
6
|
-
|
7
|
-
report.each_pair do |section, contents|
|
8
|
-
if template_exists?(section)
|
9
|
-
create_instance_var(section, contents)
|
10
|
-
@html = erbify(section)
|
11
|
-
html = erbify('layout')
|
12
|
-
fn = output_filename(section)
|
13
|
-
MetricFu.report.save_output(html, MetricFu.output_directory, fn)
|
14
|
-
end
|
15
|
-
end
|
16
|
-
|
17
|
-
# Instance variables we need should already be created from above
|
18
|
-
if template_exists?('index')
|
19
|
-
@html = erbify('index')
|
20
|
-
html = erbify('layout')
|
21
|
-
fn = output_filename('index')
|
22
|
-
MetricFu.report.save_output(html, MetricFu.output_directory, fn)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def this_directory
|
27
|
-
File.dirname(__FILE__)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
@@ -1,19 +0,0 @@
|
|
1
|
-
<h3>Source Control Churn Results</h3>
|
2
|
-
<p>Files that change a lot in your project may be bad a sign.
|
3
|
-
This task uses your source control log to identify those files.
|
4
|
-
</p>
|
5
|
-
<table>
|
6
|
-
<tr>
|
7
|
-
<th>File Path</th>
|
8
|
-
<th>Times Changed</th>
|
9
|
-
</tr>
|
10
|
-
<% count = 0 %>
|
11
|
-
<% @churn[:changes].each do |change| %>
|
12
|
-
<tr>
|
13
|
-
<td><%= change[:file_path] %></td>
|
14
|
-
<td><%= change[:times_changed] %></td>
|
15
|
-
</tr>
|
16
|
-
<% count += 1 %>
|
17
|
-
<% end %>
|
18
|
-
</table>
|
19
|
-
<p>Generated on <%= Time.now.localtime %></p>
|
@@ -1,66 +0,0 @@
|
|
1
|
-
table {
|
2
|
-
margin-top: 20px;
|
3
|
-
border-collapse: collapse;
|
4
|
-
border: 1px solid #666;
|
5
|
-
background: #fff;
|
6
|
-
margin-bottom: 20px;
|
7
|
-
}
|
8
|
-
|
9
|
-
table tr.light {
|
10
|
-
background: #fff;
|
11
|
-
}
|
12
|
-
|
13
|
-
table tr.dark {
|
14
|
-
background: #f9f9f9;
|
15
|
-
}
|
16
|
-
|
17
|
-
table tr:hover {
|
18
|
-
background: #FFFFC0;
|
19
|
-
}
|
20
|
-
|
21
|
-
table td, table th {
|
22
|
-
padding: 4px;
|
23
|
-
font-size: 11px;
|
24
|
-
}
|
25
|
-
table th {
|
26
|
-
text-align: center;
|
27
|
-
color: #337022;
|
28
|
-
background: #DDFFCC;
|
29
|
-
font-weight: bold;
|
30
|
-
border: #99D688 1px solid;
|
31
|
-
}
|
32
|
-
|
33
|
-
table td {
|
34
|
-
border: #d0d0d0 1px solid;
|
35
|
-
}
|
36
|
-
|
37
|
-
table td.score {
|
38
|
-
text-align: right;
|
39
|
-
}
|
40
|
-
|
41
|
-
.warning {
|
42
|
-
background: yellow;
|
43
|
-
}
|
44
|
-
.rcov_code td {
|
45
|
-
border-bottom: 1px solid #ddd ;
|
46
|
-
padding: 0;
|
47
|
-
margin: 0;
|
48
|
-
}
|
49
|
-
.rcov_code tr {
|
50
|
-
border: 0px;
|
51
|
-
padding:0px;
|
52
|
-
margin: 0px;
|
53
|
-
}
|
54
|
-
.rcov_code pre {
|
55
|
-
border: 0px;
|
56
|
-
padding: 0px;
|
57
|
-
margin: 0px;
|
58
|
-
}
|
59
|
-
.rcov_run {}
|
60
|
-
.rcov_not_run {
|
61
|
-
background-color: #d88;
|
62
|
-
}
|
63
|
-
.rcov_overflow {
|
64
|
-
overflow: auto;
|
65
|
-
font-size: 50%;
|
66
|
-
}
|
@@ -1,27 +0,0 @@
|
|
1
|
-
<h3>Flay Results</h3>
|
2
|
-
|
3
|
-
<p><a href='http://ruby.sadi.st/Flay.html'>Flay</a> analyzes ruby code for structural similarities.</p>
|
4
|
-
|
5
|
-
<img src="flay.png?<%= Time.now %>">
|
6
|
-
|
7
|
-
<h4>Total Score (lower is better): <%= @flay[:total_score] %></h4>
|
8
|
-
|
9
|
-
<table>
|
10
|
-
<tr>
|
11
|
-
<th>Files</th>
|
12
|
-
<th>Matches</th>
|
13
|
-
</tr>
|
14
|
-
<% count = 0 %>
|
15
|
-
<% @flay[:matches].each do |match| %>
|
16
|
-
<tr class='<%= cycle("light", "dark", count) %>'>
|
17
|
-
<td>
|
18
|
-
<% match[:matches].each do |file| %>
|
19
|
-
<%= file[:name] %>:<%= file[:line] %><br />
|
20
|
-
<% end %>
|
21
|
-
</td>
|
22
|
-
<td><%= match[:reason] %></td>
|
23
|
-
</tr>
|
24
|
-
<% count += 1 %>
|
25
|
-
<% end %>
|
26
|
-
</table>
|
27
|
-
<p>Generated on <%= Time.now.localtime %></p>
|
@@ -1,46 +0,0 @@
|
|
1
|
-
<h3>Flog Results</h3>
|
2
|
-
<p><a href='http://ruby.sadi.st/Flog.html'>Flog</a> measures code complexity.</p>
|
3
|
-
|
4
|
-
<img src="flog.png?<%= Time.now %>">
|
5
|
-
|
6
|
-
<h2>Total Flog score for all methods: <%= @flog[:total]%></h2>
|
7
|
-
<h2>Average Flog score for all methods: <%= @flog[:average]%></h2>
|
8
|
-
|
9
|
-
<table>
|
10
|
-
<tr>
|
11
|
-
<th>File</th>
|
12
|
-
<th>Total score</th>
|
13
|
-
<th>Methods</th>
|
14
|
-
<th>Average score</th>
|
15
|
-
<th>Highest score</th>
|
16
|
-
</tr>
|
17
|
-
<% @flog[:pages].each do |page| %>
|
18
|
-
<tr>
|
19
|
-
<td><a href="#<%= page[:path].gsub(/[^a-z]+/, '_') %>"><%= page[:path] %></a></td>
|
20
|
-
<td><%= page[:score].round %></td>
|
21
|
-
<td><%= page[:scanned_methods].length %></td>
|
22
|
-
<td><%= page[:average_score].round %></td>
|
23
|
-
<td><%= page[:highest_score].round %></td>
|
24
|
-
</tr>
|
25
|
-
<% end %>
|
26
|
-
</table>
|
27
|
-
|
28
|
-
<% @flog[:pages].each do |page| %>
|
29
|
-
<h2 id="<%= page[:path].gsub(/[^a-z]+/, '_') %>"><%= page[:path] %></h2>
|
30
|
-
<% page[:scanned_methods].each do |sm| %>
|
31
|
-
<p><%= sm[:name] %></p>
|
32
|
-
<table>
|
33
|
-
<tr>
|
34
|
-
<th>Score</th>
|
35
|
-
<th>Operator</th>
|
36
|
-
</tr>
|
37
|
-
<% sm[:operators].each do |operator| %>
|
38
|
-
<tr>
|
39
|
-
<td><%= operator[:score] %></td>
|
40
|
-
<td><%= operator[:operator] %></td>
|
41
|
-
</tr>
|
42
|
-
<% end %>
|
43
|
-
</table>
|
44
|
-
<% end %>
|
45
|
-
<% end %>
|
46
|
-
<p>Generated on <%= Time.now.localtime %></p>
|
@@ -1,28 +0,0 @@
|
|
1
|
-
<h3>Metric Fu Results</h3>
|
2
|
-
<ul id='projects'>
|
3
|
-
<% if @churn %>
|
4
|
-
<li class='even failure'><a href="churn.html">Churn</a></li>
|
5
|
-
<% end %>
|
6
|
-
<% if @flay %>
|
7
|
-
<li class='even failure'><a href="flay.html">Flay</a></li>
|
8
|
-
<% end %>
|
9
|
-
<% if @flog %>
|
10
|
-
<li class='even failure'><a href="flog.html">Flog</a></li>
|
11
|
-
<% end %>
|
12
|
-
<% if @rcov %>
|
13
|
-
<li class='even failure'><a href="rcov.html">Rcov</a></li>
|
14
|
-
<% end %>
|
15
|
-
<% if @reek %>
|
16
|
-
<li class='even failure'><a href="reek.html">Reek</a></li>
|
17
|
-
<% end %>
|
18
|
-
<% if @roodi %>
|
19
|
-
<li class='even failure'><a href="roodi.html">Roodi</a></li>
|
20
|
-
<% end %>
|
21
|
-
<% if @saikuro %>
|
22
|
-
<li class='even failure'><a href="saikuro.html">Saikuro</a></li>
|
23
|
-
<% end %>
|
24
|
-
<% if @stats %>
|
25
|
-
<li class='even failure'><a href="stats.html">Stats</a></li>
|
26
|
-
<% end %>
|
27
|
-
</ul>
|
28
|
-
<p>Generated on <%= Time.now.localtime %></p>
|
@@ -1,27 +0,0 @@
|
|
1
|
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
2
|
-
<html lang='en' xml:lang='en' xmlns='http://www.w3.org/1999/xhtml'>
|
3
|
-
<head>
|
4
|
-
<meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
|
5
|
-
<meta content='en' http-equiv='Content-Language' />
|
6
|
-
<title>metrics</title>
|
7
|
-
<link href='/reset.css' rel='stylesheet' type='text/css' />
|
8
|
-
<link href='/buttons.css' rel='stylesheet' type='text/css' />
|
9
|
-
<link href='/integrity.css' rel='stylesheet' type='text/css' />
|
10
|
-
<style>
|
11
|
-
<%= inline_css("default.css") %>
|
12
|
-
</style>
|
13
|
-
<link REL="SHORTCUT ICON" HREF="/favicon.ico">
|
14
|
-
</head>
|
15
|
-
<body>
|
16
|
-
<div id='header'>
|
17
|
-
<h1><a href="/">metrics</a> | <a href="index.html"><%= @name %></a></h1>
|
18
|
-
<address class='watermark'>
|
19
|
-
built with
|
20
|
-
<a href='http://metric-fu.rubyforge.org/'>metric-fu</a>
|
21
|
-
</address>
|
22
|
-
</div>
|
23
|
-
<div id='content'>
|
24
|
-
<%= @html %>
|
25
|
-
</div>
|
26
|
-
</body>
|
27
|
-
</html>
|
@@ -1,36 +0,0 @@
|
|
1
|
-
<h3>Rcov Code Coverage Results</h3>
|
2
|
-
|
3
|
-
<p>C0 code coverage information.</p>
|
4
|
-
|
5
|
-
<img src="rcov.png?<%= Time.now %>">
|
6
|
-
|
7
|
-
<p>Total Coverage: <%= @rcov.delete(:global_percent_run) %>% </p>
|
8
|
-
<table>
|
9
|
-
<tr>
|
10
|
-
<th>File Path</th>
|
11
|
-
<th>Percent run</th>
|
12
|
-
</tr>
|
13
|
-
<% count = 0 %>
|
14
|
-
<% @rcov.sort_by{ |k,v| v[:percent_run] }.each do |fname, file| %>
|
15
|
-
<tr>
|
16
|
-
<td><a href="#<%= fname.gsub(/[^a-z]+/, '_') %>"><%= fname %></a></td>
|
17
|
-
<td><%= file[:percent_run] %></td>
|
18
|
-
</tr>
|
19
|
-
<% count += 1 %>
|
20
|
-
<% end %>
|
21
|
-
</table>
|
22
|
-
|
23
|
-
<% @rcov.sort_by{ |k,v| v[:percent_run] }.each do |fname, file| %>
|
24
|
-
<h2 id="<%= fname.gsub(/[^a-z]+/, '_') %>"> <%= fname %></h2>
|
25
|
-
<div class="rcov_overflow">
|
26
|
-
<table class="rcov_code">
|
27
|
-
<% file[:lines].each do |line| %>
|
28
|
-
<tr>
|
29
|
-
<% css_class = line[:was_run] ? "rcov_run" : "rcov_not_run" %>
|
30
|
-
<td class="<%= css_class %>"><pre><%= line[:content] %></pre></td>
|
31
|
-
</tr>
|
32
|
-
<% end %>
|
33
|
-
</table>
|
34
|
-
</div>
|
35
|
-
<% end %>
|
36
|
-
<p>Generated on <%= Time.now.localtime %></p>
|
@@ -1,34 +0,0 @@
|
|
1
|
-
<h3>Reek Results</h3>
|
2
|
-
|
3
|
-
<p><a href="http://reek.rubyforge.org/">Reek</a> detects common code smells in ruby code.</p>
|
4
|
-
|
5
|
-
<img src="reek.png?<%= Time.now %>">
|
6
|
-
|
7
|
-
<table>
|
8
|
-
<tr>
|
9
|
-
<th>File Path</th>
|
10
|
-
<th>Method</th>
|
11
|
-
<th>Description</th>
|
12
|
-
<th>Type</th>
|
13
|
-
</tr>
|
14
|
-
<% count = 0 %>
|
15
|
-
<% @reek[:matches].each do |match| %>
|
16
|
-
<% match[:code_smells].each do |smell| %>
|
17
|
-
<tr class='<%= cycle("light", "dark", count) %>'>
|
18
|
-
<td><%= match[:file_path] %></td>
|
19
|
-
<td>
|
20
|
-
<%= smell[:method] %>
|
21
|
-
</td>
|
22
|
-
<td>
|
23
|
-
<%= smell[:message] %>
|
24
|
-
</td>
|
25
|
-
<td>
|
26
|
-
<%= smell[:type] %>
|
27
|
-
</td>
|
28
|
-
</tr>
|
29
|
-
<% count += 1 %>
|
30
|
-
<% end %>
|
31
|
-
<% end %>
|
32
|
-
|
33
|
-
</table>
|
34
|
-
<p>Generated on <%= Time.now.localtime %></p>
|
@@ -1,21 +0,0 @@
|
|
1
|
-
<h3>Roodi Results</h3>
|
2
|
-
|
3
|
-
<p><a href="http://roodi.rubyforge.org/">Roodi</a> parses your Ruby code and warns you about design issues you have based on the checks that is has configured.</p>
|
4
|
-
|
5
|
-
<img src="roodi.png?<%= Time.now %>">
|
6
|
-
|
7
|
-
<table>
|
8
|
-
<tr>
|
9
|
-
<th>File Path</th>
|
10
|
-
<th>Warning</th>
|
11
|
-
</tr>
|
12
|
-
<% count = 0 %>
|
13
|
-
<% @roodi[:problems].each do |problem| %>
|
14
|
-
<tr class='<%= cycle("light", "dark", count) %>'>
|
15
|
-
<td><%= problem[:file] %>:<%= problem[:line] %></td>
|
16
|
-
<td><%= problem[:problem] %></td>
|
17
|
-
</tr>
|
18
|
-
<% count += 1 %>
|
19
|
-
<% end %>
|
20
|
-
</table>
|
21
|
-
<p>Generated on <%= Time.now.localtime %></p>
|
@@ -1,71 +0,0 @@
|
|
1
|
-
<h3>Saikuro Results</h3>
|
2
|
-
<p><a href='http://saikuro.rubyforge.org/'>Saikuro</a> analyzes ruby code for cyclomatic complexity.</p>
|
3
|
-
|
4
|
-
<h2>Analyzed Methods</h2>
|
5
|
-
<table>
|
6
|
-
<tr>
|
7
|
-
<th>Method Name</th>
|
8
|
-
<th>Complexity</th>
|
9
|
-
<th># Lines</th>
|
10
|
-
</tr>
|
11
|
-
<% @saikuro[:methods].each do |method| %>
|
12
|
-
<tr>
|
13
|
-
<td><%= method[:name] %></td>
|
14
|
-
<td><%= method[:complexity] %></td>
|
15
|
-
<td><%= method[:lines] %></td>
|
16
|
-
</tr>
|
17
|
-
<% end %>
|
18
|
-
</table>
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
<h2>Analyzed Classes</h2>
|
23
|
-
<table>
|
24
|
-
<tr>
|
25
|
-
<th>Class Name</th>
|
26
|
-
<th>Complexity</th>
|
27
|
-
<th># Lines</th>
|
28
|
-
</tr>
|
29
|
-
<% @saikuro[:classes].each do |klass| %>
|
30
|
-
<tr>
|
31
|
-
<td><%= klass[:name] %></td>
|
32
|
-
<td><%= klass[:complexity] %></td>
|
33
|
-
<td><%= klass[:lines] %></td>
|
34
|
-
</tr>
|
35
|
-
<% end %>
|
36
|
-
</table>
|
37
|
-
|
38
|
-
|
39
|
-
<h2>Analyzed Files</h2>
|
40
|
-
<% @saikuro[:files].each do |file| %>
|
41
|
-
<% file[:classes].each do |klass| %>
|
42
|
-
<% if !klass[:methods].empty? %>
|
43
|
-
<h3><%= file[:filename] %></h3>
|
44
|
-
<h4>Class : <%= klass[:class_name] %></h4>
|
45
|
-
<h5>Total complexity : <%= klass[:complexity] %></h5>
|
46
|
-
<h5>Total lines : <%= klass[:lines] %></h5>
|
47
|
-
<table>
|
48
|
-
<tr>
|
49
|
-
<th>Method</th>
|
50
|
-
<th>Complexity</th>
|
51
|
-
<th># Lines</th>
|
52
|
-
</tr>
|
53
|
-
<% klass[:methods].each do |method| %>
|
54
|
-
<tr>
|
55
|
-
<td>
|
56
|
-
<%= method[:name] %>
|
57
|
-
</td>
|
58
|
-
<td>
|
59
|
-
<%= method[:complexity] %>
|
60
|
-
</td>
|
61
|
-
<td>
|
62
|
-
<%= method[:lines] %>
|
63
|
-
</td>
|
64
|
-
</tr>
|
65
|
-
<% end %>
|
66
|
-
</table>
|
67
|
-
<% end %>
|
68
|
-
<% end %>
|
69
|
-
<% end %>
|
70
|
-
|
71
|
-
<p>Generated on <%= Time.now.localtime %></p>
|