p8-metric_fu 0.9.0.5 → 0.9.0.6

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.
@@ -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