jscruggs-metric_fu 1.0.2 → 1.1.0
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 -0
- data/README +1 -1
- data/Rakefile +1 -29
- data/TODO +1 -2
- data/lib/base/base_template.rb +18 -6
- data/lib/base/configuration.rb +22 -2
- data/lib/base/generator.rb +15 -2
- data/lib/base/graph.rb +37 -0
- data/lib/generators/churn.rb +6 -1
- data/lib/generators/flay.rb +5 -0
- data/lib/generators/flog.rb +6 -0
- data/lib/generators/rcov.rb +10 -0
- data/lib/generators/reek.rb +5 -0
- data/lib/generators/roodi.rb +7 -0
- data/lib/generators/saikuro.rb +184 -187
- data/lib/graphs/flay_grapher.rb +34 -0
- data/lib/graphs/flog_grapher.rb +37 -0
- data/lib/graphs/rcov_grapher.rb +34 -0
- data/lib/graphs/reek_grapher.rb +44 -0
- data/lib/graphs/roodi_grapher.rb +34 -0
- data/lib/metric_fu.rb +4 -0
- data/lib/templates/awesome/awesome_template.rb +30 -0
- data/lib/templates/awesome/churn.html.erb +19 -0
- data/lib/templates/awesome/default.css +75 -0
- data/lib/templates/awesome/flay.html.erb +27 -0
- data/lib/templates/awesome/flog.html.erb +46 -0
- data/lib/templates/awesome/index.html.erb +28 -0
- data/lib/templates/awesome/layout.html.erb +27 -0
- data/lib/templates/awesome/rcov.html.erb +36 -0
- data/lib/templates/awesome/reek.html.erb +34 -0
- data/lib/templates/awesome/roodi.html.erb +21 -0
- data/lib/templates/awesome/saikuro.html.erb +71 -0
- data/lib/templates/awesome/stats.html.erb +41 -0
- data/lib/templates/standard/churn.html.erb +1 -0
- data/lib/templates/standard/flay.html.erb +1 -0
- data/lib/templates/standard/flog.html.erb +3 -2
- data/lib/templates/standard/rcov.html.erb +5 -4
- data/lib/templates/standard/reek.html.erb +1 -0
- data/lib/templates/standard/roodi.html.erb +1 -0
- data/lib/templates/standard/saikuro.html.erb +1 -0
- data/lib/templates/standard/stats.html.erb +1 -0
- data/spec/base/base_template_spec.rb +35 -14
- data/spec/base/configuration_spec.rb +4 -4
- data/spec/base/generator_spec.rb +23 -1
- data/spec/base/md5_tracker_spec.rb +1 -1
- data/spec/base/report_spec.rb +1 -1
- data/spec/generators/churn_spec.rb +8 -8
- data/spec/generators/flay_spec.rb +4 -1
- data/spec/generators/flog_spec.rb +10 -2
- data/spec/generators/reek_spec.rb +2 -1
- data/spec/generators/saikuro_spec.rb +22 -17
- data/spec/generators/stats_spec.rb +1 -1
- data/tasks/metric_fu.rake +8 -1
- data/vendor/_fonts/monaco.ttf +0 -0
- metadata +30 -20
- data/tasks/railroad.rake +0 -39
data/spec/base/generator_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.dirname(__FILE__) + "/../spec_helper
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
3
|
describe MetricFu::Generator do
|
4
4
|
|
@@ -154,6 +154,28 @@ describe MetricFu::Generator do
|
|
154
154
|
@concrete_class.should_receive(:to_h)
|
155
155
|
@concrete_class.generate_report
|
156
156
|
end
|
157
|
+
|
158
|
+
it "should raise error if the concrete class is missing a required dependency" do
|
159
|
+
concrete_class_with_missing_gem = Class.new(MetricFu::Generator) do
|
160
|
+
def self.verify_dependencies!
|
161
|
+
raise 'gem install something # if you want these tasks'
|
162
|
+
end
|
163
|
+
end
|
164
|
+
lambda { concrete_class_with_missing_gem.generate_report }.should raise_error("gem install something # if you want these tasks")
|
165
|
+
end
|
157
166
|
|
158
167
|
end
|
168
|
+
|
169
|
+
describe "instantiation" do
|
170
|
+
it "should fail is dependencies not verified" do
|
171
|
+
ConcreteClass.should_receive(:verify_dependencies!).and_raise("Missing a required gem. Please 'gem install something'")
|
172
|
+
lambda { ConcreteClass.new() }.should raise_error("Missing a required gem. Please 'gem install something'")
|
173
|
+
end
|
174
|
+
|
175
|
+
it "should succeed when dependencies verified" do
|
176
|
+
ConcreteClass.should_receive(:verify_dependencies!).and_return(true)
|
177
|
+
ConcreteClass.new()
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
159
181
|
end
|
data/spec/base/report_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.dirname(__FILE__) +
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
3
|
describe Churn do
|
4
4
|
describe "initialize" do
|
@@ -8,20 +8,20 @@ describe Churn do
|
|
8
8
|
end
|
9
9
|
|
10
10
|
it "should setup git if .git exits" do
|
11
|
-
|
11
|
+
MetricFu::Churn.should_receive(:system).and_return(true)
|
12
12
|
Churn::Git.should_receive(:new)
|
13
13
|
MetricFu::Churn.new
|
14
14
|
end
|
15
15
|
|
16
16
|
it "should setup git if .svn exits" do
|
17
|
-
|
17
|
+
MetricFu::Churn.should_receive(:system).and_return(false)
|
18
18
|
File.should_receive(:exist?).with(".svn").and_return(true)
|
19
19
|
Churn::Svn.should_receive(:new)
|
20
20
|
MetricFu::Churn.new()
|
21
21
|
end
|
22
22
|
|
23
23
|
it "should raise an error if not .svn or .git" do
|
24
|
-
|
24
|
+
MetricFu::Churn.should_receive(:system).and_return(false)
|
25
25
|
lambda{MetricFu::Churn.new()}.should raise_error(Exception)
|
26
26
|
end
|
27
27
|
end
|
@@ -30,7 +30,7 @@ describe Churn do
|
|
30
30
|
before :each do
|
31
31
|
MetricFu::Configuration.run {|config| config.churn = {:minimum_churn_count => 2} }
|
32
32
|
File.stub!(:directory?).and_return(true)
|
33
|
-
|
33
|
+
MetricFu::Churn.should_receive(:system).and_return(true)
|
34
34
|
@git = Churn::Git.new
|
35
35
|
Churn::Git.should_receive(:new).and_return(@git)
|
36
36
|
@lines = <<-HERE.gsub(/^\s*/, "")
|
@@ -73,7 +73,7 @@ describe Churn do
|
|
73
73
|
before :each do
|
74
74
|
MetricFu::Configuration.run{|config| config.churn = {:minimum_churn_count => 2} }
|
75
75
|
File.stub!(:directory?).and_return(true)
|
76
|
-
|
76
|
+
MetricFu::Churn.should_receive(:system).and_return(false)
|
77
77
|
File.should_receive(:exist?).with(".svn").and_return(true)
|
78
78
|
@svn = Churn::Svn.new
|
79
79
|
Churn::Svn.should_receive(:new).and_return(@svn)
|
@@ -120,7 +120,7 @@ describe Churn do
|
|
120
120
|
before :each do
|
121
121
|
MetricFu::Configuration.run {}
|
122
122
|
File.stub!(:directory?).and_return(true)
|
123
|
-
|
123
|
+
MetricFu::Churn.should_receive(:system).and_return(true)
|
124
124
|
@changes = {"lib/generators/flog.rb"=>2, "lib/metric_fu.rb"=>3}
|
125
125
|
end
|
126
126
|
|
@@ -139,7 +139,7 @@ describe Churn do
|
|
139
139
|
before :each do
|
140
140
|
MetricFu::Configuration.run {}
|
141
141
|
File.stub!(:directory?).and_return(true)
|
142
|
-
|
142
|
+
MetricFu::Churn.should_receive(:system).and_return(true)
|
143
143
|
end
|
144
144
|
|
145
145
|
it "should put the changes into a hash" do
|
@@ -1,6 +1,9 @@
|
|
1
|
-
require File.dirname(__FILE__) +
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
3
|
describe Flay do
|
4
|
+
before :each do
|
5
|
+
MetricFu::Flay.stub!(:verify_dependencies!).and_return(true)
|
6
|
+
end
|
4
7
|
describe "emit method" do
|
5
8
|
before :each do
|
6
9
|
MetricFu::Configuration.run {|config| config.flay = { :dirs_to_flay => ['app', 'lib'] } }
|
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.dirname(__FILE__) +
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
describe Flog do
|
3
3
|
before :each do
|
4
4
|
@text = <<-HERE
|
@@ -123,6 +123,7 @@ describe Flog do
|
|
123
123
|
1.2: assignment
|
124
124
|
1.2: all
|
125
125
|
HERE
|
126
|
+
MetricFu::Flog.stub!(:verify_dependencies!).and_return(true)
|
126
127
|
end
|
127
128
|
|
128
129
|
describe "parse method" do
|
@@ -168,6 +169,13 @@ describe Flog do
|
|
168
169
|
flog_page = flog.parse(text)
|
169
170
|
flog_page.scanned_methods.first.name.should == "SomeNamespace::UsersController#create"
|
170
171
|
end
|
172
|
+
|
173
|
+
it "should parse empty flog files" do
|
174
|
+
text = ""
|
175
|
+
flog = MetricFu::Flog.new('base_dir')
|
176
|
+
flog_page = flog.parse(text)
|
177
|
+
flog_page.should be_nil
|
178
|
+
end
|
171
179
|
end
|
172
180
|
|
173
181
|
describe "to_h function" do
|
@@ -197,4 +205,4 @@ describe Flog do
|
|
197
205
|
@flog_hash[:flog][:pages].first[:path].should == "/app/controllers/user_controller.rb"
|
198
206
|
end
|
199
207
|
end
|
200
|
-
end
|
208
|
+
end
|
@@ -1,8 +1,9 @@
|
|
1
|
-
require File.dirname(__FILE__) +
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
2
|
|
3
3
|
describe Reek do
|
4
4
|
describe "analyze method" do
|
5
5
|
before :each do
|
6
|
+
MetricFu::Reek.stub!(:verify_dependencies!).and_return(true)
|
6
7
|
@lines = <<-HERE
|
7
8
|
"app/controllers/activity_reports_controller.rb" -- 4 warnings:
|
8
9
|
ActivityReportsController#authorize_user calls current_user.primary_site_ids multiple times (Duplication)
|
@@ -1,5 +1,5 @@
|
|
1
|
-
require File.dirname(__FILE__) +
|
2
|
-
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../spec_helper")
|
2
|
+
|
3
3
|
describe Saikuro do
|
4
4
|
describe "to_h method" do
|
5
5
|
before :all do
|
@@ -10,44 +10,49 @@ describe Saikuro do
|
|
10
10
|
saikuro.analyze
|
11
11
|
@output = saikuro.to_h
|
12
12
|
end
|
13
|
-
|
13
|
+
|
14
14
|
it "should find the filename of a file" do
|
15
15
|
@output[:saikuro][:files].first[:filename].should == 'users_controller.rb'
|
16
16
|
end
|
17
|
-
|
17
|
+
|
18
18
|
it "should find the name of the classes" do
|
19
19
|
@output[:saikuro][:classes].first[:name].should == "UsersController"
|
20
20
|
@output[:saikuro][:classes][1][:name].should == "SessionsController"
|
21
21
|
end
|
22
|
-
|
22
|
+
|
23
23
|
it "should put the most complex method first" do
|
24
24
|
@output[:saikuro][:methods].first[:name].should == "UsersController#create"
|
25
25
|
@output[:saikuro][:methods].first[:complexity].should == 4
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
it "should find the complexity of a method" do
|
29
29
|
@output[:saikuro][:methods].first[:complexity].should == 4
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
it "should find the lines of a method" do
|
33
33
|
@output[:saikuro][:methods].first[:lines].should == 15
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
37
|
-
describe "
|
36
|
+
|
37
|
+
describe "format_directories method" do
|
38
38
|
it "should format the directories" do
|
39
39
|
MetricFu::Configuration.run {}
|
40
40
|
File.stub!(:directory?).and_return(true)
|
41
41
|
saikuro = MetricFu::Saikuro.new
|
42
|
-
|
42
|
+
|
43
43
|
MetricFu.saikuro[:input_directory] = ["app", "lib"]
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
44
|
+
|
45
|
+
saikuro.format_directories.should == "\"app | lib\""
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe Saikuro::SFile do
|
50
|
+
describe "getting elements from a Saikuro result file" do
|
51
|
+
it "should parse nested START/END sections" do
|
52
|
+
path = File.join(File.dirname(__FILE__), "..", "resources", "saikuro_sfiles", "thing.rb_cyclo.html")
|
53
|
+
sfile = Saikuro::SFile.new path
|
54
|
+
sfile.elements.map { |e| e.complexity }.sort.should eql(["0","0","2"])
|
55
|
+
end
|
51
56
|
end
|
52
57
|
end
|
53
58
|
end
|
data/tasks/metric_fu.rake
CHANGED
@@ -6,8 +6,15 @@ namespace :metrics do
|
|
6
6
|
MetricFu.metrics.each {|metric| MetricFu.report.add(metric) }
|
7
7
|
MetricFu.report.save_output(MetricFu.report.to_yaml,
|
8
8
|
MetricFu.base_directory,
|
9
|
-
|
9
|
+
"report.yml")
|
10
|
+
MetricFu.report.save_output(MetricFu.report.to_yaml,
|
11
|
+
MetricFu.data_directory,
|
12
|
+
"#{Time.now.strftime("%Y%m%d")}.yml")
|
10
13
|
MetricFu.report.save_templatized_report
|
14
|
+
|
15
|
+
MetricFu.graphs.each {|graph| MetricFu.graph.add(graph) }
|
16
|
+
MetricFu.graph.generate
|
17
|
+
|
11
18
|
if MetricFu.report.open_in_browser?
|
12
19
|
MetricFu.report.show_in_browser(MetricFu.output_directory)
|
13
20
|
end
|
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jscruggs-metric_fu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jake Scruggs
|
@@ -9,11 +9,13 @@ authors:
|
|
9
9
|
- Andre Arko
|
10
10
|
- Petrik de Heus
|
11
11
|
- Grant McInnes
|
12
|
+
- Nick Quaranto
|
13
|
+
- "\xC3\x89douard Bri\xC3\xA8re"
|
12
14
|
autorequire:
|
13
15
|
bindir: bin
|
14
16
|
cert_chain: []
|
15
17
|
|
16
|
-
date: 2009-
|
18
|
+
date: 2009-05-16 00:00:00 -07:00
|
17
19
|
default_executable:
|
18
20
|
dependencies:
|
19
21
|
- !ruby/object:Gem::Dependency
|
@@ -37,44 +39,34 @@ dependencies:
|
|
37
39
|
version: 2.1.0
|
38
40
|
version:
|
39
41
|
- !ruby/object:Gem::Dependency
|
40
|
-
name: rcov
|
41
|
-
type: :runtime
|
42
|
-
version_requirement:
|
43
|
-
version_requirements: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 0.8.1
|
48
|
-
version:
|
49
|
-
- !ruby/object:Gem::Dependency
|
50
|
-
name: reek
|
42
|
+
name: relevance-rcov
|
51
43
|
type: :runtime
|
52
44
|
version_requirement:
|
53
45
|
version_requirements: !ruby/object:Gem::Requirement
|
54
46
|
requirements:
|
55
47
|
- - ">="
|
56
48
|
- !ruby/object:Gem::Version
|
57
|
-
version:
|
49
|
+
version: 0.8.3.3
|
58
50
|
version:
|
59
51
|
- !ruby/object:Gem::Dependency
|
60
|
-
name:
|
52
|
+
name: mojombo-chronic
|
61
53
|
type: :runtime
|
62
54
|
version_requirement:
|
63
55
|
version_requirements: !ruby/object:Gem::Requirement
|
64
56
|
requirements:
|
65
57
|
- - ">="
|
66
58
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
59
|
+
version: 0.3.0
|
68
60
|
version:
|
69
61
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
62
|
+
name: topfunky-gruff
|
71
63
|
type: :runtime
|
72
64
|
version_requirement:
|
73
65
|
version_requirements: !ruby/object:Gem::Requirement
|
74
66
|
requirements:
|
75
67
|
- - ">="
|
76
68
|
- !ruby/object:Gem::Version
|
77
|
-
version: 0.
|
69
|
+
version: 0.3.5
|
78
70
|
version:
|
79
71
|
description: Code metrics from Flog, Flay, RCov, Saikuro, Churn, Reek, Roodi and Rails' stats task
|
80
72
|
email: jake.scruggs@gmail.com
|
@@ -95,6 +87,7 @@ files:
|
|
95
87
|
- lib/base/base_template.rb
|
96
88
|
- lib/base/configuration.rb
|
97
89
|
- lib/base/generator.rb
|
90
|
+
- lib/base/graph.rb
|
98
91
|
- lib/base/md5_tracker.rb
|
99
92
|
- lib/base/report.rb
|
100
93
|
- lib/generators/churn.rb
|
@@ -105,7 +98,24 @@ files:
|
|
105
98
|
- lib/generators/roodi.rb
|
106
99
|
- lib/generators/saikuro.rb
|
107
100
|
- lib/generators/stats.rb
|
101
|
+
- lib/graphs/flay_grapher.rb
|
102
|
+
- lib/graphs/flog_grapher.rb
|
103
|
+
- lib/graphs/rcov_grapher.rb
|
104
|
+
- lib/graphs/reek_grapher.rb
|
105
|
+
- lib/graphs/roodi_grapher.rb
|
108
106
|
- lib/metric_fu.rb
|
107
|
+
- lib/templates/awesome/awesome_template.rb
|
108
|
+
- lib/templates/awesome/churn.html.erb
|
109
|
+
- lib/templates/awesome/default.css
|
110
|
+
- lib/templates/awesome/flay.html.erb
|
111
|
+
- lib/templates/awesome/flog.html.erb
|
112
|
+
- lib/templates/awesome/index.html.erb
|
113
|
+
- lib/templates/awesome/layout.html.erb
|
114
|
+
- lib/templates/awesome/rcov.html.erb
|
115
|
+
- lib/templates/awesome/reek.html.erb
|
116
|
+
- lib/templates/awesome/roodi.html.erb
|
117
|
+
- lib/templates/awesome/saikuro.html.erb
|
118
|
+
- lib/templates/awesome/stats.html.erb
|
109
119
|
- lib/templates/standard/churn.html.erb
|
110
120
|
- lib/templates/standard/default.css
|
111
121
|
- lib/templates/standard/flay.html.erb
|
@@ -118,7 +128,7 @@ files:
|
|
118
128
|
- lib/templates/standard/standard_template.rb
|
119
129
|
- lib/templates/standard/stats.html.erb
|
120
130
|
- tasks/metric_fu.rake
|
121
|
-
-
|
131
|
+
- vendor/_fonts/monaco.ttf
|
122
132
|
- vendor/saikuro/saikuro.rb
|
123
133
|
- Manifest.txt
|
124
134
|
has_rdoc: true
|
@@ -147,7 +157,7 @@ rubyforge_project:
|
|
147
157
|
rubygems_version: 1.2.0
|
148
158
|
signing_key:
|
149
159
|
specification_version: 2
|
150
|
-
summary: A fistful of code metrics
|
160
|
+
summary: A fistful of code metrics, with awesome templates and graphs
|
151
161
|
test_files:
|
152
162
|
- spec/base/base_template_spec.rb
|
153
163
|
- spec/base/configuration_spec.rb
|
data/tasks/railroad.rake
DELETED
@@ -1,39 +0,0 @@
|
|
1
|
-
namespace :metrics do
|
2
|
-
|
3
|
-
RAILROAD_DIR = File.join(MetricFu::BASE_DIRECTORY, 'railroad')
|
4
|
-
RAILROAD_FILE = File.join(RAILROAD_DIR, 'index.html')
|
5
|
-
|
6
|
-
task :railroad => ['railroad:all'] do
|
7
|
-
end
|
8
|
-
|
9
|
-
namespace :railroad do
|
10
|
-
|
11
|
-
desc "Create all railroad reports"
|
12
|
-
task :all => [:models, :controllers, :aasm] do
|
13
|
-
#system("open #{RAILROAD_INDEX}") if PLATFORM['darwin']
|
14
|
-
end
|
15
|
-
|
16
|
-
desc "Create a railroad models report"
|
17
|
-
task :models do
|
18
|
-
#mkdir_p(RAILROAD_DIR) unless File.directory?(RAILROAD_DIR)
|
19
|
-
`railroad -M -a -m -l -v | neato -Tpng > #{File.join(MetricFu::BASE_DIRECTORY,'model-diagram.png')}`
|
20
|
-
#`echo "<a href=\"railroad/models.png\">Model diagram</a><br />" >> #{RAILROAD_FILE}`
|
21
|
-
end
|
22
|
-
|
23
|
-
desc "Create a railroad controllers report"
|
24
|
-
task :controllers do
|
25
|
-
#mkdir_p(RAILROAD_DIR) unless File.directory?(RAILROAD_DIR)
|
26
|
-
`railroad -C -l -v | neato -Tpng > #{File.join(MetricFu::BASE_DIRECTORY,'controller-diagram.png')}`
|
27
|
-
#`echo "<a href=\"railroad/controllers.png\">Controller diagram</a><br />" >> #{RAILROAD_FILE}`
|
28
|
-
end
|
29
|
-
|
30
|
-
desc "Create a railroad acts_as_state_machine report"
|
31
|
-
task :aasm do
|
32
|
-
#mkdir_p(RAILROAD_DIR) unless File.directory?(RAILROAD_DIR)
|
33
|
-
`railroad -A -l -v | neato -Tpng > #{File.join(MetricFu::BASE_DIRECTORY,'aasm-diagram.png')}`
|
34
|
-
#`echo "<a href=\"railroad/aasm.png\">State machine diagram</a><br />" >> #{RAILROAD_FILE}`
|
35
|
-
end
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
end
|