metric_fu 4.1.0 → 4.1.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/Gemfile +1 -1
- data/HISTORY.md +12 -1
- data/README.md +3 -0
- data/TODO.md +0 -41
- data/lib/metric_fu.rb +9 -1
- data/lib/metric_fu/configuration.rb +9 -1
- data/lib/metric_fu/initial_requires.rb +11 -11
- data/lib/metric_fu/load_files.rb +1 -0
- data/lib/metric_fu/metrics/cane/cane.rb +5 -4
- data/lib/metric_fu/metrics/cane/cane_bluff_grapher.rb +15 -0
- data/lib/metric_fu/metrics/cane/cane_grapher.rb +1 -0
- data/lib/metric_fu/metrics/cane/init.rb +1 -0
- data/lib/metric_fu/metrics/churn/churn_hotspot.rb +9 -1
- data/lib/metric_fu/metrics/flay/flay.rb +0 -2
- data/lib/metric_fu/metrics/flay/flay_bluff_grapher.rb +15 -0
- data/lib/metric_fu/metrics/flay/flay_gchart_grapher.rb +17 -0
- data/lib/metric_fu/metrics/flay/flay_grapher.rb +1 -0
- data/lib/metric_fu/metrics/flay/flay_hotspot.rb +18 -1
- data/lib/metric_fu/metrics/flay/init.rb +1 -0
- data/lib/metric_fu/metrics/flog/flog.rb +6 -4
- data/lib/metric_fu/metrics/flog/flog_bluff_grapher.rb +16 -0
- data/lib/metric_fu/metrics/flog/flog_gchart_grapher.rb +21 -0
- data/lib/metric_fu/metrics/flog/flog_grapher.rb +1 -0
- data/lib/metric_fu/metrics/flog/flog_hotspot.rb +13 -1
- data/lib/metric_fu/metrics/flog/init.rb +1 -0
- data/lib/metric_fu/metrics/hotspots/analysis/analyzed_problems.rb +73 -0
- data/lib/metric_fu/metrics/hotspots/analysis/analyzer_tables.rb +116 -0
- data/lib/metric_fu/metrics/hotspots/analysis/groupings.rb +21 -0
- data/lib/metric_fu/metrics/hotspots/analysis/problems.rb +21 -0
- data/lib/metric_fu/metrics/hotspots/analysis/rankings.rb +81 -0
- data/lib/metric_fu/metrics/hotspots/hotspot.rb +29 -0
- data/lib/metric_fu/metrics/hotspots/hotspot_analyzer.rb +62 -308
- data/lib/metric_fu/metrics/hotspots/hotspots.rb +1 -27
- data/lib/metric_fu/metrics/rails_best_practices/rails_best_practices_bluff_grapher.rb +15 -0
- data/lib/metric_fu/metrics/rails_best_practices/rails_best_practices_gchart_grapher.rb +21 -0
- data/lib/metric_fu/metrics/rails_best_practices/rails_best_practices_grapher.rb +1 -0
- data/lib/metric_fu/metrics/rcov/rcov_bluff_grapher.rb +15 -0
- data/lib/metric_fu/metrics/rcov/rcov_gchart_grapher.rb +17 -0
- data/lib/metric_fu/metrics/rcov/rcov_grapher.rb +1 -0
- data/lib/metric_fu/metrics/rcov/rcov_hotspot.rb +28 -16
- data/lib/metric_fu/metrics/reek/reek_bluff_grapher.rb +20 -0
- data/lib/metric_fu/metrics/reek/reek_gchart_grapher.rb +25 -0
- data/lib/metric_fu/metrics/reek/reek_grapher.rb +1 -0
- data/lib/metric_fu/metrics/reek/reek_hotspot.rb +16 -1
- data/lib/metric_fu/metrics/roodi/roodi_bluff_grapher.rb +15 -0
- data/lib/metric_fu/metrics/roodi/roodi_gchart_grapher.rb +17 -0
- data/lib/metric_fu/metrics/roodi/roodi_grapher.rb +1 -0
- data/lib/metric_fu/metrics/roodi/roodi_hotspot.rb +16 -1
- data/lib/metric_fu/metrics/saikuro/saikuro_hotspot.rb +13 -1
- data/lib/metric_fu/metrics/stats/stats_bluff_grapher.rb +16 -0
- data/lib/metric_fu/metrics/stats/stats_gchart_grapher.rb +20 -0
- data/lib/metric_fu/metrics/stats/stats_grapher.rb +1 -0
- data/lib/metric_fu/metrics/stats/stats_hotspot.rb +1 -1
- data/lib/metric_fu/reporting/graphs/engines/bluff.rb +0 -114
- data/lib/metric_fu/reporting/graphs/engines/gchart.rb +0 -123
- data/lib/metric_fu/run.rb +1 -0
- data/lib/metric_fu/version.rb +1 -1
- data/metric_fu.gemspec +1 -0
- data/spec/metric_fu/metrics/cane/cane_spec.rb +17 -0
- data/spec/metric_fu/metrics/hotspots/hotspot_spec.rb +11 -0
- data/spec/metric_fu/metrics/hotspots/hotspots_spec.rb +7 -0
- metadata +180 -134
data/Gemfile
CHANGED
data/HISTORY.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
### Master
|
2
2
|
|
3
|
+
### MetricFu 4.1.1 / 2013-04-16
|
4
|
+
|
5
|
+
* Fixes
|
6
|
+
* Fix Syck warning in Ruby > 1.9 (Todd A. Jacobs #58, Benjamin Fleischer)
|
7
|
+
* Cane parser doesn't blow up when no output returned (Guilherme Souza #55)
|
8
|
+
* Fix typo in readme (Paul Elliott #52)
|
9
|
+
* Disable Flog and Cane in non-MRI rubies, as they require ripper (Benjamin Fleischer)
|
10
|
+
* Refactor hotspots and graph code to live in its own metric (Benjamin Fleischer #54, #60)
|
11
|
+
* Use RedCard gem to determine ruby version and ruby engine
|
12
|
+
* Fix Gemfile ssl source warning
|
13
|
+
|
3
14
|
### MetricFu 4.1.0 / 2013-03-06
|
4
15
|
|
5
16
|
* Fix crash in cane when missing readme (Sathish, pull request #51)
|
@@ -9,7 +20,7 @@
|
|
9
20
|
|
10
21
|
* Adding cane metrics (Sathish, pull request #49)
|
11
22
|
* Not yet included in hotspots
|
12
|
-
* *Removed ruby 1.
|
23
|
+
* *Removed ruby 1.8 support*
|
13
24
|
|
14
25
|
### MetricFu 3.0.1 / 2013-03-01
|
15
26
|
|
data/README.md
CHANGED
@@ -21,8 +21,11 @@ See `metric_fu --help` for more options
|
|
21
21
|
* For 1.8.7 support, see version 3.0.0 for partial support, or 2.1.3.7.18.1 (where [Semantic Versioning](http://semver.org/) goes to die)
|
22
22
|
|
23
23
|
* The `japgolly-Saikuro` fork and `metric_fu-roodi` fork are a part of an attempt to get metric_fu working in a modern Ruby environment, specifically compatibility with Ruby 1.9 and Bundler.
|
24
|
+
|
24
25
|
* metric_fu no longer runs rcov itself. You may still use rcov metrics as documented below
|
25
26
|
|
27
|
+
* The Cane and Flog metrics are disabled in non-MRI rubies as they depend on ripper
|
28
|
+
|
26
29
|
## Documentation
|
27
30
|
|
28
31
|
* Cane code quality threshold checking is not included in the hotspots report
|
data/TODO.md
CHANGED
@@ -6,9 +6,6 @@
|
|
6
6
|
|
7
7
|
* Move code that references rcov out of
|
8
8
|
|
9
|
-
lib/metrics/hotspots/hotspot_analyzer.rb
|
10
|
-
lib/reporting/graphs/engines/bluff.rb
|
11
|
-
lib/reporting/graphs/engines/gchart.rb
|
12
9
|
lib/reporting/templates/awesome/css/default.css
|
13
10
|
lib/reporting/templates/awesome/index.html.erb
|
14
11
|
lib/reporting/templates/standard/default.css
|
@@ -18,10 +15,6 @@
|
|
18
15
|
|
19
16
|
lib/configuration.rb
|
20
17
|
lib/metrics/hotspots/analysis/code_issue.rb
|
21
|
-
lib/metrics/hotspots/analysis/scoring_strategies.rb
|
22
|
-
lib/metrics/hotspots/hotspot_analyzer.rb
|
23
|
-
lib/reporting/graphs/engines/bluff.rb
|
24
|
-
lib/reporting/graphs/engines/gchart.rb
|
25
18
|
lib/reporting/templates/awesome/index.html.erb
|
26
19
|
lib/reporting/templates/standard/index.html.erb
|
27
20
|
|
@@ -29,16 +22,12 @@
|
|
29
22
|
|
30
23
|
lib/metrics/generator.rb
|
31
24
|
lib/metrics/hotspots/analysis/code_issue.rb
|
32
|
-
lib/metrics/hotspots/hotspot_analyzer.rb
|
33
|
-
lib/reporting/graphs/engines/bluff.rb
|
34
|
-
lib/reporting/graphs/engines/gchart.rb
|
35
25
|
lib/reporting/templates/awesome/index.html.erb
|
36
26
|
lib/reporting/templates/standard/index.html.erb
|
37
27
|
|
38
28
|
* Move code that references churn out of
|
39
29
|
|
40
30
|
lib/metrics/hotspots/analysis/code_issue.rb
|
41
|
-
lib/metrics/hotspots/hotspot_analyzer.rb
|
42
31
|
lib/metrics/hotspots/init.rb
|
43
32
|
lib/reporting/templates/awesome/index.html.erb
|
44
33
|
lib/reporting/templates/standard/index.html.erb
|
@@ -46,21 +35,13 @@
|
|
46
35
|
* Move code that references rails_best_practices out of
|
47
36
|
|
48
37
|
lib/metrics/hotspots/analysis/code_issue.rb
|
49
|
-
lib/metrics/hotspots/hotspot_analyzer.rb
|
50
|
-
lib/reporting/graphs/engines/bluff.rb
|
51
|
-
lib/reporting/graphs/engines/gchart.rb
|
52
38
|
lib/reporting/templates/awesome/index.html.erb
|
53
39
|
lib/reporting/templates/standard/index.html.erb
|
54
40
|
|
55
41
|
|
56
42
|
* Move code that references reek out of
|
57
43
|
|
58
|
-
lib/data_structures/location.rb
|
59
44
|
lib/metrics/hotspots/analysis/code_issue.rb
|
60
|
-
lib/metrics/hotspots/analysis/scoring_strategies.rb
|
61
|
-
lib/metrics/hotspots/hotspot_analyzer.rb
|
62
|
-
lib/reporting/graphs/engines/bluff.rb
|
63
|
-
lib/reporting/graphs/engines/gchart.rb
|
64
45
|
lib/reporting/templates/awesome/index.html.erb
|
65
46
|
lib/reporting/templates/standard/index.html.erb
|
66
47
|
|
@@ -68,23 +49,17 @@
|
|
68
49
|
* Move code that references roodi out of
|
69
50
|
|
70
51
|
lib/metrics/hotspots/analysis/code_issue.rb
|
71
|
-
lib/metrics/hotspots/hotspot_analyzer.rb
|
72
|
-
lib/reporting/graphs/engines/bluff.rb
|
73
|
-
lib/reporting/graphs/engines/gchart.rb
|
74
52
|
lib/reporting/templates/awesome/index.html.erb
|
75
53
|
lib/reporting/templates/standard/index.html.erb
|
76
54
|
|
77
55
|
* Move code that references saikuro out of
|
78
56
|
|
79
57
|
lib/metrics/hotspots/analysis/code_issue.rb
|
80
|
-
lib/metrics/hotspots/hotspot_analyzer.rb
|
81
58
|
lib/reporting/templates/awesome/index.html.erb
|
82
59
|
lib/reporting/templates/standard/index.html.erb
|
83
60
|
|
84
61
|
* Move code that references stats out of
|
85
62
|
|
86
|
-
lib/reporting/graphs/engines/bluff.rb
|
87
|
-
lib/reporting/graphs/engines/gchart.rb
|
88
63
|
lib/reporting/templates/awesome/index.html.erb
|
89
64
|
lib/reporting/templates/standard/index.html.erb
|
90
65
|
|
@@ -98,16 +73,11 @@ lib/reporting/templates/standard/index.html.erb
|
|
98
73
|
|
99
74
|
## Features
|
100
75
|
|
101
|
-
* Remove rcov by default
|
102
|
-
* Either allow user to define a command to run a coverage task or supply a directory with coverage results. We can't predict every test setup to run coverage correctly, but we can analyze results.
|
103
|
-
* Look into getting everything to run on RubyParser ~> 3
|
104
76
|
* Look into adding
|
105
77
|
* https://github.com/metricfu/code_statistics
|
106
78
|
* brakeman https://github.com/metricfu/brakeman
|
107
|
-
* cane https://github.com/square/cane
|
108
79
|
* laser https://github.com/metricfu/laser
|
109
80
|
* Add configurable logger to all output streams
|
110
|
-
* Allow command-line metric_fu to accept parameters, and especially output its version
|
111
81
|
* Color code flog results with scale from: http://jakescruggs.blogspot.com/2008/08/whats-good-flog-score.html
|
112
82
|
* Make running metric_fu on metric_fu less embarrassing
|
113
83
|
* Load all gems at config time so you fail fast if one is missing
|
@@ -118,21 +88,10 @@ lib/reporting/templates/standard/index.html.erb
|
|
118
88
|
|
119
89
|
* Determine how to test metric_fu against codebases that are not metric_fu, to ensure it works on most applications
|
120
90
|
* This is especially true for rails applications
|
121
|
-
* <strike>Re-organize test files structure to align with changed structure of library files</strike>
|
122
91
|
* Remove / Modify Devver code from the generators/hotspots_spec and base/hotspot_analzyer_spec
|
123
|
-
* <strike>Don't leave around test artifacts such as the folders './foo' and './is set'</strike>
|
124
92
|
|
125
93
|
## Bugs / Fixes
|
126
94
|
|
127
|
-
* Fix occasional gem install metric_fu failures such as with ripper in Ruby 1.9
|
128
|
-
* <strike>Fork roodi and correct the yaml</strike>
|
129
|
-
* See https://github.com/metricfu/metric_fu/issues/2 about updating gems
|
130
|
-
|
131
|
-
## Ruby 1.9 compatibility
|
132
|
-
|
133
|
-
* Consider `RUBYOPT='-rpsych'` e.g. from https://github.com/jscruggs/metric_fu/pull/77
|
134
|
-
* Look into using the sexp_processor for ruby parsing in brakeman https://github.com/presidentbeef/brakeman/blob/cdc85962d589fb37e37ed53333bb0b7bd913e028/lib/ruby_parser/bm_sexp_processor.rb
|
135
|
-
|
136
95
|
## Misc
|
137
96
|
|
138
97
|
* Determine if CodeIssue is used, else remove it
|
data/lib/metric_fu.rb
CHANGED
@@ -43,9 +43,17 @@ module MetricFu
|
|
43
43
|
def self.configure
|
44
44
|
MetricFu.lib_require { 'configuration' }
|
45
45
|
init_files = Dir.glob(File.join(MetricFu.metrics_dir, '**/init.rb')).reject do |file|
|
46
|
-
if file =~ /rcov/
|
46
|
+
if file =~ /rcov/o
|
47
47
|
MetricFu.configuration.mf_debug("rcov is not available. See README")
|
48
48
|
true
|
49
|
+
elsif MetricFu.configuration.mri?
|
50
|
+
false
|
51
|
+
elsif file =~ /cane/o
|
52
|
+
MetricFu.configuration.mf_debug("Cane is only available in MRI. It requires ripper")
|
53
|
+
true
|
54
|
+
elsif file =~ /flog/o
|
55
|
+
MetricFu.configuration.mf_debug("Flog is only available in MRI. It requires ripper")
|
56
|
+
true
|
49
57
|
else
|
50
58
|
false
|
51
59
|
end
|
@@ -118,6 +118,14 @@ module MetricFu
|
|
118
118
|
!!ENV['CC_BUILD_ARTIFACTS']
|
119
119
|
end
|
120
120
|
|
121
|
+
def jruby?
|
122
|
+
@jruby ||= RedCard.check(:jruby)
|
123
|
+
end
|
124
|
+
|
125
|
+
def mri?
|
126
|
+
@mri ||= RedCard.check(:ruby)
|
127
|
+
end
|
128
|
+
|
121
129
|
def platform #:nodoc:
|
122
130
|
# TODO, change
|
123
131
|
# RbConfig::CONFIG['ruby_install_name'].dup
|
@@ -125,7 +133,7 @@ module MetricFu
|
|
125
133
|
end
|
126
134
|
|
127
135
|
def self.ruby_strangely_makes_accessors_private?
|
128
|
-
|
136
|
+
RedCard.check('1.9.2') || jruby?
|
129
137
|
end
|
130
138
|
protected unless ruby_strangely_makes_accessors_private?
|
131
139
|
|
@@ -1,17 +1,17 @@
|
|
1
1
|
require 'rake'
|
2
|
+
|
2
3
|
require 'yaml'
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
#
|
4
|
+
require 'redcard'
|
5
|
+
|
6
|
+
# Psych is not defined in Ruby < 1.9
|
7
|
+
if defined?(Psych)
|
8
|
+
# Syck is not available in Ruby > 1.9 or JRuby 1.9
|
9
|
+
if defined?(Syck) && !RedCard.check(:jruby)
|
10
|
+
YAML::ENGINE.yamler = 'syck'
|
11
|
+
end
|
8
12
|
end
|
9
|
-
|
10
|
-
|
11
|
-
# YAML::ENGINE.yamler = 'syck'
|
12
|
-
# block.call
|
13
|
-
# YAML::ENGINE.yamler = current_engine
|
14
|
-
# end
|
13
|
+
|
14
|
+
|
15
15
|
begin
|
16
16
|
require 'active_support'
|
17
17
|
require 'active_support/core_ext/object/to_json'
|
data/lib/metric_fu/load_files.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
# require these first because others depend on them
|
2
2
|
MetricFu.reporting_require { 'report' }
|
3
|
+
MetricFu.metrics_require { 'hotspots/hotspot' }
|
3
4
|
MetricFu.metrics_require { 'generator' }
|
4
5
|
MetricFu.metrics_require { 'graph' }
|
5
6
|
MetricFu.reporting_require { 'graphs/grapher' }
|
@@ -1,5 +1,3 @@
|
|
1
|
-
require 'cane'
|
2
|
-
|
3
1
|
module MetricFu
|
4
2
|
class Cane < Generator
|
5
3
|
attr_reader :violations, :total_violations
|
@@ -76,8 +74,11 @@ module MetricFu
|
|
76
74
|
end
|
77
75
|
|
78
76
|
def extract_total_violations
|
79
|
-
|
80
|
-
|
77
|
+
if @output =~ /Total Violations: (\d+)/
|
78
|
+
@total_violations = $1.to_i
|
79
|
+
else
|
80
|
+
@total_violations = 0
|
81
|
+
end
|
81
82
|
end
|
82
83
|
end
|
83
84
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
MetricFu.metrics_require { 'cane/cane_grapher' }
|
2
|
+
module MetricFu
|
3
|
+
class CaneBluffGrapher < CaneGrapher
|
4
|
+
def graph!
|
5
|
+
content = <<-EOS
|
6
|
+
#{BLUFF_DEFAULT_OPTIONS}
|
7
|
+
g.title = 'Cane: code quality threshold violations';
|
8
|
+
g.data('cane', [#{@cane_violations.join(',')}]);
|
9
|
+
g.labels = #{@labels.to_json};
|
10
|
+
g.draw();
|
11
|
+
EOS
|
12
|
+
File.open(File.join(MetricFu.output_directory, 'cane.js'), 'w') {|f| f << content }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class ChurnHotspot
|
1
|
+
class ChurnHotspot < MetricFu::Hotspot
|
2
2
|
include MetricFu::HotspotScoringStrategies
|
3
3
|
|
4
4
|
COLUMNS = %w{times_changed}
|
@@ -35,4 +35,12 @@ class ChurnHotspot
|
|
35
35
|
end
|
36
36
|
end
|
37
37
|
|
38
|
+
def present_group(group)
|
39
|
+
"detected high level of churn (changed #{group[0].times_changed} times)"
|
40
|
+
end
|
41
|
+
|
42
|
+
def present_group_details(group)
|
43
|
+
"detected high level of churn (changed #{group[0].times_changed} times)"
|
44
|
+
end
|
45
|
+
|
38
46
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
MetricFu.metrics_require { 'flay/flay_grapher' }
|
2
|
+
module MetricFu
|
3
|
+
class FlayBluffGrapher < FlayGrapher
|
4
|
+
def graph!
|
5
|
+
content = <<-EOS
|
6
|
+
#{BLUFF_DEFAULT_OPTIONS}
|
7
|
+
g.title = 'Flay: duplication';
|
8
|
+
g.data('flay', [#{@flay_score.join(',')}]);
|
9
|
+
g.labels = #{@labels.to_json};
|
10
|
+
g.draw();
|
11
|
+
EOS
|
12
|
+
File.open(File.join(MetricFu.output_directory, 'flay.js'), 'w') {|f| f << content }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
MetricFu.metrics_require { 'flay/flay_grapher' }
|
2
|
+
module MetricFu
|
3
|
+
class FlayGchartGrapher < FlayGrapher
|
4
|
+
def graph!
|
5
|
+
determine_y_axis_scale(@flay_score)
|
6
|
+
url = Gchart.line(
|
7
|
+
:size => GCHART_GRAPH_SIZE,
|
8
|
+
:title => URI.escape("Flay: duplication"),
|
9
|
+
:data => @flay_score,
|
10
|
+
:max_value => @max_value,
|
11
|
+
:axis_with_labels => 'x,y',
|
12
|
+
:axis_labels => [@labels.values, @yaxis],
|
13
|
+
:format => 'file',
|
14
|
+
:filename => File.join(MetricFu.output_directory, 'flay.png'))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class FlayHotspot
|
1
|
+
class FlayHotspot < MetricFu::Hotspot
|
2
2
|
include MetricFu::HotspotScoringStrategies
|
3
3
|
|
4
4
|
COLUMNS = %w{flay_reason flay_matching_reason}
|
@@ -47,4 +47,21 @@ class FlayHotspot
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
+
def present_group(group)
|
51
|
+
occurences = group.size
|
52
|
+
"found #{occurences} code duplications"
|
53
|
+
end
|
54
|
+
|
55
|
+
def present_group_details(group)
|
56
|
+
occurences = group.size
|
57
|
+
message = "found #{occurences} code duplications<br/>"
|
58
|
+
group.each do |item|
|
59
|
+
problem = item.data["flay_reason"]
|
60
|
+
problem = problem.gsub(/^[0-9]*\)/,'')
|
61
|
+
problem = problem.gsub(/files\:/,' <br> files:')
|
62
|
+
message << "* #{problem}<br/>"
|
63
|
+
end
|
64
|
+
message
|
65
|
+
end
|
66
|
+
|
50
67
|
end
|
@@ -1,7 +1,6 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'optparse'
|
3
3
|
require 'rbconfig'
|
4
|
-
require 'flog'
|
5
4
|
class RubyParser
|
6
5
|
alias_method :original_process, :process
|
7
6
|
def process(s,f,t)
|
@@ -33,9 +32,12 @@ module MetricFu
|
|
33
32
|
@flogger = ::Flog.new options
|
34
33
|
@flogger.flog files
|
35
34
|
|
36
|
-
rescue LoadError
|
37
|
-
|
38
|
-
|
35
|
+
rescue LoadError => e
|
36
|
+
message = "#{e.class}\t#{e.message}\n\t#{e.backtrace.join('\n\t')}"
|
37
|
+
if MetricFu.configuration.mri?
|
38
|
+
puts "Flog Error: #{message}"
|
39
|
+
else
|
40
|
+
puts "Flog tasks only available in MRI: #{message}"
|
39
41
|
end
|
40
42
|
end
|
41
43
|
|
@@ -0,0 +1,16 @@
|
|
1
|
+
MetricFu.metrics_require { 'flog/flog_grapher' }
|
2
|
+
module MetricFu
|
3
|
+
class FlogBluffGrapher < FlogGrapher
|
4
|
+
def graph!
|
5
|
+
content = <<-EOS
|
6
|
+
#{BLUFF_DEFAULT_OPTIONS}
|
7
|
+
g.title = 'Flog: code complexity';
|
8
|
+
g.data('average', [#{@flog_average.join(',')}]);
|
9
|
+
g.data('top 5% average', [#{@top_five_percent_average.join(',')}])
|
10
|
+
g.labels = #{@labels.to_json};
|
11
|
+
g.draw();
|
12
|
+
EOS
|
13
|
+
File.open(File.join(MetricFu.output_directory, 'flog.js'), 'w') {|f| f << content }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|