metric_fu 4.6.0 → 4.7.0
Sign up to get free protection for your applications and to get access to all the features.
- data.tar.gz.sig +0 -0
- data/.metrics +6 -0
- data/.travis.yml +6 -5
- data/CONTRIBUTING.md +15 -3
- data/Gemfile +3 -8
- data/Gemfile.devtools +3 -3
- data/HISTORY.md +23 -2
- data/README.md +42 -38
- data/checksum/metric_fu-4.6.0.gem.sha512 +1 -0
- data/gemfiles/Gemfile.travis +7 -0
- data/lib/metric_fu/cli/helper.rb +2 -1
- data/lib/metric_fu/configuration.rb +0 -2
- data/lib/metric_fu/formatter/html.rb +2 -0
- data/lib/metric_fu/formatter/syntax.rb +47 -0
- data/lib/metric_fu/gem_version.rb +44 -11
- data/lib/metric_fu/io.rb +5 -5
- data/lib/metric_fu/loader.rb +12 -5
- data/lib/metric_fu/metric.rb +10 -0
- data/lib/metric_fu/metrics/base_template.rb +2 -2
- data/lib/metric_fu/metrics/cane/cane.rb +1 -0
- data/lib/metric_fu/metrics/churn/churn.rb +16 -42
- data/lib/metric_fu/metrics/churn/init.rb +7 -1
- data/lib/metric_fu/metrics/hotspots/analysis/groupings.rb +1 -0
- data/lib/metric_fu/metrics/hotspots/analysis/problems.rb +1 -0
- data/lib/metric_fu/metrics/hotspots/analysis/ranked_problem_location.rb +2 -0
- data/lib/metric_fu/metrics/hotspots/analysis/rankings.rb +5 -0
- data/lib/metric_fu/metrics/hotspots/hotspot.rb +3 -0
- data/lib/metric_fu/metrics/hotspots/hotspot_analyzer.rb +8 -4
- data/lib/metric_fu/metrics/hotspots/hotspots.rb +11 -0
- data/lib/metric_fu/metrics/reek/reek.rb +1 -1
- data/lib/metric_fu/metrics/reek/reek_hotspot.rb +0 -1
- data/lib/metric_fu/metrics/saikuro/saikuro.rb +1 -0
- data/lib/metric_fu/reporting/graphs/grapher.rb +0 -1
- data/lib/metric_fu/reporting/templates/awesome/awesome_template.rb +8 -59
- data/lib/metric_fu/run.rb +1 -1
- data/lib/metric_fu/{reporting/templates/awesome → templates}/css/bluff.css +0 -0
- data/lib/metric_fu/{reporting/templates/awesome → templates}/css/buttons.css +0 -0
- data/lib/metric_fu/{reporting/templates/awesome → templates}/css/default.css +0 -0
- data/lib/metric_fu/{reporting/templates/awesome → templates}/css/integrity.css +0 -0
- data/lib/metric_fu/{reporting/templates/awesome → templates}/css/rcov.css +0 -0
- data/lib/metric_fu/{reporting/templates/awesome → templates}/css/reset.css +0 -0
- data/lib/metric_fu/{reporting/templates/awesome → templates}/css/syntax.css +0 -0
- data/lib/metric_fu/templates/report.html.erb +32 -0
- data/lib/metric_fu/templates/report.rb +36 -0
- data/lib/metric_fu/utility.rb +4 -0
- data/lib/metric_fu/version.rb +1 -1
- data/metric_fu.gemspec +11 -2
- data/spec/cli/helper_spec.rb +33 -33
- data/spec/metric_fu/configuration_spec.rb +20 -20
- data/spec/metric_fu/data_structures/line_numbers_spec.rb +12 -11
- data/spec/metric_fu/data_structures/location_spec.rb +27 -26
- data/spec/metric_fu/formatter/html_spec.rb +18 -8
- data/spec/metric_fu/formatter/yaml_spec.rb +14 -3
- data/spec/metric_fu/formatter_spec.rb +5 -5
- data/spec/metric_fu/loader_spec.rb +1 -1
- data/spec/metric_fu/metric_spec.rb +2 -2
- data/spec/metric_fu/metrics/base_template_spec.rb +50 -50
- data/spec/metric_fu/metrics/cane/cane_spec.rb +29 -28
- data/spec/metric_fu/metrics/churn/churn_spec.rb +10 -33
- data/spec/metric_fu/metrics/flay/flay_grapher_spec.rb +9 -8
- data/spec/metric_fu/metrics/flay/flay_spec.rb +14 -13
- data/spec/metric_fu/metrics/flog/flog_grapher_spec.rb +16 -15
- data/spec/metric_fu/metrics/flog/flog_spec.rb +10 -9
- data/spec/metric_fu/metrics/generator_spec.rb +19 -19
- data/spec/metric_fu/metrics/graph_spec.rb +11 -9
- data/spec/metric_fu/metrics/hotspots/analysis/analyzed_problems_spec.rb +5 -0
- data/spec/metric_fu/metrics/hotspots/analysis/analyzer_tables_spec.rb +11 -6
- data/spec/metric_fu/metrics/hotspots/analysis/ranking_spec.rb +4 -3
- data/spec/metric_fu/metrics/hotspots/analysis/rankings_spec.rb +16 -10
- data/spec/metric_fu/metrics/hotspots/analysis/table_spec.rb +2 -1
- data/spec/metric_fu/metrics/hotspots/hotspot_analyzer_spec.rb +2 -1
- data/spec/metric_fu/metrics/hotspots/hotspot_spec.rb +8 -2
- data/spec/metric_fu/metrics/hotspots/hotspots_spec.rb +4 -8
- data/spec/metric_fu/metrics/rails_best_practices/rails_best_practices_grapher_spec.rb +10 -9
- data/spec/metric_fu/metrics/rails_best_practices/rails_best_practices_spec.rb +8 -7
- data/spec/metric_fu/metrics/rcov/rcov_grapher_spec.rb +8 -8
- data/spec/metric_fu/metrics/rcov/rcov_hotspot_spec.rb +7 -4
- data/spec/metric_fu/metrics/rcov/rcov_spec.rb +15 -14
- data/spec/metric_fu/metrics/reek/reek_grapher_spec.rb +10 -9
- data/spec/metric_fu/metrics/reek/reek_spec.rb +17 -15
- data/spec/metric_fu/metrics/roodi/roodi_grapher_spec.rb +9 -8
- data/spec/metric_fu/metrics/roodi/roodi_spec.rb +4 -3
- data/spec/metric_fu/metrics/saikuro/saikuro_spec.rb +13 -10
- data/spec/metric_fu/metrics/stats/stats_grapher_spec.rb +13 -12
- data/spec/metric_fu/metrics/stats/stats_spec.rb +16 -14
- data/spec/metric_fu/reporter_spec.rb +8 -7
- data/spec/metric_fu/reporting/graphs/grapher_spec.rb +1 -1
- data/spec/metric_fu/reporting/result_spec.rb +12 -11
- data/spec/metric_fu/run_spec.rb +24 -8
- data/spec/spec_helper.rb +1 -2
- data/spec/support/helper_methods.rb +14 -1
- metadata +124 -57
- metadata.gz.sig +0 -0
- checksums.yaml +0 -7
- checksums.yaml.gz.sig +0 -0
- data/lib/metric_fu/initial_requires.rb +0 -13
- data/lib/metric_fu/load_files.rb +0 -34
data.tar.gz.sig
CHANGED
Binary file
|
data/.metrics
CHANGED
@@ -22,6 +22,12 @@
|
|
22
22
|
# cane.no_doc = 'y'
|
23
23
|
# cane.no_readme = 'y'
|
24
24
|
# end
|
25
|
+
#
|
26
|
+
# config.configure_metric(:churn) do |churn|
|
27
|
+
# churn.enabled = true
|
28
|
+
# churn.ignore_files = 'HISTORY.md, TODO.md'
|
29
|
+
# churn.start_date = '6 months ago'
|
30
|
+
# end
|
25
31
|
#
|
26
32
|
# Or, to configure a group of metrics...
|
27
33
|
# config.configure_metrics.each do |metric|
|
data/.travis.yml
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
language: ruby
|
2
|
-
bundler_args: --without
|
2
|
+
bundler_args: --without local_development yard metrics guard --path vendor/bundle
|
3
3
|
script: bundle exec rspec
|
4
|
+
cache: bundler
|
4
5
|
gemfile:
|
5
6
|
- gemfiles/Gemfile.travis
|
6
7
|
# before_install: some_command
|
@@ -11,7 +12,7 @@ rvm:
|
|
11
12
|
- 1.9.3
|
12
13
|
# - 1.9.2 # code_metric 0.1.0 requires ruby 1.9.3 or greater
|
13
14
|
- jruby-19mode # JRuby in 1.9 mode
|
14
|
-
- rbx
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
- rbx
|
16
|
+
matrix:
|
17
|
+
allow_failures:
|
18
|
+
- rvm: rbx
|
data/CONTRIBUTING.md
CHANGED
@@ -8,11 +8,11 @@ How to contribute:
|
|
8
8
|
|
9
9
|
## Code
|
10
10
|
|
11
|
-
1.
|
11
|
+
1. Fork and clone the repo: `git clone git://github.com/yourghname/metric_fu.git && cd metric_fu`
|
12
12
|
2. Install the gem dependencies: `bundle install`
|
13
13
|
3. Make the changes you want and back them up with tests.
|
14
|
-
* Run the tests (`bundle exec
|
15
|
-
* Run metric_fu on itself (`bundle exec
|
14
|
+
* Run the tests (`bundle exec rspec`)
|
15
|
+
* Run metric_fu on itself (`bundle exec ruby -Ilib bin/metric_fu`)
|
16
16
|
4. Update the HISTORY.md file with your changes and give yourself credit
|
17
17
|
5. Commit and create a pull request with details as to what has been changed and why
|
18
18
|
* Use well-described, small (atomic) commits.
|
@@ -29,6 +29,18 @@ How I handle pull requests:
|
|
29
29
|
* by force pushing to it
|
30
30
|
* I can make any changes myself and manually merge the code in.
|
31
31
|
|
32
|
+
### Commit Messages
|
33
|
+
|
34
|
+
* [A Note About Git Commit Messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)
|
35
|
+
* [http://stopwritingramblingcommitmessages.com/](http://stopwritingramblingcommitmessages.com/)
|
36
|
+
* [ThoughtBot style guide](https://github.com/thoughtbot/guides/tree/master/style#git)
|
37
|
+
|
38
|
+
### About Pull Requests (PR's)
|
39
|
+
|
40
|
+
* [All Your Open Source Code Are Belong To Us](http://www.benjaminfleischer.com/2013/07/30/all-your-open-source-code-are-belong-to-us/)
|
41
|
+
* [Using Pull Requests](https://help.github.com/articles/using-pull-requests)
|
42
|
+
* [Github pull requests made easy](http://www.element84.com/github-pull-requests-made-easy.html)
|
43
|
+
|
32
44
|
## Documentation
|
33
45
|
|
34
46
|
* If relevant, you may update [the metric_fu website](https://github.com/metricfu/metricfu.github.com) in a separate pull request to that repo
|
data/Gemfile
CHANGED
@@ -1,16 +1,11 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
3
|
|
4
|
-
group :test, :
|
5
|
-
# https://github.com/kina/simplecov-rcov-text
|
6
|
-
gem 'simplecov-rcov-text'
|
7
|
-
end
|
8
|
-
|
9
|
-
group :test do
|
10
|
-
gem 'test-construct'
|
11
|
-
gem 'json'
|
4
|
+
group :test, :local_development do
|
12
5
|
gem 'pry'
|
13
6
|
gem 'pry-nav'
|
7
|
+
# https://github.com/kina/simplecov-rcov-text
|
8
|
+
gem 'simplecov-rcov-text', group: :metrics
|
14
9
|
end
|
15
10
|
|
16
11
|
gemspec :path => File.expand_path('..', __FILE__)
|
data/Gemfile.devtools
CHANGED
@@ -2,8 +2,8 @@
|
|
2
2
|
|
3
3
|
group :development do
|
4
4
|
gem 'rake', '~> 10.1.0'
|
5
|
-
gem 'rspec', '~>
|
6
|
-
gem 'yard', '~> 0.8.7'
|
5
|
+
gem 'rspec', '~> 3.0.0.beta1'
|
6
|
+
gem 'yard', '~> 0.8.7', group: :yard
|
7
7
|
end
|
8
8
|
|
9
9
|
group :yard do
|
@@ -13,7 +13,7 @@ end
|
|
13
13
|
group :guard do
|
14
14
|
gem 'guard', '~> 1.8.1'
|
15
15
|
gem 'guard-bundler', '~> 1.0.0'
|
16
|
-
gem 'guard-rspec'
|
16
|
+
gem 'guard-rspec'#, '~> 3.0.2'
|
17
17
|
# gem 'guard-rubocop', '~> 0.2.0'
|
18
18
|
|
19
19
|
# file system change event handling
|
data/HISTORY.md
CHANGED
@@ -4,12 +4,32 @@ Each change should fall into categories that would affect whether the release is
|
|
4
4
|
|
5
5
|
As such, a _Feature_ would map to either major or minor. A _bug fix_ to a patch. And _misc_ is either minor or patch, the difference being kind of fuzzy for the purposes of history. Adding tests would be patch level.
|
6
6
|
|
7
|
-
### Master
|
7
|
+
### Master [changes](https://github.com/metricfu/metric_fu/compare/v4.7.0...master)
|
8
8
|
|
9
|
+
* Breaking Changes
|
9
10
|
* Features
|
10
11
|
* Fixes
|
11
12
|
* Misc
|
12
13
|
|
14
|
+
### [4.7.0 / 2013-12-31](https://github.com/metricfu/metric_fu/compare/v4.6.0...v4.7.0)
|
15
|
+
|
16
|
+
* Features
|
17
|
+
* Move to using churn library and allowing all churn options to be passed through to churn library. (Dan Mayer, #182)
|
18
|
+
* Create template for syntax highlighting in report. (Benjamin Fleischer, #179)
|
19
|
+
* Gem deps now derirved from gemspec via regex (from Gemnasium). Related to #184.
|
20
|
+
`--debug-info` will now show the version of the activated gem, if available. (Benjamin Fleischer, #189)
|
21
|
+
* Fixes
|
22
|
+
* Force gemspec to use utf-8 encoding when importing the AUTHORS file. (Paul Swagerty, #183)
|
23
|
+
* Ensure gemspec doesn't crash when reading in AUTHORS file. (saltracer, #184)
|
24
|
+
* Fix bad parsing of reek output. (Greg Allen, #185)
|
25
|
+
* Misc
|
26
|
+
* Spelling correction. (mdb, #177)
|
27
|
+
* Clean up README indentation. (simi, #187)
|
28
|
+
* Tests run faster. (Benjamin Fleischer, #181)
|
29
|
+
* Simplify load paths. (Benjamin Fleicher, #139)
|
30
|
+
* Update to RSpec 3.0.0.beta1. (Benjamin Fleischer)
|
31
|
+
* Update to new release of TestConstruct. (Benjamin Fleischer)
|
32
|
+
|
13
33
|
### MetricFu [4.6.0 / 2013-11-20](https://github.com/metricfu/metric_fu/compare/v4.5.2...v4.6.0)
|
14
34
|
|
15
35
|
* Features
|
@@ -121,6 +141,8 @@ add all contriubtors
|
|
121
141
|
|
122
142
|
### MetricFu 4.4.0 / 2013-08-15
|
123
143
|
|
144
|
+
* Breaking Changes
|
145
|
+
* Removed configuration methods / MetricFu module methods: add_graph, add_metric, configure_graph, configure_metric, configure_graph_engine, graph_engine, metrics, formatters, graphs, graph_engines, rails?, code_dirs, base_directory, scratch_directory, output_directory, data_directory, file_globs_to_ignore, metric_fu_root_directory, template_directory, template_class, link_prefix, darwin_txmt_protocol_no_thanks, syntax_highlighting
|
124
146
|
* Features
|
125
147
|
* Metrics now configure themselves in a subclass of MetricFu::Metric ( Benjamin Fleischer / Robin Curry #91, #111)
|
126
148
|
* Metrics can be configured individually via Metric.configuration.configure_metric(:some_metric) or Metric.configuration.configure_metrics {|metric| }. See .metrics file for examples ( Benjamin Fleischer / Robin Curry #91, #111)
|
@@ -141,7 +163,6 @@ add all contriubtors
|
|
141
163
|
* Exposed RubyParser patch ( Benjamin Fleischer / Robin Curry #91, #111)
|
142
164
|
* Separated out io / filesystem /templating concerns into their own classes or modules. Thus, we removed all the metaprogrammatically defined methods and instance variables.( Benjamin Fleischer / Robin Curry #91, #111, #112, #115)
|
143
165
|
* Generator subclasses can now be found by metric name. MetricFu::Generator.get_generator(:flog) (Benjamin Fleischer, #126)
|
144
|
-
* Breaking change related to the above: removed configuration methods / MetricFu module methods: add_graph, add_metric, configure_graph, configure_metric, configure_graph_engine, graph_engine, metrics, formatters, graphs, graph_engines, rails?, code_dirs, base_directory, scratch_directory, output_directory, data_directory, file_globs_to_ignore, metric_fu_root_directory, template_directory, template_class, link_prefix, darwin_txmt_protocol_no_thanks, syntax_highlighting
|
145
166
|
|
146
167
|
### MetricFu 4.3.1 / 2013-08-02
|
147
168
|
|
data/README.md
CHANGED
@@ -12,10 +12,14 @@ If you have trouble installing the gem
|
|
12
12
|
- try adding metric_fu to your Gemfile and bundling.
|
13
13
|
- file a ticket on the issues page.
|
14
14
|
|
15
|
-
MetricFu is cryptographically signed.
|
15
|
+
MetricFu is [cryptographically signed](http://guides.rubygems.org/security/).
|
16
|
+
To be sure the gem you install hasn't been tampered with:
|
16
17
|
- Add my public key (if you haven't already) as a trusted certificate `gem cert --add <(curl -Ls https://raw.github.com/metricfu/metric_fu/master/certs/bf4.pem)`
|
17
|
-
- `gem install metric_fu -P
|
18
|
-
|
18
|
+
- `gem install metric_fu -P MediumSecurity`
|
19
|
+
|
20
|
+
The MediumSecurity trust profile will verify signed gems, but allow the installation of unsigned dependencies.
|
21
|
+
|
22
|
+
This is necessary because not all of MetricFu’s dependencies are signed, so we cannot use HighSecurity.
|
19
23
|
|
20
24
|
## Usage
|
21
25
|
|
@@ -55,26 +59,26 @@ These reports are generated in metric_fu's output directory (```tmp/metric_fu/ou
|
|
55
59
|
using a relative path:
|
56
60
|
|
57
61
|
```sh
|
58
|
-
|
62
|
+
metric_fu --out custom_directory # outputs to tmp/metric_fu/custom_directory
|
59
63
|
```
|
60
64
|
|
61
65
|
or a full path:
|
62
66
|
|
63
67
|
```sh
|
64
|
-
|
68
|
+
metric_fu --out /home/metrics # outputs to /home/metrics
|
65
69
|
```
|
66
70
|
|
67
71
|
You can specify a different formatter at the command line by referencing a built-in formatter or providing the fully-qualified name of a custom formatter.
|
68
72
|
|
69
73
|
|
70
74
|
```sh
|
71
|
-
|
75
|
+
metric_fu --format yaml --out custom_report.yml
|
72
76
|
```
|
73
77
|
|
74
78
|
or
|
75
79
|
|
76
80
|
```sh
|
77
|
-
|
81
|
+
metric_fu --format MyCustomFormatter
|
78
82
|
```
|
79
83
|
|
80
84
|
### Custom Formatters
|
@@ -85,16 +89,16 @@ To create a custom formatter, you simply need to create a class
|
|
85
89
|
that takes an options hash and responds to one or more notifications:
|
86
90
|
|
87
91
|
```ruby
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
92
|
+
class MyCustomFormatter
|
93
|
+
def initialize(opts={}); end # metric_fu will pass in an output param if provided.
|
94
|
+
|
95
|
+
# Should include one or more of...
|
96
|
+
def start; end # Sent before metric_fu starts metric measurements.
|
97
|
+
def start_metric(metric); end # Sent before individual metric is measured.
|
98
|
+
def finish_metric(metric); end # Sent after individual metric measurement is complete.
|
99
|
+
def finish; end # Sent after metric_fu has completed all measurements.
|
100
|
+
def display_results; end # Used to open results in browser, etc.
|
101
|
+
end
|
98
102
|
```
|
99
103
|
|
100
104
|
See [lib/metric_fu/formatter/](lib/metric_fu/formatter/) for examples.
|
@@ -116,13 +120,13 @@ require './lib/my_custom_formatter.rb'
|
|
116
120
|
in your .metrics file add the below to run pre-generated metrics
|
117
121
|
|
118
122
|
```ruby
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
123
|
+
MetricFu::Configuration.run do |config|
|
124
|
+
config.configure_metric(:rcov) do |rcov|
|
125
|
+
rcov.enabled = true
|
126
|
+
rcov.external = File.expand_path("coverage/rcov/rcov.txt", Dir.pwd)
|
127
|
+
rcov.activate
|
128
|
+
end
|
129
|
+
end
|
126
130
|
```
|
127
131
|
|
128
132
|
If you want metric_fu to actually run rcov itself (1.8 only), don't specify an external file to read from
|
@@ -132,7 +136,7 @@ If you want metric_fu to actually run rcov itself (1.8 only), don't specify an e
|
|
132
136
|
To generate the same metrics metric_fu has been generating run from the root of your project before running metric_fu
|
133
137
|
|
134
138
|
```sh
|
135
|
-
|
139
|
+
RAILS_ENV=test rcov $(ruby -e "puts Dir['{spec,test}/**/*_{spec,test}.rb'].join(' ')") --sort coverage --no-html --text-coverage --no-color --profile --exclude-only '.*' --include-file "\Aapp,\Alib" -Ispec > coverage/rcov/rcov.txt
|
136
140
|
```
|
137
141
|
|
138
142
|
#### Simplecov metrics with Ruby 1.9 and 2.0
|
@@ -140,24 +144,24 @@ To generate the same metrics metric_fu has been generating run from the root of
|
|
140
144
|
Add to your Gemfile or otherwise install
|
141
145
|
|
142
146
|
```ruby
|
143
|
-
|
144
|
-
|
145
|
-
|
147
|
+
gem 'simplecov'
|
148
|
+
# https://github.com/kina/simplecov-rcov-text
|
149
|
+
gem 'simplecov-rcov-text'
|
146
150
|
```
|
147
151
|
|
148
152
|
Modify your [spec_helper](https://github.com/metricfu/metric_fu/blob/master/spec/spec_helper.rb) as per the SimpleCov docs and run your tests before running metric_fu
|
149
153
|
|
150
154
|
```ruby
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
155
|
+
#in your spec_helper
|
156
|
+
require 'simplecov'
|
157
|
+
require 'simplecov-rcov-text'
|
158
|
+
SimpleCov.formatter = SimpleCov::Formatter::RcovTextFormatter
|
159
|
+
# or
|
160
|
+
SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
|
161
|
+
SimpleCov::Formatter::HTMLFormatter,
|
162
|
+
SimpleCov::Formatter::RcovTextFormatter
|
163
|
+
]
|
164
|
+
SimpleCov.start
|
161
165
|
```
|
162
166
|
|
163
167
|
## Compatibility
|
@@ -0,0 +1 @@
|
|
1
|
+
b9488463cdbac040cc3f4fdff3ec18385b3129876464ae14de2078c1742a1be7951ba40b7f2efba54809cb8e7766fc53ff63c2672ffd25452ddca2f9a9387ac4
|
data/gemfiles/Gemfile.travis
CHANGED
@@ -4,6 +4,13 @@ source 'https://rubygems.org'
|
|
4
4
|
# export BUNDLE_GEMFILE=$PWD/gemfiles/Gemfile.travis
|
5
5
|
# when done, unset BUNDLE_GEMFILE
|
6
6
|
# for 1.9.2 support because of https://github.com/railsbp/rails_best_practices/blob/master/rails_best_practices.gemspec
|
7
|
+
|
8
|
+
platforms :rbx do
|
9
|
+
gem 'racc'
|
10
|
+
gem 'rubysl', '~> 2.0'
|
11
|
+
gem 'psych'
|
12
|
+
end
|
13
|
+
|
7
14
|
gem 'activesupport', '~> 3.2'
|
8
15
|
|
9
16
|
eval_gemfile File.expand_path('../../Gemfile', __FILE__)
|
data/lib/metric_fu/cli/helper.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'metric_fu'
|
2
2
|
require 'metric_fu/cli/parser'
|
3
|
+
MetricFu.lib_require { 'run' }
|
3
4
|
# see https://github.com/grosser/pru/blob/master/bin/pru
|
4
5
|
module MetricFu
|
5
6
|
module Cli
|
@@ -21,7 +22,7 @@ module MetricFu
|
|
21
22
|
MetricFu::VERSION
|
22
23
|
end
|
23
24
|
def shutdown
|
24
|
-
out "\
|
25
|
+
out "\nShutting down. Bye"
|
25
26
|
MetricFu::Cli.immediate_shutdown!
|
26
27
|
end
|
27
28
|
def banner
|
@@ -12,8 +12,6 @@ module MetricFu
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.configure
|
15
|
-
Dir.glob(File.join(MetricFu.metrics_dir, '**/init.rb')).each{|init_file|require(init_file)}
|
16
|
-
Dir.glob(File.join(MetricFu.reporting_dir, '**/init.rb')).each{|init_file|require(init_file)}
|
17
15
|
configuration.tap do |config|
|
18
16
|
config.configure_metrics
|
19
17
|
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'coderay'
|
2
|
+
MetricFu.lib_require { 'utility' }
|
3
|
+
# CodeRay options
|
4
|
+
# used to analyze source code, because object Tokens is a list of tokens with specified types.
|
5
|
+
# :tab_width – tabulation width in spaces. Default: 8
|
6
|
+
# :css – how to include the styles (:class и :style). Default: :class)
|
7
|
+
#
|
8
|
+
# :wrap – wrap result in html tag :page, :div, :span or not to wrap (nil)
|
9
|
+
#
|
10
|
+
# :line_numbers – how render line numbers (:table, :inline, :list or nil)
|
11
|
+
#
|
12
|
+
# :line_number_start – first line number
|
13
|
+
#
|
14
|
+
# :bold_every – make every n-th line number bold. Default: 10
|
15
|
+
module MetricFu
|
16
|
+
module Formatter
|
17
|
+
class Syntax
|
18
|
+
|
19
|
+
def initialize
|
20
|
+
@options = { :css => :class, :style => :alpha }
|
21
|
+
@line_number_options = {:line_numbers => :inline, :line_number_start => 0 }
|
22
|
+
end
|
23
|
+
|
24
|
+
def highlight(ruby_text, line_number)
|
25
|
+
tokens = tokenize(ruby_text)
|
26
|
+
tokens.div(highlight_options(line_number))
|
27
|
+
end
|
28
|
+
|
29
|
+
def highlight_options(line_number)
|
30
|
+
line_number = line_number.to_i
|
31
|
+
if line_number > 0
|
32
|
+
@options.merge(@line_number_options.merge(:line_number_start => line_number))
|
33
|
+
else
|
34
|
+
@options
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def tokenize(ruby_text)
|
41
|
+
ascii_text = MetricFu::Utility.clean_ascii_text(ruby_text)
|
42
|
+
tokens = CodeRay.scan(ascii_text, :ruby)
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -1,13 +1,26 @@
|
|
1
|
+
# coding: utf-8
|
1
2
|
require 'rubygems'
|
2
3
|
module MetricFu
|
3
4
|
class GemVersion
|
5
|
+
# regexp from https://github.com/gemnasium/gemnasium-parser/blob/807d7ccc/lib/gemnasium/parser/patterns.rb#L11
|
6
|
+
# under MIT License
|
7
|
+
GEM_NAME = /[a-zA-Z0-9\-_\.]+/
|
8
|
+
QUOTED_GEM_NAME = /(?:(?<gq>["'])(?<name>#{GEM_NAME})\k<gq>|%q<(?<name>#{GEM_NAME})>)/
|
9
|
+
MATCHER = /(?:=|!=|>|<|>=|<=|~>)/
|
10
|
+
VERSION = /[0-9]+(?:\.[a-zA-Z0-9]+)*/
|
11
|
+
REQUIREMENT = /[ \t]*(?:#{MATCHER}[ \t]*)?#{VERSION}[ \t]*/
|
12
|
+
REQUIREMENT_LIST = /(?<qr1>["'])(?<req1>#{REQUIREMENT})\k<qr1>(?:[ \t]*,[ \t]*(?<qr2>["'])(?<req2>#{REQUIREMENT})\k<qr2>)?/
|
13
|
+
REQUIREMENTS = /(?:#{REQUIREMENT_LIST}|\[[ \t]*#{REQUIREMENT_LIST}[ \t]*\])/
|
14
|
+
COMMENT = /(#[^\n]*)?/
|
15
|
+
ADD_DEPENDENCY_CALL = /^[ \t]*\w+\.add(?<type>_runtime|_development)?_dependency\(?[ \t]*#{QUOTED_GEM_NAME}(?:[ \t]*,[ \t]*#{REQUIREMENTS})?[ \t]*\)?[ \t]*#{COMMENT}$/
|
16
|
+
|
4
17
|
|
5
18
|
def initialize
|
6
|
-
@gem_spec =
|
19
|
+
@gem_spec = File.open(gemspec, 'rb') {|f| f.readlines }
|
7
20
|
end
|
8
21
|
|
9
22
|
def gemspec
|
10
|
-
|
23
|
+
File.join(MetricFu.root_dir, 'metric_fu.gemspec')
|
11
24
|
end
|
12
25
|
|
13
26
|
def new_dependency(name, version)
|
@@ -15,11 +28,15 @@ module MetricFu
|
|
15
28
|
end
|
16
29
|
|
17
30
|
def gem_runtime_dependencies
|
18
|
-
@gem_runtime_dependencies ||=
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
31
|
+
@gem_runtime_dependencies ||=
|
32
|
+
begin
|
33
|
+
@gem_spec.grep(/add_dependency|add_runtime/).map do |line|
|
34
|
+
match = line.match(ADD_DEPENDENCY_CALL)
|
35
|
+
name = match['name'].downcase.sub('metric_fu-', '')
|
36
|
+
version = [match['req1'], match['req2']].compact
|
37
|
+
new_dependency(name, version)
|
38
|
+
end.compact << new_dependency('rcov', ['~> 0.8'])
|
39
|
+
end
|
23
40
|
end
|
24
41
|
|
25
42
|
def for(name)
|
@@ -44,12 +61,28 @@ module MetricFu
|
|
44
61
|
RESOLVER.gem_runtime_dependencies.dup
|
45
62
|
end
|
46
63
|
|
64
|
+
def self.activated_gems
|
65
|
+
Gem::Specification.stubs.select(&:activated?)
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.activated_version(name)
|
69
|
+
activated_gems.find do |gem|
|
70
|
+
return gem.version.version if gem.name == name
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def self.dependency_summary(gem_dep)
|
75
|
+
name = gem_dep.name
|
76
|
+
version = activated_version(gem_dep.name) || gem_dep.requirements_list
|
77
|
+
{
|
78
|
+
'name' => name,
|
79
|
+
'version' => version,
|
80
|
+
}
|
81
|
+
end
|
82
|
+
|
47
83
|
def self.dependencies_summary
|
48
84
|
dependencies.map do |gem_dep|
|
49
|
-
|
50
|
-
'name' => gem_dep.name,
|
51
|
-
'version' => gem_dep.requirements_list,
|
52
|
-
}
|
85
|
+
dependency_summary(gem_dep)
|
53
86
|
end
|
54
87
|
end
|
55
88
|
|