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.
@@ -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
@@ -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, :metrics, :reek, :roodi, :saikuro,
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,6 @@
1
+ namespace :metrics do
2
+ desc "A mutation testing report using Heckle"
3
+ task :heckle do
4
+ MetricFu.generate_heckle_report
5
+ end
6
+ 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>
@@ -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.5
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