metric_fu 2.1.3.7.19 → 2.1.4.pre
Sign up to get free protection for your applications and to get access to all the features.
- data/.rspec +2 -0
- data/.travis.yml +12 -0
- data/Gemfile +2 -2
- data/HISTORY.md +15 -2
- data/README.md +19 -12
- data/TODO.md +121 -7
- data/bin/metric_fu +134 -2
- data/lib/metric_fu.rb +8 -1
- data/lib/metric_fu/configuration.rb +192 -0
- data/lib/{data_structures → metric_fu/data_structures}/careful_array.rb +0 -0
- data/lib/{data_structures → metric_fu/data_structures}/line_numbers.rb +0 -0
- data/lib/{data_structures → metric_fu/data_structures}/location.rb +0 -0
- data/lib/{errors → metric_fu/errors}/analysis_error.rb +0 -0
- data/lib/{initial_requires.rb → metric_fu/initial_requires.rb} +1 -0
- data/lib/{load_files.rb → metric_fu/load_files.rb} +0 -8
- data/lib/{logging → metric_fu/logging}/mf_debugger.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/base_template.rb +0 -0
- data/lib/metric_fu/metrics/churn/churn.rb +64 -0
- data/lib/{metrics → metric_fu/metrics}/churn/churn_hotspot.rb +0 -0
- data/lib/metric_fu/metrics/churn/init.rb +5 -0
- data/lib/{metrics → metric_fu/metrics}/churn/template_awesome/churn.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/churn/template_standard/churn.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/flay/flay.rb +3 -1
- data/lib/{metrics → metric_fu/metrics}/flay/flay_grapher.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/flay/flay_hotspot.rb +0 -0
- data/lib/metric_fu/metrics/flay/init.rb +9 -0
- data/lib/{metrics → metric_fu/metrics}/flay/template_awesome/flay.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/flay/template_standard/flay.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/flog/flog.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/flog/flog_grapher.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/flog/flog_hotspot.rb +0 -0
- data/lib/metric_fu/metrics/flog/init.rb +7 -0
- data/lib/{metrics → metric_fu/metrics}/flog/template_awesome/flog.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/flog/template_standard/flog.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/generator.rb +3 -4
- data/lib/{metrics → metric_fu/metrics}/graph.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/hotspots/analysis/code_issue.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/hotspots/analysis/grouping.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/hotspots/analysis/ranking.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/hotspots/analysis/record.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/hotspots/analysis/scoring_strategies.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/hotspots/analysis/table.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/hotspots/hotspot_analyzer.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/hotspots/hotspots.rb +0 -0
- data/lib/metric_fu/metrics/hotspots/init.rb +5 -0
- data/lib/{metrics → metric_fu/metrics}/hotspots/template_awesome/hotspots.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/hotspots/template_standard/hotspots.html.erb +0 -0
- data/lib/metric_fu/metrics/rails_best_practices/init.rb +7 -0
- data/lib/{metrics → metric_fu/metrics}/rails_best_practices/rails_best_practices.rb +4 -2
- data/lib/{metrics → metric_fu/metrics}/rails_best_practices/rails_best_practices_grapher.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/rails_best_practices/template_awesome/rails_best_practices.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/rails_best_practices/template_standard/rails_best_practices.html.erb +0 -0
- data/lib/metric_fu/metrics/rcov/init.rb +18 -0
- data/lib/{metrics → metric_fu/metrics}/rcov/rcov.rb +22 -7
- data/lib/{metrics → metric_fu/metrics}/rcov/rcov_grapher.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/rcov/rcov_hotspot.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/rcov/template_awesome/rcov.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/rcov/template_standard/rcov.html.erb +0 -0
- data/lib/metric_fu/metrics/reek/init.rb +7 -0
- data/lib/{metrics → metric_fu/metrics}/reek/reek.rb +3 -1
- data/lib/{metrics → metric_fu/metrics}/reek/reek_grapher.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/reek/reek_hotspot.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/reek/template_awesome/reek.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/reek/template_standard/reek.html.erb +0 -0
- data/lib/metric_fu/metrics/roodi/init.rb +7 -0
- data/lib/{metrics → metric_fu/metrics}/roodi/roodi.rb +3 -1
- data/lib/{metrics → metric_fu/metrics}/roodi/roodi_grapher.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/roodi/roodi_hotspot.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/roodi/template_awesome/roodi.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/roodi/template_standard/roodi.html.erb +0 -0
- data/lib/metric_fu/metrics/saikuro/init.rb +11 -0
- data/lib/{metrics → metric_fu/metrics}/saikuro/saikuro.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/saikuro/saikuro_hotspot.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/saikuro/template_awesome/saikuro.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/saikuro/template_standard/saikuro.html.erb +0 -0
- data/lib/metric_fu/metrics/stats/init.rb +7 -0
- data/lib/{metrics → metric_fu/metrics}/stats/stats.rb +3 -1
- data/lib/{metrics → metric_fu/metrics}/stats/stats_grapher.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/stats/stats_hotspot.rb +0 -0
- data/lib/{metrics → metric_fu/metrics}/stats/template_awesome/stats.html.erb +0 -0
- data/lib/{metrics → metric_fu/metrics}/stats/template_standard/stats.html.erb +0 -0
- data/lib/{reporting → metric_fu/reporting}/graphs/engines/bluff.rb +0 -0
- data/lib/{reporting → metric_fu/reporting}/graphs/engines/gchart.rb +0 -0
- data/lib/metric_fu/reporting/graphs/engines/init.rb +5 -0
- data/lib/{reporting → metric_fu/reporting}/graphs/grapher.rb +0 -0
- data/lib/{reporting → metric_fu/reporting}/report.rb +3 -2
- data/lib/{reporting → metric_fu/reporting}/templates/awesome/awesome_template.rb +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/awesome/css/buttons.css +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/awesome/css/default.css +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/awesome/css/integrity.css +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/awesome/css/reset.css +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/awesome/css/syntax.css +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/awesome/index.html.erb +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/awesome/layout.html.erb +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/javascripts/bluff-min.js +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/javascripts/excanvas.js +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/javascripts/js-class.js +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/standard/default.css +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/standard/index.html.erb +0 -0
- data/lib/{reporting → metric_fu/reporting}/templates/standard/standard_template.rb +0 -0
- data/lib/{run.rb → metric_fu/run.rb} +12 -11
- data/lib/{tasks → metric_fu/tasks}/metric_fu.rake +0 -0
- data/lib/metric_fu/version.rb +3 -0
- data/metric_fu.gemspec +13 -21
- data/spec/metric_fu/configuration_spec.rb +298 -0
- data/spec/{base → metric_fu/data_structures}/line_numbers_spec.rb +11 -11
- data/spec/{base → metric_fu/data_structures}/location_spec.rb +1 -1
- data/spec/{base → metric_fu/metrics}/base_template_spec.rb +1 -1
- data/spec/metric_fu/metrics/churn/churn_spec.rb +85 -0
- data/spec/{graphs → metric_fu/metrics/flay}/flay_grapher_spec.rb +3 -3
- data/spec/{generators → metric_fu/metrics/flay}/flay_spec.rb +1 -1
- data/spec/{graphs → metric_fu/metrics/flog}/flog_grapher_spec.rb +4 -4
- data/spec/{generators → metric_fu/metrics/flog}/flog_spec.rb +1 -1
- data/spec/{base → metric_fu/metrics}/generator_spec.rb +4 -3
- data/spec/{base → metric_fu/metrics}/graph_spec.rb +1 -1
- data/spec/{base → metric_fu/metrics/hotspots/analysis}/ranking_spec.rb +1 -1
- data/spec/{base → metric_fu/metrics/hotspots/analysis}/table_spec.rb +1 -1
- data/spec/{base → metric_fu/metrics/hotspots}/hotspot_analyzer_spec.rb +1 -1
- data/spec/{generators → metric_fu/metrics/hotspots}/hotspots_spec.rb +1 -1
- data/spec/{graphs → metric_fu/metrics/rails_best_practices}/rails_best_practices_grapher_spec.rb +3 -3
- data/spec/{generators → metric_fu/metrics/rails_best_practices}/rails_best_practices_spec.rb +1 -1
- data/spec/{graphs → metric_fu/metrics/rcov}/rcov_grapher_spec.rb +3 -3
- data/spec/{generators → metric_fu/metrics/rcov}/rcov_spec.rb +1 -1
- data/spec/{graphs → metric_fu/metrics/reek}/reek_grapher_spec.rb +3 -3
- data/spec/{generators → metric_fu/metrics/reek}/reek_spec.rb +1 -1
- data/spec/{graphs → metric_fu/metrics/roodi}/roodi_grapher_spec.rb +3 -3
- data/spec/{generators → metric_fu/metrics/roodi}/roodi_spec.rb +1 -1
- data/spec/{generators → metric_fu/metrics/saikuro}/saikuro_spec.rb +4 -4
- data/spec/{graphs → metric_fu/metrics/stats}/stats_grapher_spec.rb +3 -3
- data/spec/{generators → metric_fu/metrics/stats}/stats_spec.rb +7 -4
- data/spec/{graphs → metric_fu/reporting/graphs}/engines/bluff_spec.rb +3 -3
- data/spec/{graphs → metric_fu/reporting/graphs}/engines/gchart_spec.rb +2 -1
- data/spec/{base → metric_fu/reporting}/report_spec.rb +5 -3
- data/spec/spec_helper.rb +17 -5
- data/spec/support/suite.rb +16 -0
- metadata +195 -183
- data/lib/configuration.rb +0 -227
- data/lib/metrics/churn/churn.rb +0 -28
- data/lib/version.rb +0 -3
- data/spec/base/configuration_spec.rb +0 -277
- data/spec/generators/churn_spec.rb +0 -41
- data/spec/spec.opts +0 -6
data/.rspec
ADDED
data/.travis.yml
CHANGED
@@ -3,3 +3,15 @@ rvm:
|
|
3
3
|
- 1.9.3
|
4
4
|
- 1.9.2
|
5
5
|
- 1.8.7
|
6
|
+
- 1.8.6
|
7
|
+
- jruby-18mode # JRuby in 1.8 mode
|
8
|
+
- jruby-19mode # JRuby in 1.9 mode
|
9
|
+
- rbx-18mode
|
10
|
+
- rbx-19mode
|
11
|
+
matrix:
|
12
|
+
allow_failures:
|
13
|
+
- rvm: 1.8.6
|
14
|
+
- rvm: jruby-18mode
|
15
|
+
- rvm: jruby-19mode
|
16
|
+
- rvm: rbx-18mode
|
17
|
+
- rvm: rbx-19mode
|
data/Gemfile
CHANGED
data/HISTORY.md
CHANGED
@@ -1,6 +1,20 @@
|
|
1
|
-
===
|
1
|
+
=== master ===
|
2
|
+
|
3
|
+
* Add commandline behavior to `metric_fu`. Now there are options -v, -r, and -h
|
4
|
+
* Clean up global ivars a bit in Configuration
|
5
|
+
* Re-organized test files - Michael Stark
|
6
|
+
* Rspec2 - Michael Stark
|
7
|
+
* Unify verbose logging
|
8
|
+
* Modularize
|
9
|
+
|
10
|
+
=== MetricFu 2.1.3.7.18.1 / 2013-01-09
|
11
|
+
|
12
|
+
* Same as 2.1.3.7.18.1 but gem packaged using ruby 1.8 dependencies, including ripper
|
13
|
+
|
14
|
+
=== MetricFu 2.1.3.7.19 / 2013-01-08
|
2
15
|
|
3
16
|
* Bug fix, ensure Configuration is loaded before Run, https://github.com/metricfu/metric_fu/issues/36
|
17
|
+
* Gem packaged using ruby 1.9 dependencies. Learned that we cannot dynamically change dependencies for a packaged gem.
|
4
18
|
|
5
19
|
=== MetricFu 2.1.3.6 / 2013-01-02
|
6
20
|
|
@@ -10,7 +24,6 @@
|
|
10
24
|
* Remove executable metric_fu dependency on rake
|
11
25
|
* TODO: some unclear dependency issues may make metrics in 1.9 crash, esp Flog, Flay, Stats
|
12
26
|
|
13
|
-
|
14
27
|
=== MetricFu 2.1.3.5 / 2013-01-01
|
15
28
|
|
16
29
|
* Issue #35, Namespace MetricFu::Table. -Benjamin Fleischer
|
data/README.md
CHANGED
@@ -3,22 +3,27 @@ This is the official repository for metric_fu. The original repository by Jake
|
|
3
3
|
__Installation__
|
4
4
|
|
5
5
|
gem install metric_fu
|
6
|
-
|
7
|
-
See documentation on the rubyforge page for how to customize your metrics.
|
8
6
|
|
9
|
-
|
7
|
+
If you have trouble installing the gem, try adding metric_fu to your Gemfile. You may also want to file a ticket on the issues page.
|
8
|
+
|
9
|
+
See documentation on the rubyforge page for how to customize your metrics. Otherwise, all current information is either in this repo or on the wiki.
|
10
|
+
|
11
|
+
By default, you can run all metrics from the root of an app with the command `metric_fu -r`
|
10
12
|
|
11
13
|
You may also wish to use the `metricfu-metrical` fork, which will probably be merged in at some point.
|
12
14
|
|
13
15
|
__Compatibility__
|
14
16
|
|
15
|
-
It is currently testing on MRI 1.8.7 and 1.9.3
|
17
|
+
It is currently testing on MRI 1.8.7, 1.9.2, and 1.9.3
|
16
18
|
|
17
19
|
* 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.
|
18
20
|
|
19
21
|
* Until we can upgrade to the latest RubyParser, metric_fu will fail on parsing some 1.9 code, e.g. the new hash syntax, and possibly have issues with encodings
|
20
22
|
|
21
|
-
|
23
|
+
|
24
|
+
_Gem Badge_
|
25
|
+
|
26
|
+
[![Gem Version](https://badge.fury.io/rb/metric_fu.png)](http://badge.fury.io/rb/metric_fu)
|
22
27
|
|
23
28
|
|
24
29
|
__CI Build Status__
|
@@ -41,36 +46,38 @@ This project runs [https://gemnasium.com/metricfu](https://gemnasium.com/metricf
|
|
41
46
|
|
42
47
|
===============================================================================
|
43
48
|
|
44
|
-
|
49
|
+
For documentation, in addition to this file and the wiki, there is some useful-but-out-of-date documentation about configuring metric_fu at http://metric-fu.rubyforge.org/ and a change log in the the HISTORY file.
|
45
50
|
|
46
51
|
How to contribute:
|
47
52
|
|
48
53
|
1. Fork metric_fu on github.
|
49
54
|
2. bundle install
|
50
|
-
3. Run the tests ('rake')
|
51
|
-
4. Run metric_fu on itself ('
|
55
|
+
3. Run the tests ('bundle exec rake')
|
56
|
+
4. Run metric_fu on itself ('bundle exec metric_fu -r')
|
52
57
|
5. Make the changes you want and back them up with tests.
|
53
|
-
6. Make sure two important rake tests still run ('rake' and 'rake metrics:all')
|
58
|
+
6. Make sure two important rake tests still run ('bundle exec rake' and 'bundle exec rake metrics:all')
|
54
59
|
7. Commit and send me a pull request with details as to what has been changed.
|
55
60
|
|
56
61
|
Extra Credit:
|
57
62
|
|
58
63
|
1. Make sure your changes work in 1.8.7, Ruby Enterprise Edition, and 1.9.3 (Hint use 'rvm' to help install multiple rubies)
|
59
|
-
2. Update the documentation
|
64
|
+
2. Update the documentation here or the rubyforge web page inside the `'home_page'` folder
|
60
65
|
3. Update the History and give yourself credit.
|
61
66
|
|
62
67
|
|
63
68
|
The more of the above steps you do the easier it will be for me to merge in which will greatly increase you chances of getting your changes accepted.
|
64
69
|
|
70
|
+
Also see [Quick guide to writing good bug reports](https://github.com/metricfu/metric_fu/wiki/Issues:-Quick-guide-to-writing-good-bug-reports)
|
71
|
+
|
65
72
|
Resources:
|
66
73
|
|
67
74
|
* Github: http://github.com/metricfu/metric_fu
|
68
75
|
* Issue Tracker: http://github.com/metricfu/metric_fu/issues
|
69
76
|
* Google Group: http://groups.google.com/group/metric_fu
|
70
|
-
* Homepage: http://metric-fu.rubyforge.org/
|
77
|
+
* Historical Homepage: http://metric-fu.rubyforge.org/
|
71
78
|
|
72
79
|
Original Resources:
|
73
80
|
|
74
81
|
* Github: http://github.com/jscruggs/metric_fu
|
75
82
|
* Issue Tracker: http://github.com/jscruggs/metric_fu/issues
|
76
|
-
*
|
83
|
+
* Jake's Blog: http://jakescruggs.blogspot.com/
|
data/TODO.md
CHANGED
@@ -1,29 +1,131 @@
|
|
1
1
|
# TODO list
|
2
2
|
|
3
|
+
* Keep HISTORY.md in master up to date
|
4
|
+
|
5
|
+
## Before next release
|
6
|
+
|
7
|
+
* Move code that references rcov out of
|
8
|
+
|
9
|
+
lib/metrics/hotspots/hotspot_analyzer.rb
|
10
|
+
lib/reporting/graphs/engines/bluff.rb
|
11
|
+
lib/reporting/graphs/engines/gchart.rb
|
12
|
+
lib/reporting/templates/awesome/css/default.css
|
13
|
+
lib/reporting/templates/awesome/index.html.erb
|
14
|
+
lib/reporting/templates/standard/default.css
|
15
|
+
lib/reporting/templates/standard/index.html.erb
|
16
|
+
|
17
|
+
* Move code that references flog out of
|
18
|
+
|
19
|
+
lib/configuration.rb
|
20
|
+
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
|
+
lib/reporting/templates/awesome/index.html.erb
|
26
|
+
lib/reporting/templates/standard/index.html.erb
|
27
|
+
|
28
|
+
* Move code that references flay out of
|
29
|
+
|
30
|
+
lib/metrics/generator.rb
|
31
|
+
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
|
+
lib/reporting/templates/awesome/index.html.erb
|
36
|
+
lib/reporting/templates/standard/index.html.erb
|
37
|
+
|
38
|
+
* Move code that references churn out of
|
39
|
+
|
40
|
+
lib/metrics/hotspots/analysis/code_issue.rb
|
41
|
+
lib/metrics/hotspots/hotspot_analyzer.rb
|
42
|
+
lib/metrics/hotspots/init.rb
|
43
|
+
lib/reporting/templates/awesome/index.html.erb
|
44
|
+
lib/reporting/templates/standard/index.html.erb
|
45
|
+
|
46
|
+
* Move code that references rails_best_practices out of
|
47
|
+
|
48
|
+
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
|
+
lib/reporting/templates/awesome/index.html.erb
|
53
|
+
lib/reporting/templates/standard/index.html.erb
|
54
|
+
|
55
|
+
|
56
|
+
* Move code that references reek out of
|
57
|
+
|
58
|
+
lib/data_structures/location.rb
|
59
|
+
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
|
+
lib/reporting/templates/awesome/index.html.erb
|
65
|
+
lib/reporting/templates/standard/index.html.erb
|
66
|
+
|
67
|
+
|
68
|
+
* Move code that references roodi out of
|
69
|
+
|
70
|
+
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
|
+
lib/reporting/templates/awesome/index.html.erb
|
75
|
+
lib/reporting/templates/standard/index.html.erb
|
76
|
+
|
77
|
+
* Move code that references saikuro out of
|
78
|
+
|
79
|
+
lib/metrics/hotspots/analysis/code_issue.rb
|
80
|
+
lib/metrics/hotspots/hotspot_analyzer.rb
|
81
|
+
lib/reporting/templates/awesome/index.html.erb
|
82
|
+
lib/reporting/templates/standard/index.html.erb
|
83
|
+
|
84
|
+
* Move code that references stats out of
|
85
|
+
|
86
|
+
lib/reporting/graphs/engines/bluff.rb
|
87
|
+
lib/reporting/graphs/engines/gchart.rb
|
88
|
+
lib/reporting/templates/awesome/index.html.erb
|
89
|
+
lib/reporting/templates/standard/index.html.erb
|
90
|
+
|
91
|
+
* Review how metric_fu uses each tools to generate metrics, e.g. by shelling out commands, rake task, modifying the output, etc.
|
92
|
+
|
93
|
+
* Change MetricFu.report.add(metric) to e.g. MetricFu.generate_report(metric) to make clear that this actually runs the tool
|
94
|
+
|
95
|
+
* Allow the coverage task to specify the command it runs plus any flags (see bundler/capistrano options)
|
96
|
+
|
97
|
+
* Test against a rails app
|
3
98
|
|
4
99
|
## Features
|
5
100
|
|
6
|
-
*
|
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
|
+
* Look into adding
|
7
105
|
* https://github.com/metricfu/code_statistics
|
8
106
|
* brakeman https://github.com/metricfu/brakeman
|
9
107
|
* cane https://github.com/square/cane
|
10
108
|
* laser https://github.com/metricfu/laser
|
11
109
|
* Add configurable logger to all output streams
|
110
|
+
* Allow command-line metric_fu to accept parameters, and especially output its version
|
12
111
|
* Color code flog results with scale from: http://jakescruggs.blogspot.com/2008/08/whats-good-flog-score.html
|
13
112
|
* Make running metric_fu on metric_fu less embarrassing
|
14
113
|
* Load all gems at config time so you fail fast if one is missing
|
114
|
+
* Refactor the hotspots code
|
115
|
+
|
15
116
|
|
16
117
|
## Testing
|
17
118
|
|
18
119
|
* Determine how to test metric_fu against codebases that are not metric_fu, to ensure it works on most applications
|
19
|
-
*
|
120
|
+
* This is especially true for rails applications
|
121
|
+
* <strike>Re-organize test files structure to align with changed structure of library files</strike>
|
20
122
|
* Remove / Modify Devver code from the generators/hotspots_spec and base/hotspot_analzyer_spec
|
21
|
-
* Don't leave around test artifacts such as the folders './foo' and './is set'
|
123
|
+
* <strike>Don't leave around test artifacts such as the folders './foo' and './is set'</strike>
|
22
124
|
|
23
125
|
## Bugs / Fixes
|
24
126
|
|
25
127
|
* Fix occasional gem install metric_fu failures such as with ripper in Ruby 1.9
|
26
|
-
* Fork roodi and correct the yaml
|
128
|
+
* <strike>Fork roodi and correct the yaml</strike>
|
27
129
|
* See https://github.com/metricfu/metric_fu/issues/2 about updating gems
|
28
130
|
|
29
131
|
## Ruby 1.9 compatibility
|
@@ -34,10 +136,22 @@
|
|
34
136
|
## Misc
|
35
137
|
|
36
138
|
* Determine if CodeIssue is used, else remove it
|
37
|
-
*
|
139
|
+
* Remove references to Ruport from the Devver / Caliper code
|
140
|
+
* Update or move the homepage http://metric-fu.rubyforge.org/
|
141
|
+
* Is there any reason not to remove the Manifest.txt?
|
142
|
+
* See other documentation code for examples to improve ours:
|
143
|
+
* https://github.com/charliesome/better_errors/blob/master/CONTRIBUTING.md
|
144
|
+
* https://github.com/charliesome/better_errors/blob/master/README.md
|
38
145
|
* Other intersting libraries to consider:
|
146
|
+
* https://gist.github.com/4562865 for generating Flog on ERB templates by jamesmartin
|
147
|
+
* https://github.com/chad/turbulence churn and complexity (flog)
|
39
148
|
* https://github.com/vinibaggio/discover-unused-partials
|
40
|
-
* https://github.com/metricfu/heckle
|
149
|
+
* https://github.com/metricfu/heckle (test mutation)
|
150
|
+
* https://github.com/mbj/mutant (test mutation)
|
41
151
|
* https://github.com/metricfu/gauntlet
|
42
|
-
* https://github.com/metricfu/repodepot-ruby
|
152
|
+
* https://github.com/metricfu/repodepot-ruby https://twitter.com/jakescruggs/status/70521977303076865
|
43
153
|
* https://github.com/eladmeidar/rails_indexes
|
154
|
+
* https://github.com/trptcolin/consistency_fail
|
155
|
+
* https://github.com/thoughtbot/appraisal
|
156
|
+
* https://github.com/jenkinsci/rubymetrics-plugin
|
157
|
+
* https://github.com/holman/hopper
|
data/bin/metric_fu
CHANGED
@@ -1,2 +1,134 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'metric_fu'
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
# see https://github.com/grosser/pru/blob/master/bin/pru
|
6
|
+
module MetricFu
|
7
|
+
class CLIHelper
|
8
|
+
def initialize
|
9
|
+
@metric_fu = MetricFu::Run.new
|
10
|
+
end
|
11
|
+
def run
|
12
|
+
@metric_fu.run
|
13
|
+
complete
|
14
|
+
end
|
15
|
+
def version
|
16
|
+
MetricFu::VERSION
|
17
|
+
end
|
18
|
+
def shutdown
|
19
|
+
out "\nShuting down. Bye"
|
20
|
+
exit(1)
|
21
|
+
end
|
22
|
+
def banner
|
23
|
+
"MetricFu: A Fistful of code metrics"
|
24
|
+
end
|
25
|
+
def usage
|
26
|
+
<<-EOS
|
27
|
+
#{banner}
|
28
|
+
Use --help for help
|
29
|
+
EOS
|
30
|
+
|
31
|
+
end
|
32
|
+
def executable_name
|
33
|
+
'metric_fu'
|
34
|
+
end
|
35
|
+
private
|
36
|
+
def out(text)
|
37
|
+
STDOUT.puts text
|
38
|
+
end
|
39
|
+
def error(text)
|
40
|
+
STDERR.puts text
|
41
|
+
end
|
42
|
+
def complete
|
43
|
+
out "all done"
|
44
|
+
exit(0)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
cli = MetricFu::CLIHelper.new
|
49
|
+
# see http://obtiva.com/blog/185-fun-with-ruby-it-s-a-trap
|
50
|
+
trap("INT") { cli.shutdown }
|
51
|
+
|
52
|
+
require 'optparse'
|
53
|
+
# see https://github.com/florianpilz/CLI-Option-Parser-Examples
|
54
|
+
# https://raw.github.com/florianpilz/micro-optparse/master/lib/micro-optparse/parser.rb
|
55
|
+
module MicroOptParse
|
56
|
+
class Parser
|
57
|
+
attr_accessor :banner, :version
|
58
|
+
def initialize
|
59
|
+
@options = []
|
60
|
+
@used_short = []
|
61
|
+
@default_values = nil
|
62
|
+
yield self if block_given?
|
63
|
+
end
|
64
|
+
|
65
|
+
def option(name, desc, settings = {})
|
66
|
+
@options << [name, desc, settings]
|
67
|
+
end
|
68
|
+
|
69
|
+
def short_from(name)
|
70
|
+
name.to_s.chars.each do |c|
|
71
|
+
next if @used_short.include?(c) || c == "_"
|
72
|
+
return c # returns from short_from method
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def validate(options) # remove this method if you want fewer lines of code and don't need validations
|
77
|
+
options.each_pair do |key, value|
|
78
|
+
opt = @options.find_all{ |o| o[0] == key }.first
|
79
|
+
key = "--" << key.to_s.gsub("_", "-")
|
80
|
+
unless opt[2][:value_in_set].nil? || opt[2][:value_in_set].include?(value)
|
81
|
+
puts "Parameter for #{key} must be in [" << opt[2][:value_in_set].join(", ") << "]" ; exit(1)
|
82
|
+
end
|
83
|
+
unless opt[2][:value_matches].nil? || opt[2][:value_matches] =~ value
|
84
|
+
puts "Parameter for #{key} must match /" << opt[2][:value_matches].source << "/" ; exit(1)
|
85
|
+
end
|
86
|
+
unless opt[2][:value_satisfies].nil? || opt[2][:value_satisfies].call(value)
|
87
|
+
puts "Parameter for #{key} must satisfy given conditions (see description)" ; exit(1)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
def process!(arguments = ARGV)
|
93
|
+
@result = (@default_values || {}).clone # reset or new
|
94
|
+
@optionparser ||= OptionParser.new do |p| # prepare only once
|
95
|
+
@options.each do |o|
|
96
|
+
@used_short << short = o[2][:short] || short_from(o[0])
|
97
|
+
@result[o[0]] = o[2][:default] || false # set default
|
98
|
+
klass = o[2][:default].class == Fixnum ? Integer : o[2][:default].class
|
99
|
+
|
100
|
+
if [TrueClass, FalseClass, NilClass].include?(klass) # boolean switch
|
101
|
+
p.on("-" << short, "--[no-]" << o[0].to_s.gsub("_", "-"), o[1]) {|x| @result[o[0]] = x}
|
102
|
+
else # argument with parameter
|
103
|
+
p.on("-" << short, "--" << o[0].to_s.gsub("_", "-") << " " << o[2][:default].to_s, klass, o[1]) {|x| @result[o[0]] = x}
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
p.banner = @banner unless @banner.nil?
|
108
|
+
p.on_tail("-h", "--help", "Show this message") {puts p ; exit}
|
109
|
+
short = @used_short.include?("v") ? "-V" : "-v"
|
110
|
+
p.on_tail(short, "--version", "Print version") {puts @version ; exit} unless @version.nil?
|
111
|
+
@default_values = @result.clone # save default values to reset @result in subsequent calls
|
112
|
+
end
|
113
|
+
|
114
|
+
begin
|
115
|
+
@optionparser.parse!(arguments)
|
116
|
+
rescue OptionParser::ParseError => e
|
117
|
+
puts e.message ; exit(1)
|
118
|
+
end
|
119
|
+
|
120
|
+
validate(@result) if self.respond_to?("validate")
|
121
|
+
@result
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
options = MicroOptParse::Parser.new do |p|
|
126
|
+
p.banner = cli.banner
|
127
|
+
p.version = cli.version
|
128
|
+
p.option :run, "Run all metrics with defaults"
|
129
|
+
end.process!
|
130
|
+
if options[:run]
|
131
|
+
cli.run
|
132
|
+
else
|
133
|
+
STDOUT.puts cli.usage
|
134
|
+
end
|
data/lib/metric_fu.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module MetricFu
|
2
2
|
APP_ROOT = File.expand_path(File.join(File.dirname(__FILE__),'..'))
|
3
|
-
LIB_ROOT = File.join(APP_ROOT,'lib')
|
3
|
+
LIB_ROOT = File.join(APP_ROOT,'lib/metric_fu')
|
4
4
|
@loaded_files = []
|
5
5
|
class << self
|
6
6
|
attr_reader :loaded_files
|
@@ -40,6 +40,13 @@ module MetricFu
|
|
40
40
|
def self.artifact_dir
|
41
41
|
(ENV['CC_BUILD_ARTIFACTS'] || 'tmp/metric_fu')
|
42
42
|
end
|
43
|
+
def self.configure
|
44
|
+
MetricFu.lib_require { 'configuration' }
|
45
|
+
Dir.glob(File.join(MetricFu.metrics_dir, '**/init.rb')).each do |file|
|
46
|
+
load file
|
47
|
+
end
|
48
|
+
MetricFu.configuration
|
49
|
+
end
|
43
50
|
class << self
|
44
51
|
%w(scratch output _data).each do |dir|
|
45
52
|
define_method("#{dir.gsub(/[^A-Za-z0-9]/,'')}_dir") do
|