metric_fu 2.0.0 → 2.0.1
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/HISTORY +13 -5
- data/README +2 -2
- data/Rakefile +1 -1
- data/TODO +3 -1
- data/lib/base/base_template.rb +16 -16
- data/lib/base/churn_analyzer.rb +3 -3
- data/lib/base/code_issue.rb +8 -8
- data/lib/base/configuration.rb +24 -22
- data/lib/base/flay_analyzer.rb +2 -2
- data/lib/base/flog_analyzer.rb +4 -4
- data/lib/base/generator.rb +21 -21
- data/lib/base/graph.rb +15 -10
- data/lib/base/line_numbers.rb +56 -55
- data/lib/base/location.rb +68 -66
- data/lib/base/metric_analyzer.rb +21 -21
- data/lib/base/ranking.rb +23 -22
- data/lib/base/rcov_analyzer.rb +3 -3
- data/lib/base/reek_analyzer.rb +12 -10
- data/lib/base/report.rb +9 -9
- data/lib/base/roodi_analyzer.rb +2 -2
- data/lib/base/saikuro_analyzer.rb +4 -4
- data/lib/base/scoring_strategies.rb +5 -5
- data/lib/base/stats_analyzer.rb +2 -2
- data/lib/base/table.rb +4 -4
- data/lib/generators/churn.rb +1 -1
- data/lib/generators/flay.rb +1 -1
- data/lib/generators/hotspots.rb +4 -4
- data/lib/generators/rails_best_practices.rb +1 -1
- data/lib/generators/rcov.rb +17 -17
- data/lib/generators/reek.rb +2 -2
- data/lib/generators/saikuro.rb +42 -42
- data/lib/generators/stats.rb +6 -6
- data/lib/graphs/engines/bluff.rb +1 -1
- data/lib/graphs/engines/gchart.rb +7 -7
- data/lib/graphs/flog_grapher.rb +3 -3
- data/lib/graphs/grapher.rb +1 -1
- data/lib/metric_fu.rb +2 -2
- data/lib/templates/awesome/churn.html.erb +1 -1
- data/lib/templates/awesome/css/integrity.css +0 -1
- data/lib/templates/awesome/flay.html.erb +2 -2
- data/lib/templates/awesome/flog.html.erb +2 -2
- data/lib/templates/awesome/hotspots.html.erb +4 -4
- data/lib/templates/awesome/index.html.erb +2 -2
- data/lib/templates/awesome/rails_best_practices.html.erb +1 -1
- data/lib/templates/awesome/rcov.html.erb +1 -1
- data/lib/templates/awesome/roodi.html.erb +1 -1
- data/lib/templates/awesome/saikuro.html.erb +3 -3
- data/lib/templates/awesome/stats.html.erb +1 -1
- data/lib/templates/standard/churn.html.erb +2 -2
- data/lib/templates/standard/default.css +4 -4
- data/lib/templates/standard/flay.html.erb +4 -4
- data/lib/templates/standard/flog.html.erb +1 -1
- data/lib/templates/standard/hotspots.html.erb +4 -4
- data/lib/templates/standard/index.html.erb +2 -2
- data/lib/templates/standard/rails_best_practices.html.erb +2 -2
- data/lib/templates/standard/rcov.html.erb +2 -2
- data/lib/templates/standard/reek.html.erb +1 -1
- data/lib/templates/standard/roodi.html.erb +2 -2
- data/lib/templates/standard/saikuro.html.erb +4 -4
- data/lib/templates/standard/stats.html.erb +2 -2
- data/spec/base/base_template_spec.rb +1 -1
- data/spec/base/configuration_spec.rb +36 -36
- data/spec/base/generator_spec.rb +10 -10
- data/spec/base/graph_spec.rb +41 -4
- data/spec/base/line_numbers_spec.rb +22 -22
- data/spec/base/report_spec.rb +9 -9
- data/spec/generators/churn_spec.rb +4 -4
- data/spec/generators/flay_spec.rb +31 -31
- data/spec/generators/flog_spec.rb +18 -18
- data/spec/generators/rails_best_practices_spec.rb +6 -6
- data/spec/generators/rcov_spec.rb +18 -18
- data/spec/generators/reek_spec.rb +10 -10
- data/spec/generators/roodi_spec.rb +2 -2
- data/spec/generators/saikuro_spec.rb +7 -7
- data/spec/generators/stats_spec.rb +6 -6
- data/spec/graphs/engines/gchart_spec.rb +8 -8
- data/spec/graphs/flog_grapher_spec.rb +8 -8
- data/spec/resources/line_numbers/foo.rb +7 -7
- data/spec/resources/line_numbers/module.rb +2 -2
- data/spec/resources/line_numbers/module_surrounds_class.rb +6 -6
- data/spec/resources/saikuro/index_cyclo.html +2 -2
- data/spec/resources/yml/20090630.yml +349 -349
- data/spec/resources/yml/metric_missing.yml +1 -1
- data/tasks/metric_fu.rake +4 -4
- metadata +4 -4
data/spec/base/generator_spec.rb
CHANGED
@@ -19,7 +19,7 @@ describe MetricFu::Generator do
|
|
19
19
|
end
|
20
20
|
|
21
21
|
before(:each) do
|
22
|
-
@concrete_class = ConcreteClass.new
|
22
|
+
@concrete_class = ConcreteClass.new
|
23
23
|
end
|
24
24
|
|
25
25
|
describe "ConcreteClass#class_name" do
|
@@ -91,7 +91,7 @@ describe MetricFu::Generator do
|
|
91
91
|
ConcreteClass.generate_report
|
92
92
|
end
|
93
93
|
end
|
94
|
-
|
94
|
+
|
95
95
|
describe '@concrete_class should have hook methods for '\
|
96
96
|
+'[before|after]_[emit|analyze|to_h]' do
|
97
97
|
|
@@ -105,7 +105,7 @@ describe MetricFu::Generator do
|
|
105
105
|
@concrete_class.respond_to?("after_#{meth}".to_sym).should be_true
|
106
106
|
end
|
107
107
|
end
|
108
|
-
|
108
|
+
|
109
109
|
it "should respond to #before_to_h" do
|
110
110
|
@concrete_class.respond_to?("before_to_h".to_sym).should be_true
|
111
111
|
end
|
@@ -129,7 +129,7 @@ describe MetricFu::Generator do
|
|
129
129
|
end
|
130
130
|
|
131
131
|
describe "#generate_report (in a concrete class)" do
|
132
|
-
|
132
|
+
|
133
133
|
%w[emit analyze].each do |meth|
|
134
134
|
it "should call #before_#{meth}" do
|
135
135
|
@concrete_class.should_receive("before_#{meth}")
|
@@ -146,12 +146,12 @@ describe MetricFu::Generator do
|
|
146
146
|
@concrete_class.generate_report
|
147
147
|
end
|
148
148
|
end
|
149
|
-
|
149
|
+
|
150
150
|
it "should call #before_to_h" do
|
151
151
|
@concrete_class.should_receive("before_to_h")
|
152
152
|
@concrete_class.generate_report
|
153
153
|
end
|
154
|
-
|
154
|
+
|
155
155
|
it "should call #to_h" do
|
156
156
|
@concrete_class.should_receive(:to_h)
|
157
157
|
@concrete_class.generate_report
|
@@ -160,7 +160,7 @@ describe MetricFu::Generator do
|
|
160
160
|
end
|
161
161
|
|
162
162
|
describe "path filter" do
|
163
|
-
|
163
|
+
|
164
164
|
context "given a list of paths" do
|
165
165
|
|
166
166
|
before do
|
@@ -173,14 +173,14 @@ describe MetricFu::Generator do
|
|
173
173
|
lib/bad/two.rb
|
174
174
|
lib/bad/three.rb
|
175
175
|
lib/worse/four.rb)
|
176
|
-
@container = create_construct
|
176
|
+
@container = create_construct
|
177
177
|
@paths.each do |path|
|
178
178
|
@container.file(path)
|
179
179
|
end
|
180
180
|
@old_dir = Dir.pwd
|
181
181
|
Dir.chdir(@container)
|
182
182
|
end
|
183
|
-
|
183
|
+
|
184
184
|
after do
|
185
185
|
Dir.chdir(@old_dir)
|
186
186
|
@container.destroy!
|
@@ -219,5 +219,5 @@ describe MetricFu::Generator do
|
|
219
219
|
|
220
220
|
|
221
221
|
end
|
222
|
-
|
222
|
+
|
223
223
|
end
|
data/spec/base/graph_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
3
|
describe MetricFu do
|
4
|
-
|
4
|
+
|
5
5
|
describe "responding to #graph" do
|
6
6
|
it "should return an instance of Graph" do
|
7
7
|
MetricFu.graph.should be_a(Graph)
|
@@ -10,15 +10,52 @@ describe MetricFu do
|
|
10
10
|
end
|
11
11
|
|
12
12
|
describe MetricFu::Graph do
|
13
|
-
|
13
|
+
|
14
14
|
before(:each) do
|
15
15
|
@graph = MetricFu::Graph.new
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
describe "responding to #add with gchart enabled" do
|
19
19
|
it 'should instantiate a grapher and push it to clazz' do
|
20
20
|
@graph.clazz.should_receive(:push).with(an_instance_of(RcovGchartGrapher))
|
21
21
|
@graph.add("rcov", 'gchart')
|
22
22
|
end
|
23
|
-
end
|
23
|
+
end
|
24
|
+
|
25
|
+
describe "responding to #add with gchart enabled" do
|
26
|
+
it 'should instantiate a grapher and push it to clazz' do
|
27
|
+
@graph.clazz.should_receive(:push).with(an_instance_of(RcovGchartGrapher))
|
28
|
+
@graph.add("rcov", 'gchart')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
describe "setting the date on the graph" do
|
33
|
+
before(:each) do
|
34
|
+
@graph.stub!(:puts)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should set the date once for one data point" do
|
38
|
+
Dir.should_receive(:[]).and_return(["metric_fu/tmp/_data/20101105.yml"])
|
39
|
+
File.should_receive(:join)
|
40
|
+
File.should_receive(:open).and_return("Metrics")
|
41
|
+
mock_grapher = stub
|
42
|
+
mock_grapher.should_receive(:get_metrics).with("Metrics", "11/5")
|
43
|
+
mock_grapher.should_receive(:graph!)
|
44
|
+
|
45
|
+
@graph.clazz = [mock_grapher]
|
46
|
+
@graph.generate
|
47
|
+
end
|
48
|
+
|
49
|
+
it "should set the date when the data directory isn't in the default place" do
|
50
|
+
Dir.should_receive(:[]).and_return(["/some/kind/of/weird/directory/somebody/configured/_data/20101105.yml"])
|
51
|
+
File.should_receive(:join)
|
52
|
+
File.should_receive(:open).and_return("Metrics")
|
53
|
+
mock_grapher = stub
|
54
|
+
mock_grapher.should_receive(:get_metrics).with("Metrics", "11/5")
|
55
|
+
mock_grapher.should_receive(:graph!)
|
56
|
+
|
57
|
+
@graph.clazz = [mock_grapher]
|
58
|
+
@graph.generate
|
59
|
+
end
|
60
|
+
end
|
24
61
|
end
|
@@ -1,62 +1,62 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
|
-
describe LineNumbers do
|
4
|
-
|
3
|
+
describe MetricFu::LineNumbers do
|
4
|
+
|
5
5
|
describe "in_method?" do
|
6
6
|
it "should know if a line is NOT in a method" do
|
7
|
-
ln = LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
7
|
+
ln = MetricFu::LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
8
8
|
ln.in_method?(2).should == false
|
9
9
|
end
|
10
|
-
|
10
|
+
|
11
11
|
it "should know if a line is in an instance method" do
|
12
|
-
ln = LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
12
|
+
ln = MetricFu::LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
13
13
|
ln.in_method?(8).should == true
|
14
14
|
end
|
15
|
-
|
15
|
+
|
16
16
|
it "should know if a line is in an class method" do
|
17
|
-
ln = LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
17
|
+
ln = MetricFu::LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
18
18
|
ln.in_method?(3).should == true
|
19
19
|
end
|
20
20
|
end
|
21
|
-
|
21
|
+
|
22
22
|
describe "method_at_line" do
|
23
23
|
it "should know the name of an instance method at a particular line" do
|
24
|
-
ln = LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
24
|
+
ln = MetricFu::LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
25
25
|
ln.method_at_line(8).should == "Foo#what"
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
it "should know the name of a class method at a particular line" do
|
29
|
-
ln = LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
29
|
+
ln = MetricFu::LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
30
30
|
ln.method_at_line(3).should == "Foo::awesome"
|
31
31
|
end
|
32
|
-
|
32
|
+
|
33
33
|
it "should know the name of a private method at a particular line" do
|
34
|
-
ln = LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
34
|
+
ln = MetricFu::LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
35
35
|
ln.method_at_line(28).should == "Foo#whoop"
|
36
36
|
end
|
37
|
-
|
37
|
+
|
38
38
|
it "should know the name of a class method defined in a 'class << self block at a particular line" do
|
39
|
-
ln = LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
39
|
+
ln = MetricFu::LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/foo.rb"))
|
40
40
|
ln.method_at_line(23).should == "Foo::neat"
|
41
41
|
end
|
42
|
-
|
42
|
+
|
43
43
|
it "should know the name of an instance method at a particular line in a file with two classes" do
|
44
|
-
ln = LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/two_classes.rb"))
|
44
|
+
ln = MetricFu::LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/two_classes.rb"))
|
45
45
|
ln.method_at_line(3).should == "Foo#stuff"
|
46
46
|
ln.method_at_line(9).should == "Bar#stuff"
|
47
47
|
end
|
48
|
-
|
48
|
+
|
49
49
|
it "should work with modules" do
|
50
|
-
ln = LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/module.rb"))
|
50
|
+
ln = MetricFu::LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/module.rb"))
|
51
51
|
ln.method_at_line(4).should == 'KickAss#get_beat_up?'
|
52
52
|
end
|
53
|
-
|
53
|
+
|
54
54
|
it "should work with module surrounding class" do
|
55
|
-
ln = LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/module_surrounds_class.rb"))
|
55
|
+
ln = MetricFu::LineNumbers.new(File.read(File.dirname(__FILE__) + "/../resources/line_numbers/module_surrounds_class.rb"))
|
56
56
|
ln.method_at_line(5).should == "StuffModule::ThingClass#do_it"
|
57
57
|
# ln.method_at_line(12).should == "StuffModule#blah" #why no work?
|
58
58
|
end
|
59
59
|
|
60
60
|
end
|
61
|
-
|
61
|
+
|
62
62
|
end
|
data/spec/base/report_spec.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
3
|
describe MetricFu do
|
4
|
-
|
4
|
+
|
5
5
|
describe "#report" do
|
6
6
|
it 'should return an instance of Report' do
|
7
7
|
MetricFu.report.instance_of?(Report).should be(true)
|
@@ -68,9 +68,9 @@ describe MetricFu::Report do
|
|
68
68
|
before(:each) do
|
69
69
|
@config = mock('configuration')
|
70
70
|
end
|
71
|
-
|
71
|
+
|
72
72
|
describe 'when the platform is os x ' do
|
73
|
-
|
73
|
+
|
74
74
|
before(:each) do
|
75
75
|
@config.should_receive(:platform).and_return('darwin')
|
76
76
|
end
|
@@ -81,7 +81,7 @@ describe MetricFu::Report do
|
|
81
81
|
@config.should_receive(:is_cruise_control_rb?).and_return(true)
|
82
82
|
MetricFu.stub!(:configuration).and_return(@config)
|
83
83
|
end
|
84
|
-
|
84
|
+
|
85
85
|
it 'should return false' do
|
86
86
|
@report.open_in_browser?.should be_false
|
87
87
|
end
|
@@ -99,12 +99,12 @@ describe MetricFu::Report do
|
|
99
99
|
end
|
100
100
|
end
|
101
101
|
end
|
102
|
-
|
102
|
+
|
103
103
|
describe 'when the platform is not os x ' do
|
104
104
|
before(:each) do
|
105
105
|
@config.should_receive(:platform).and_return('other')
|
106
106
|
end
|
107
|
-
|
107
|
+
|
108
108
|
describe 'and we are in cruise control' do
|
109
109
|
before(:each) do
|
110
110
|
MetricFu.stub!(:configuration).and_return(@config)
|
@@ -119,14 +119,14 @@ describe MetricFu::Report do
|
|
119
119
|
before(:each) do
|
120
120
|
MetricFu.stub!(:configuration).and_return(@config)
|
121
121
|
end
|
122
|
-
|
122
|
+
|
123
123
|
it 'should return false' do
|
124
124
|
@report.open_in_browser?.should be_false
|
125
125
|
end
|
126
126
|
end
|
127
127
|
end
|
128
128
|
end
|
129
|
-
|
129
|
+
|
130
130
|
|
131
131
|
describe '#show_in_browser' do
|
132
132
|
it 'should call open with the passed directory' do
|
@@ -134,6 +134,6 @@ describe MetricFu::Report do
|
|
134
134
|
@report.should_receive(:system).with("open my_dir/index.html")
|
135
135
|
@report.show_in_browser('my_dir')
|
136
136
|
end
|
137
|
-
|
137
|
+
|
138
138
|
end
|
139
139
|
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
3
|
describe Churn do
|
4
|
-
|
4
|
+
|
5
5
|
describe "analyze method" do
|
6
6
|
before :each do
|
7
7
|
MetricFu::Configuration.run {}
|
8
8
|
File.stub!(:directory?).and_return(true)
|
9
9
|
@changes = {"lib/generators/flog.rb"=>2, "lib/metric_fu.rb"=>3}
|
10
10
|
end
|
11
|
-
|
11
|
+
|
12
12
|
it "should be empty on error" do
|
13
13
|
churn = MetricFu::Churn.new
|
14
14
|
churn.instance_variable_set(:@output, "fatal: Not a git repository")
|
@@ -24,13 +24,13 @@ describe Churn do
|
|
24
24
|
end
|
25
25
|
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
describe "to_h method" do
|
29
29
|
before :each do
|
30
30
|
MetricFu::Configuration.run {}
|
31
31
|
File.stub!(:directory?).and_return(true)
|
32
32
|
end
|
33
|
-
|
33
|
+
|
34
34
|
it "should put the changes into a hash" do
|
35
35
|
churn = MetricFu::Churn.new
|
36
36
|
churn.instance_variable_set(:@churn, {:churn => 'results'})
|
@@ -1,16 +1,16 @@
|
|
1
1
|
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
|
-
describe Flay do
|
3
|
+
describe Flay do
|
4
4
|
describe "emit method" do
|
5
5
|
it "should look at the dirs" do
|
6
6
|
MetricFu::Configuration.run {|config| config.flay = { :dirs_to_flay => ['app', 'lib'], :filetypes => ['rb'] } }
|
7
7
|
File.stub!(:directory?).and_return(true)
|
8
|
-
@flay = MetricFu::Flay.new('base_dir')
|
8
|
+
@flay = MetricFu::Flay.new('base_dir')
|
9
9
|
|
10
10
|
@flay.should_receive(:`).with("flay app lib")
|
11
11
|
output = @flay.emit
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
it "should limit flay scores by the minimum_score" do
|
15
15
|
MetricFu::Configuration.run {|config| config.flay = { :dirs_to_flay => [], :minimum_score => 99 } }
|
16
16
|
File.stub!(:directory?).and_return(true)
|
@@ -20,7 +20,7 @@ describe Flay do
|
|
20
20
|
output = @flay.emit
|
21
21
|
end
|
22
22
|
end
|
23
|
-
|
23
|
+
|
24
24
|
describe "analyze method" do
|
25
25
|
before :each do
|
26
26
|
lines = <<-HERE
|
@@ -42,7 +42,7 @@ Total score (lower is better) = 246
|
|
42
42
|
@flay = MetricFu::Flay.new('base_dir')
|
43
43
|
@flay.instance_variable_set(:@output, lines)
|
44
44
|
end
|
45
|
-
|
45
|
+
|
46
46
|
it "should analyze and return matches" do
|
47
47
|
@flay.analyze.should == [ ["Total score (lower is better) = 246"],
|
48
48
|
["\n1) IDENTICAL code found in :or (mass*2 = 68)",
|
@@ -55,47 +55,47 @@ Total score (lower is better) = 246
|
|
55
55
|
"app/controllers/primary_sites_controller.rb:89"] ]
|
56
56
|
end
|
57
57
|
end
|
58
|
-
|
58
|
+
|
59
59
|
describe "to_h method" do
|
60
|
-
|
60
|
+
|
61
61
|
before :each do
|
62
|
-
lines = [ ["Total score (lower is better) = 284"],
|
63
|
-
["\n1) IDENTICAL code found in :or (mass*2 = 68)",
|
64
|
-
"app/controllers/link_targets_controller.rb:57",
|
65
|
-
"app/controllers/primary_sites_controller.rb:138"],
|
66
|
-
["2) Similar code found in :if (mass = 64)",
|
67
|
-
"app/controllers/primary_sites_controller.rb:75",
|
68
|
-
"app/controllers/primary_sites_controller.rb:76",
|
69
|
-
"app/controllers/primary_sites_controller.rb:88",
|
70
|
-
"app/controllers/primary_sites_controller.rb:89"],
|
71
|
-
["3) Similar code found in :defn (mass = 40)",
|
72
|
-
"app/controllers/link_targets_controller.rb:40",
|
73
|
-
"app/controllers/primary_sites_controller.rb:98"],
|
74
|
-
["4) Similar code found in :defn (mass = 38)",
|
75
|
-
"app/controllers/link_targets_controller.rb:13",
|
76
|
-
"app/controllers/primary_sites_controller.rb:50"],
|
77
|
-
["5) Similar code found in :defn (mass = 38)",
|
78
|
-
"app/models/primary_site.rb:104",
|
79
|
-
"app/models/primary_site.rb:109"],
|
80
|
-
["6) Similar code found in :call (mass = 36)",
|
81
|
-
"app/controllers/bookmarklet_integration_controller.rb:6",
|
62
|
+
lines = [ ["Total score (lower is better) = 284"],
|
63
|
+
["\n1) IDENTICAL code found in :or (mass*2 = 68)",
|
64
|
+
"app/controllers/link_targets_controller.rb:57",
|
65
|
+
"app/controllers/primary_sites_controller.rb:138"],
|
66
|
+
["2) Similar code found in :if (mass = 64)",
|
67
|
+
"app/controllers/primary_sites_controller.rb:75",
|
68
|
+
"app/controllers/primary_sites_controller.rb:76",
|
69
|
+
"app/controllers/primary_sites_controller.rb:88",
|
70
|
+
"app/controllers/primary_sites_controller.rb:89"],
|
71
|
+
["3) Similar code found in :defn (mass = 40)",
|
72
|
+
"app/controllers/link_targets_controller.rb:40",
|
73
|
+
"app/controllers/primary_sites_controller.rb:98"],
|
74
|
+
["4) Similar code found in :defn (mass = 38)",
|
75
|
+
"app/controllers/link_targets_controller.rb:13",
|
76
|
+
"app/controllers/primary_sites_controller.rb:50"],
|
77
|
+
["5) Similar code found in :defn (mass = 38)",
|
78
|
+
"app/models/primary_site.rb:104",
|
79
|
+
"app/models/primary_site.rb:109"],
|
80
|
+
["6) Similar code found in :call (mass = 36)",
|
81
|
+
"app/controllers/bookmarklet_integration_controller.rb:6",
|
82
82
|
"app/controllers/bookmarklet_integration_controller.rb:17"]]
|
83
|
-
|
83
|
+
|
84
84
|
MetricFu::Configuration.run {}
|
85
85
|
File.stub!(:directory?).and_return(true)
|
86
86
|
flay = MetricFu::Flay.new('base_dir')
|
87
87
|
flay.instance_variable_set(:@matches, lines)
|
88
88
|
@results = flay.to_h
|
89
89
|
end
|
90
|
-
|
90
|
+
|
91
91
|
it "should find the total_score" do
|
92
92
|
@results[:flay][:total_score].should == '284'
|
93
93
|
end
|
94
|
-
|
94
|
+
|
95
95
|
it "should have 6 matches" do
|
96
96
|
@results[:flay][:matches].size.should == 6
|
97
97
|
end
|
98
|
-
|
98
|
+
|
99
99
|
it "should capture info for match" do
|
100
100
|
@results[:flay][:matches].first[:reason].should =~ /IDENTICAL/
|
101
101
|
@results[:flay][:matches].first[:matches].first[:name].should =~ /link_targets_controller/
|
@@ -5,7 +5,7 @@ describe Flog do
|
|
5
5
|
File.stub!(:directory?).and_return(true)
|
6
6
|
@flog = MetricFu::Flog.new('base_dir')
|
7
7
|
end
|
8
|
-
|
8
|
+
|
9
9
|
describe "emit method" do
|
10
10
|
it "should look for files and flog them" do
|
11
11
|
Dir.should_receive(:glob).with("lib/**/*.rb").and_return(["found/file.rb"])
|
@@ -15,41 +15,41 @@ describe Flog do
|
|
15
15
|
@flog.emit
|
16
16
|
end
|
17
17
|
end
|
18
|
-
|
18
|
+
|
19
19
|
describe "analyze method" do
|
20
20
|
it "should harvest the flog information and put it into method_containers" do
|
21
21
|
first_full_method_name = "ClassName#first_method_name"
|
22
22
|
second_full_method_name = "ClassName#second_method_name"
|
23
|
-
|
23
|
+
|
24
24
|
flogger = mock('flogger', :calls => {first_full_method_name => {:branch => 11.1, :puts => 1.1},
|
25
|
-
second_full_method_name => {:branch => 22.2, :puts => 2.2}},
|
25
|
+
second_full_method_name => {:branch => 22.2, :puts => 2.2}},
|
26
26
|
:method_locations => {first_full_method_name => '/file/location.rb:11',
|
27
|
-
second_full_method_name => '/file/location.rb:22'},
|
27
|
+
second_full_method_name => '/file/location.rb:22'},
|
28
28
|
:totals => {first_full_method_name => 11.11,
|
29
29
|
second_full_method_name => 22.22})
|
30
30
|
@flog.instance_variable_set(:@flogger, flogger)
|
31
31
|
@flog.analyze
|
32
32
|
method_containers = @flog.instance_variable_get(:@method_containers)
|
33
33
|
method_containers.size.should == 1
|
34
|
-
|
35
|
-
expected={:methods=>{"ClassName#first_method_name" => { :path=>"/file/location.rb:11",
|
36
|
-
:score=>11.11,
|
37
|
-
:operators=>{ :branch=>11.1,
|
34
|
+
|
35
|
+
expected={:methods=>{"ClassName#first_method_name" => { :path=>"/file/location.rb:11",
|
36
|
+
:score=>11.11,
|
37
|
+
:operators=>{ :branch=>11.1,
|
38
38
|
:puts=>1.1}},
|
39
|
-
"ClassName#second_method_name" => {:path=>"/file/location.rb:22",
|
40
|
-
:score=>22.22,
|
41
|
-
:operators=>{ :branch=>22.2,
|
42
|
-
:puts=>2.2}}},
|
39
|
+
"ClassName#second_method_name" => {:path=>"/file/location.rb:22",
|
40
|
+
:score=>22.22,
|
41
|
+
:operators=>{ :branch=>22.2,
|
42
|
+
:puts=>2.2}}},
|
43
43
|
:path=>"/file/location.rb",
|
44
44
|
:average_score=>((11.11 + 22.22) / 2.0),
|
45
45
|
:total_score=>33.33,
|
46
46
|
:highest_score=>22.22,
|
47
47
|
:name=>"ClassName"}
|
48
|
-
|
48
|
+
|
49
49
|
method_containers["ClassName"].to_h.should == expected
|
50
50
|
end
|
51
51
|
end
|
52
|
-
|
52
|
+
|
53
53
|
describe "to_h method" do
|
54
54
|
it "should make-a nice hash" do
|
55
55
|
flogger = mock('flogger', :total => 111.1, :average => 7.3)
|
@@ -58,13 +58,13 @@ describe Flog do
|
|
58
58
|
:ignore_me_2 => mock('container_2', :highest_score => 33.3, :to_h => 'container_2'),
|
59
59
|
:ignore_me_3 => mock('container_3', :highest_score => 22.2, :to_h => 'container_3')}
|
60
60
|
@flog.instance_variable_set(:@method_containers, method_containers)
|
61
|
-
|
61
|
+
|
62
62
|
expected = {:flog => { :total => 111.1,
|
63
63
|
:average => 7.3,
|
64
64
|
:method_containers => ['container_2', 'container_3', 'container_1']}}
|
65
|
-
|
65
|
+
|
66
66
|
@flog.to_h.should == expected
|
67
67
|
end
|
68
|
-
|
68
|
+
|
69
69
|
end
|
70
70
|
end
|