p8-metric_fu 0.9.0.5 → 0.9.0.6
Sign up to get free protection for your applications and to get access to all the features.
- data/Manifest.txt +2 -0
- data/lib/metric_fu/base.rb +4 -2
- data/lib/metric_fu/heckle.rb +37 -0
- data/lib/tasks/heckle.rake +6 -0
- data/lib/templates/heckle.html.erb +30 -0
- data/spec/config_spec.rb +3 -3
- metadata +4 -1
data/Manifest.txt
CHANGED
@@ -10,12 +10,14 @@ lib/metric_fu/base.rb
|
|
10
10
|
lib/metric_fu/churn.rb
|
11
11
|
lib/metric_fu/flay.rb
|
12
12
|
lib/metric_fu/flog.rb
|
13
|
+
lib/metric_fu/heckle.rb
|
13
14
|
lib/metric_fu/reek.rb
|
14
15
|
lib/metric_fu/roodi.rb
|
15
16
|
lib/metric_fu/md5_tracker.rb
|
16
17
|
lib/tasks/churn.rake
|
17
18
|
lib/tasks/coverage.rake
|
18
19
|
lib/tasks/flog.rake
|
20
|
+
lib/tasks/heckle.rake
|
19
21
|
lib/tasks/metric_fu.rake
|
20
22
|
lib/tasks/metric_fu.rb
|
21
23
|
lib/tasks/saikuro.rake
|
data/lib/metric_fu/base.rb
CHANGED
@@ -43,7 +43,7 @@ module MetricFu
|
|
43
43
|
end
|
44
44
|
|
45
45
|
def default_metrics
|
46
|
-
metrics = [:coverage, :flog, :flay, :reek, :roodi, :saikuro ]
|
46
|
+
metrics = [:coverage, :flog, :flay, :heckle, :reek, :roodi, :saikuro ]
|
47
47
|
metrics << :stats if is_rails?
|
48
48
|
# Churning requires a subversion or git repo
|
49
49
|
metrics << :churn if can_churn?
|
@@ -62,7 +62,8 @@ module MetricFu
|
|
62
62
|
end
|
63
63
|
|
64
64
|
class Configuration
|
65
|
-
attr_accessor :churn, :coverage, :flay, :flog, :
|
65
|
+
attr_accessor :churn, :coverage, :flay, :flog, :heckle,
|
66
|
+
:metrics, :reek, :roodi, :saikuro,
|
66
67
|
:general, :template_dir, :base_directory
|
67
68
|
def initialize
|
68
69
|
raise "Use config.churn instead of MetricFu::CHURN_OPTIONS" if defined? ::MetricFu::CHURN_OPTIONS
|
@@ -84,6 +85,7 @@ module MetricFu
|
|
84
85
|
:rcov_opts => rcov_opts }
|
85
86
|
@flay = { :dirs_to_flay => MetricFu.code_dirs}
|
86
87
|
@flog = { :dirs_to_flog => MetricFu.code_dirs}
|
88
|
+
@heckle = { :dirs_to_heckle => MetricFu.code_dirs}
|
87
89
|
@reek = { :dirs_to_reek => MetricFu.code_dirs}
|
88
90
|
@roodi = { :dirs_to_roodi => MetricFu.code_dirs}
|
89
91
|
@metrics = MetricFu.default_metrics
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module MetricFu
|
2
|
+
|
3
|
+
def self.generate_heckle_report
|
4
|
+
Heckle.generate_report
|
5
|
+
system("open #{Heckle.metric_dir}/index.html") if open_in_browser?
|
6
|
+
end
|
7
|
+
|
8
|
+
class Heckle < Base::Generator
|
9
|
+
|
10
|
+
def analyze
|
11
|
+
files_to_heckle = MetricFu.heckle[:dirs_to_heckle].map{|dir| Dir[File.join(dir, "**/*.rb")] }
|
12
|
+
class_names = files_to_heckle.flatten.collect do |f|
|
13
|
+
buffer = open(f).readlines.join("\n")
|
14
|
+
outline = buffer.scan(/class\s+([\w|:]*)+?/)
|
15
|
+
klass = path_to_classname(f).split('::').last
|
16
|
+
end
|
17
|
+
class_names.flatten!
|
18
|
+
output = ''
|
19
|
+
ObjectSpace.each_object(Class) do |klass|
|
20
|
+
class_names.each do |name|
|
21
|
+
if klass.name =~ /::#{name}$/
|
22
|
+
res = `heckle #{name} -t spec/**/#{name}_spec.rb`
|
23
|
+
output << res
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
@matches = output.chomp.split("\n\n").map{|m| m.split("\n") }
|
28
|
+
end
|
29
|
+
|
30
|
+
def path_to_classname(s)
|
31
|
+
f = s.sub(/^lib/, '').sub(/\.rb$/, '').split('/')
|
32
|
+
f = f.map { |path| path.split(/_/).map { |seg| seg.capitalize }.join }
|
33
|
+
f.join('::')
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<html>
|
2
|
+
<head>
|
3
|
+
<title>Heckle Results</title>
|
4
|
+
<style>
|
5
|
+
<%= inline_css("default.css") %>
|
6
|
+
</style>
|
7
|
+
</head>
|
8
|
+
|
9
|
+
<body>
|
10
|
+
<h1>Heckle Results</h1>
|
11
|
+
<p><a href="http://ruby.sadi.st/Heckle.html">Heckle</a> is a mutation tester.</p>
|
12
|
+
<table>
|
13
|
+
<tr>
|
14
|
+
<th>File Path</th>
|
15
|
+
<th>Code Smell</th>
|
16
|
+
</tr>
|
17
|
+
<% @matches.each_with_index do |match, count| %>
|
18
|
+
<tr class='<%= cycle("light", "dark", count) %>'>
|
19
|
+
<td><%= match.first %></td>
|
20
|
+
<td>
|
21
|
+
<% match[1..-1].each do |line| %>
|
22
|
+
<%= line %><br>
|
23
|
+
<% end %>
|
24
|
+
</td>
|
25
|
+
</tr>
|
26
|
+
<% end %>
|
27
|
+
</table>
|
28
|
+
<p>Generated on <%= Time.now.localtime %></p>
|
29
|
+
</body>
|
30
|
+
</html>
|
data/spec/config_spec.rb
CHANGED
@@ -19,7 +19,7 @@ describe MetricFu::Configuration do
|
|
19
19
|
|
20
20
|
describe "metrics" do
|
21
21
|
it "should be configurable" do
|
22
|
-
MetricFu.metrics.should == [:churn, :coverage, :flay, :flog, :reek, :roodi, :saikuro]
|
22
|
+
MetricFu.metrics.should == [:churn, :coverage, :flay, :flog, :heckle, :reek, :roodi, :saikuro]
|
23
23
|
MetricFu::Configuration.run do |config|
|
24
24
|
config.metrics = [:coverage, :flog]
|
25
25
|
end
|
@@ -31,13 +31,13 @@ describe MetricFu::Configuration do
|
|
31
31
|
it "should have :stats for rails projects" do
|
32
32
|
MetricFu.should_receive(:is_rails?).and_return(true)
|
33
33
|
MetricFu.should_receive(:can_churn?).and_return(false)
|
34
|
-
MetricFu.default_metrics.should == [:coverage, :flay, :flog, :reek, :roodi, :saikuro, :stats]
|
34
|
+
MetricFu.default_metrics.should == [:coverage, :flay, :flog, :heckle, :reek, :roodi, :saikuro, :stats]
|
35
35
|
end
|
36
36
|
|
37
37
|
it "should have exclude :churn for projects whcih can churn" do
|
38
38
|
MetricFu.should_receive(:is_rails?).and_return(false)
|
39
39
|
MetricFu.should_receive(:can_churn?).and_return(true)
|
40
|
-
MetricFu.default_metrics.should == [:churn, :coverage, :flay, :flog, :reek, :roodi, :saikuro]
|
40
|
+
MetricFu.default_metrics.should == [:churn, :coverage, :flay, :flog, :heckle, :reek, :roodi, :saikuro]
|
41
41
|
end
|
42
42
|
end
|
43
43
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: p8-metric_fu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.0.
|
4
|
+
version: 0.9.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jake Scruggs
|
@@ -95,6 +95,7 @@ files:
|
|
95
95
|
- lib/metric_fu/churn.rb
|
96
96
|
- lib/metric_fu/flay.rb
|
97
97
|
- lib/metric_fu/flog.rb
|
98
|
+
- lib/metric_fu/heckle.rb
|
98
99
|
- lib/metric_fu/reek.rb
|
99
100
|
- lib/metric_fu/roodi.rb
|
100
101
|
- lib/metric_fu/md5_tracker.rb
|
@@ -104,6 +105,7 @@ files:
|
|
104
105
|
- lib/tasks/coverage.rake
|
105
106
|
- lib/tasks/flay.rake
|
106
107
|
- lib/tasks/flog.rake
|
108
|
+
- lib/tasks/heckle.rake
|
107
109
|
- lib/tasks/metric_fu.rake
|
108
110
|
- lib/tasks/railroad.rake
|
109
111
|
- lib/tasks/reek.rake
|
@@ -115,6 +117,7 @@ files:
|
|
115
117
|
- lib/templates/flay.html.erb
|
116
118
|
- lib/templates/flog.html.erb
|
117
119
|
- lib/templates/flog_page.html.erb
|
120
|
+
- lib/templates/heckle.html.erb
|
118
121
|
- lib/templates/reek.html.erb
|
119
122
|
- lib/templates/roodi.html.erb
|
120
123
|
- vendor/saikuro/saikuro.rb
|