indirect-metric_fu 0.8.2 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/HISTORY +19 -0
- data/MIT-LICENSE +1 -1
- data/Manifest.txt +25 -0
- data/README +74 -21
- data/Rakefile +4 -10
- data/lib/metric_fu/base.rb +116 -9
- data/lib/metric_fu/churn.rb +8 -7
- data/lib/metric_fu/flay.rb +17 -0
- data/lib/metric_fu/flog.rb +129 -0
- data/lib/metric_fu/reek.rb +17 -0
- data/lib/metric_fu/roodi.rb +17 -0
- data/lib/metric_fu.rb +17 -3
- data/lib/tasks/churn.rake +1 -3
- data/lib/tasks/coverage.rake +19 -10
- data/lib/tasks/flay.rake +1 -4
- data/lib/tasks/flog.rake +10 -10
- data/lib/tasks/metric_fu.rake +8 -4
- data/lib/tasks/metric_fu.rb +1 -1
- data/lib/tasks/railroad.rake +39 -0
- data/lib/tasks/reek.rake +6 -0
- data/lib/tasks/roodi.rake +7 -0
- data/lib/tasks/saikuro.rake +1 -1
- data/lib/tasks/stats.rake +2 -3
- data/lib/templates/churn.html.erb +7 -4
- data/lib/templates/default.css +45 -0
- data/lib/templates/flay.html.erb +17 -10
- data/lib/templates/flog.html.erb +27 -15
- data/lib/templates/flog_page.html.erb +15 -3
- data/lib/templates/reek.html.erb +30 -0
- data/lib/templates/roodi.html.erb +26 -0
- data/spec/base_spec.rb +31 -9
- data/spec/churn_spec.rb +11 -4
- data/spec/config_spec.rb +110 -0
- data/spec/{flay_reporter_spec.rb → flay_spec.rb} +10 -3
- data/spec/flog_spec.rb +208 -0
- data/spec/md5_tracker_spec.rb +1 -3
- data/spec/reek_spec.rb +26 -0
- data/spec/spec_helper.rb +7 -3
- metadata +42 -18
- data/lib/metric_fu/flay_reporter.rb +0 -17
- data/lib/metric_fu/flog_reporter/base.rb +0 -49
- data/lib/metric_fu/flog_reporter/generator.rb +0 -39
- data/lib/metric_fu/flog_reporter/operator.rb +0 -10
- data/lib/metric_fu/flog_reporter/page.rb +0 -33
- data/lib/metric_fu/flog_reporter/scanned_method.rb +0 -28
- data/lib/metric_fu/flog_reporter.rb +0 -5
- data/lib/templates/churn.css +0 -38
- data/lib/templates/flay.css +0 -38
- data/lib/templates/flog.css +0 -39
- data/spec/flog_reporter/base_spec.rb +0 -69
@@ -1,39 +0,0 @@
|
|
1
|
-
module MetricFu::FlogReporter
|
2
|
-
class Generator < MetricFu::Base::Generator
|
3
|
-
def generate_report
|
4
|
-
flog_hashes = []
|
5
|
-
Dir.glob("#{@base_dir}/**/*.txt").each do |filename|
|
6
|
-
begin
|
7
|
-
page = Base.parse(open(filename, "r") { |f| f.read })
|
8
|
-
rescue InvalidFlog
|
9
|
-
puts "Invalid flog for #{filename}"
|
10
|
-
next
|
11
|
-
end
|
12
|
-
|
13
|
-
next unless page
|
14
|
-
|
15
|
-
unless MetricFu::MD5Tracker.file_already_counted?(filename)
|
16
|
-
generate_page(filename, page)
|
17
|
-
end
|
18
|
-
flog_hashes << { :path => File.basename(filename, ".txt") + '.html',
|
19
|
-
:page => page }
|
20
|
-
end
|
21
|
-
|
22
|
-
generate_index(flog_hashes)
|
23
|
-
end
|
24
|
-
|
25
|
-
def generate_page(filename, page)
|
26
|
-
save_html(page.to_html, File.basename(filename, ".txt"))
|
27
|
-
end
|
28
|
-
|
29
|
-
# should be dynamically read from the class
|
30
|
-
def template_name
|
31
|
-
'flog'
|
32
|
-
end
|
33
|
-
|
34
|
-
def generate_index(flog_hashes)
|
35
|
-
html = ERB.new(File.read(template_file)).result(binding)
|
36
|
-
save_html(html)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module MetricFu::FlogReporter
|
2
|
-
class Page < MetricFu::Base::Generator
|
3
|
-
attr_accessor :score, :scanned_methods
|
4
|
-
|
5
|
-
def initialize(score, scanned_methods = [])
|
6
|
-
@score = score.to_f
|
7
|
-
@scanned_methods = scanned_methods
|
8
|
-
end
|
9
|
-
|
10
|
-
def to_html
|
11
|
-
ERB.new(File.read(template_file)).result(binding)
|
12
|
-
end
|
13
|
-
|
14
|
-
def average_score
|
15
|
-
sum = 0
|
16
|
-
scanned_methods.each do |m|
|
17
|
-
sum += m.score
|
18
|
-
end
|
19
|
-
sum / scanned_methods.length
|
20
|
-
end
|
21
|
-
|
22
|
-
def highest_score
|
23
|
-
scanned_methods.inject(0) do |highest, m|
|
24
|
-
m.score > highest ? m.score : highest
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# should be dynamically read from the class
|
29
|
-
def template_name
|
30
|
-
'flog_page'
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
module MetricFu::FlogReporter
|
2
|
-
class ScannedMethod
|
3
|
-
attr_accessor :name, :score, :operators
|
4
|
-
|
5
|
-
def initialize(name, score, operators = [])
|
6
|
-
@name = name
|
7
|
-
@score = score.to_f
|
8
|
-
@operators = operators
|
9
|
-
end
|
10
|
-
|
11
|
-
def to_html
|
12
|
-
output = "<p><strong>#{name} (#{score})</strong></p>\n"
|
13
|
-
output << "<table>\n"
|
14
|
-
output << "<tr><th>Score</th><th>Operator</th></tr>\n"
|
15
|
-
count = 0
|
16
|
-
operators.each do |operator|
|
17
|
-
output << <<-EOF
|
18
|
-
<tr class='#{Base.cycle("light", "dark", count)}'>
|
19
|
-
<td class='score'>#{sprintf(SCORE_FORMAT, operator.score)}</td>
|
20
|
-
<td class='score'>#{operator.operator}</td>
|
21
|
-
</tr>
|
22
|
-
EOF
|
23
|
-
count += 1
|
24
|
-
end
|
25
|
-
output << "</table>\n\n"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,5 +0,0 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'flog_reporter', 'base')
|
2
|
-
require File.join(File.dirname(__FILE__), 'flog_reporter', 'page')
|
3
|
-
require File.join(File.dirname(__FILE__), 'flog_reporter', 'scanned_method')
|
4
|
-
require File.join(File.dirname(__FILE__), 'flog_reporter', 'operator')
|
5
|
-
require File.join(File.dirname(__FILE__), 'flog_reporter', 'generator')
|
data/lib/templates/churn.css
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
body {
|
2
|
-
margin: 20px;
|
3
|
-
padding: 0;
|
4
|
-
font-size: 12px;
|
5
|
-
font-family: bitstream vera sans, verdana, arial, sans serif;
|
6
|
-
background-color: #efefef;
|
7
|
-
}
|
8
|
-
|
9
|
-
table {
|
10
|
-
border-collapse: collapse;
|
11
|
-
/*border-spacing: 0;*/
|
12
|
-
border: 1px solid #666;
|
13
|
-
background-color: #fff;
|
14
|
-
margin-bottom: 20px;
|
15
|
-
}
|
16
|
-
|
17
|
-
table, th, th+th, td, td+td {
|
18
|
-
border: 1px solid #ccc;
|
19
|
-
}
|
20
|
-
|
21
|
-
table th {
|
22
|
-
font-size: 12px;
|
23
|
-
color: #fc0;
|
24
|
-
padding: 4px 0;
|
25
|
-
background-color: #336;
|
26
|
-
}
|
27
|
-
|
28
|
-
th, td {
|
29
|
-
padding: 4px 10px;
|
30
|
-
}
|
31
|
-
|
32
|
-
td {
|
33
|
-
font-size: 13px;
|
34
|
-
}
|
35
|
-
|
36
|
-
.warning {
|
37
|
-
background-color: yellow;
|
38
|
-
}
|
data/lib/templates/flay.css
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
body {
|
2
|
-
margin: 20px;
|
3
|
-
padding: 0;
|
4
|
-
font-size: 12px;
|
5
|
-
font-family: bitstream vera sans, verdana, arial, sans serif;
|
6
|
-
background-color: #efefef;
|
7
|
-
}
|
8
|
-
|
9
|
-
table {
|
10
|
-
border-collapse: collapse;
|
11
|
-
/*border-spacing: 0;*/
|
12
|
-
border: 1px solid #666;
|
13
|
-
background-color: #fff;
|
14
|
-
margin-bottom: 10px;
|
15
|
-
}
|
16
|
-
|
17
|
-
table, th, th+th, td, td+td {
|
18
|
-
border: 1px solid #ccc;
|
19
|
-
}
|
20
|
-
|
21
|
-
table th {
|
22
|
-
font-size: 14px;
|
23
|
-
color: #fc0;
|
24
|
-
background-color: #336;
|
25
|
-
text-align: left;
|
26
|
-
}
|
27
|
-
|
28
|
-
th, td {
|
29
|
-
padding: 4px 10px;
|
30
|
-
}
|
31
|
-
|
32
|
-
td {
|
33
|
-
font-size: 13px;
|
34
|
-
}
|
35
|
-
|
36
|
-
.warning {
|
37
|
-
background-color: yellow;
|
38
|
-
}
|
data/lib/templates/flog.css
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
body {
|
2
|
-
background-color: rgb(240, 240, 245);
|
3
|
-
font-family: verdana, arial, helvetica;
|
4
|
-
}
|
5
|
-
|
6
|
-
table {
|
7
|
-
border-collapse: collapse;
|
8
|
-
}
|
9
|
-
|
10
|
-
table.report {
|
11
|
-
width: 100%;
|
12
|
-
}
|
13
|
-
|
14
|
-
table th {
|
15
|
-
text-align: center;
|
16
|
-
}
|
17
|
-
|
18
|
-
table td.score {
|
19
|
-
text-align: right;
|
20
|
-
}
|
21
|
-
|
22
|
-
table th {
|
23
|
-
background: #dcecff;
|
24
|
-
border: #d0d0d0 1px solid;
|
25
|
-
font-weight: bold;
|
26
|
-
}
|
27
|
-
|
28
|
-
table td {
|
29
|
-
border: #d0d0d0 1px solid;
|
30
|
-
}
|
31
|
-
|
32
|
-
table tr.light {
|
33
|
-
background-color: rgb(240, 240, 245);
|
34
|
-
}
|
35
|
-
|
36
|
-
table tr.dark {
|
37
|
-
background-color: rgb(230, 230, 235);
|
38
|
-
}
|
39
|
-
|
@@ -1,69 +0,0 @@
|
|
1
|
-
require 'spec'
|
2
|
-
require File.dirname(__FILE__) + '/../../lib/metric_fu/flog_reporter'
|
3
|
-
include MetricFu::FlogReporter
|
4
|
-
|
5
|
-
describe "FlogReporter::Base" do
|
6
|
-
before do
|
7
|
-
@alpha_only_method = <<-AOM
|
8
|
-
Total flog = 13.6283678106927
|
9
|
-
|
10
|
-
ErrorMailer#errormail: (12.5)
|
11
|
-
12.0: assignment
|
12
|
-
1.2: []
|
13
|
-
1.2: now
|
14
|
-
1.2: content_type
|
15
|
-
AOM
|
16
|
-
|
17
|
-
@method_that_has_digits = <<-MTHD
|
18
|
-
Total flog = 7.08378429936994
|
19
|
-
|
20
|
-
NoImmunizationReason#to_c32: (7.1)
|
21
|
-
3.0: code
|
22
|
-
2.3: branch
|
23
|
-
1.4: templateId
|
24
|
-
1.2: act
|
25
|
-
1.1: entryRelationship
|
26
|
-
MTHD
|
27
|
-
|
28
|
-
@bang_method = <<-BM
|
29
|
-
Total flog = 7.08378429936994
|
30
|
-
|
31
|
-
NoImmunizationReason#to_c32!: (7.1)
|
32
|
-
3.0: code
|
33
|
-
2.3: branch
|
34
|
-
1.4: templateId
|
35
|
-
1.2: act
|
36
|
-
1.1: entryRelationship
|
37
|
-
BM
|
38
|
-
end
|
39
|
-
|
40
|
-
it "should be able to parse an alpha only method" do
|
41
|
-
page = Base.parse(@alpha_only_method)
|
42
|
-
page.should_not be_nil
|
43
|
-
page.score.should == 13.6283678106927
|
44
|
-
page.scanned_methods.size.should == 1
|
45
|
-
sm = page.scanned_methods.first
|
46
|
-
sm.name.should == 'ErrorMailer#errormail'
|
47
|
-
sm.score.should == 12.5
|
48
|
-
end
|
49
|
-
|
50
|
-
it "should be able to parse method that has digits" do
|
51
|
-
page = Base.parse(@method_that_has_digits)
|
52
|
-
page.should_not be_nil
|
53
|
-
page.score.should == 7.08378429936994
|
54
|
-
page.scanned_methods.size.should == 1
|
55
|
-
sm = page.scanned_methods.first
|
56
|
-
sm.name.should == 'NoImmunizationReason#to_c32'
|
57
|
-
sm.score.should == 7.1
|
58
|
-
end
|
59
|
-
|
60
|
-
it "should be able to parse bang method" do
|
61
|
-
page = Base.parse(@bang_method)
|
62
|
-
page.should_not be_nil
|
63
|
-
page.score.should == 7.08378429936994
|
64
|
-
page.scanned_methods.size.should == 1
|
65
|
-
sm = page.scanned_methods.first
|
66
|
-
sm.name.should == 'NoImmunizationReason#to_c32!'
|
67
|
-
sm.score.should == 7.1
|
68
|
-
end
|
69
|
-
end
|