metric_fu 2.1.4.pre4 → 2.1.4.pre5
Sign up to get free protection for your applications and to get access to all the features.
- data/.metrics +8 -0
- data/CONTRIBUTING.md +19 -0
- data/README.md +20 -47
- data/bin/metric_fu +3 -128
- data/bin/mf-stats +1 -1
- data/lib/metric_fu/cli/client.rb +26 -0
- data/lib/metric_fu/cli/helper.rb +62 -0
- data/lib/metric_fu/cli/parser.rb +78 -0
- data/lib/metric_fu/configuration.rb +9 -1
- data/lib/metric_fu/metrics/flog/flog.rb +2 -1
- data/lib/metric_fu/metrics/rcov/init.rb +12 -10
- data/lib/metric_fu/run.rb +23 -4
- data/lib/metric_fu/version.rb +1 -1
- data/spec/cli/helper_spec.rb +146 -0
- data/spec/metric_fu/configuration_spec.rb +59 -43
- data/spec/metric_fu/metrics/flay/flay_spec.rb +8 -2
- data/spec/metric_fu/metrics/reek/reek_spec.rb +2 -1
- data/spec/metric_fu/metrics/roodi/roodi_spec.rb +5 -3
- data/spec/run_spec.rb +53 -0
- data/spec/support/matcher_create_file.rb +30 -0
- metadata +14 -3
data/.metrics
ADDED
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
How to contribute:
|
2
|
+
|
3
|
+
1. Fork metric_fu on github.
|
4
|
+
2. bundle install
|
5
|
+
3. Run the tests ('bundle exec rake')
|
6
|
+
4. Run metric_fu on itself ('bundle exec metric_fu -r')
|
7
|
+
5. Make the changes you want and back them up with tests.
|
8
|
+
6. Make sure two important rake tests still run ('bundle exec rake' and 'bundle exec rake metrics:all')
|
9
|
+
7. Commit and send me a pull request with details as to what has been changed.
|
10
|
+
|
11
|
+
Extra Credit:
|
12
|
+
|
13
|
+
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)
|
14
|
+
2. Update the documentation here or the rubyforge web page inside the `'home_page'` folder
|
15
|
+
3. Update the History and give yourself credit.
|
16
|
+
|
17
|
+
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.
|
18
|
+
|
19
|
+
Also see [Quick guide to writing good bug reports](https://github.com/metricfu/metric_fu/wiki/Issues:-Quick-guide-to-writing-good-bug-reports)
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
|
1
|
+
# MetricFu [![Gem Version](https://badge.fury.io/rb/metric_fu.png)](http://badge.fury.io/rb/metric_fu) [![Build Status](https://travis-ci.org/metricfu/metric_fu.png?branch=master)](http://travis-ci.org/metricfu/metric_fu) [![Code Climate](https://codeclimate.com/github/metricfu/metric_fu.png)](https://codeclimate.com/github/metricfu/metric_fu) [![Dependency Status](https://gemnasium.com/metricfu/metric_fu.png)](https://gemnasium.com/metricfu/metric_fu)
|
2
2
|
|
3
|
-
|
3
|
+
## Installation
|
4
4
|
|
5
5
|
gem install metric_fu
|
6
6
|
|
@@ -8,75 +8,48 @@ If you have trouble installing the gem, try adding metric_fu to your Gemfile. Yo
|
|
8
8
|
|
9
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
10
|
|
11
|
+
## Usage
|
12
|
+
|
11
13
|
By default, you can run all metrics from the root of an app with the command `metric_fu -r`
|
12
14
|
|
13
|
-
|
15
|
+
See `metric_fu --help` for more options
|
14
16
|
|
15
|
-
|
17
|
+
## Compatibility
|
16
18
|
|
17
19
|
It is currently testing on MRI 1.8.7, 1.9.2, and 1.9.3
|
18
20
|
|
19
21
|
* 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.
|
22
|
+
* rcov may fail in ruby 1.9
|
23
|
+
* rails_best_practices is disabled in ruby 1.8
|
20
24
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
_Gem Badge_
|
25
|
-
|
26
|
-
[![Gem Version](https://badge.fury.io/rb/metric_fu.png)](http://badge.fury.io/rb/metric_fu)
|
27
|
-
|
28
|
-
|
29
|
-
__CI Build Status__
|
30
|
-
|
31
|
-
[![Build Status](https://secure.travis-ci.org/metricfu/metric_fu.png)](http://travis-ci.org/metricfu/metric_fu)
|
25
|
+
## Documentation
|
32
26
|
|
33
|
-
|
27
|
+
TBD
|
34
28
|
|
35
|
-
|
29
|
+
### Configuration
|
36
30
|
|
37
|
-
|
31
|
+
see the .metrics file
|
38
32
|
|
39
|
-
|
33
|
+
### Historical
|
40
34
|
|
41
|
-
|
35
|
+
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.
|
42
36
|
|
43
|
-
|
37
|
+
## Contributions
|
44
38
|
|
45
|
-
|
39
|
+
See the TODO for some ideas
|
46
40
|
|
47
|
-
|
41
|
+
See CONTRIBUTING for how to contribute
|
48
42
|
|
49
|
-
|
43
|
+
## Resources:
|
50
44
|
|
51
|
-
|
52
|
-
|
53
|
-
1. Fork metric_fu on github.
|
54
|
-
2. bundle install
|
55
|
-
3. Run the tests ('bundle exec rake')
|
56
|
-
4. Run metric_fu on itself ('bundle exec metric_fu -r')
|
57
|
-
5. Make the changes you want and back them up with tests.
|
58
|
-
6. Make sure two important rake tests still run ('bundle exec rake' and 'bundle exec rake metrics:all')
|
59
|
-
7. Commit and send me a pull request with details as to what has been changed.
|
60
|
-
|
61
|
-
Extra Credit:
|
62
|
-
|
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)
|
64
|
-
2. Update the documentation here or the rubyforge web page inside the `'home_page'` folder
|
65
|
-
3. Update the History and give yourself credit.
|
66
|
-
|
67
|
-
|
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.
|
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
|
-
|
72
|
-
Resources:
|
45
|
+
This is the official repository for metric_fu. The original repository by Jake Scruggs at [https://github.com/jscruggs/metric_fu](https://github.com/jscruggs/metric_fu) [has been deprecated.](http://jakescruggs.blogspot.com/2012/08/why-i-abandoned-metricfu.html).
|
73
46
|
|
74
47
|
* Github: http://github.com/metricfu/metric_fu
|
75
48
|
* Issue Tracker: http://github.com/metricfu/metric_fu/issues
|
76
49
|
* Google Group: http://groups.google.com/group/metric_fu
|
77
50
|
* Historical Homepage: http://metric-fu.rubyforge.org/
|
78
51
|
|
79
|
-
Original Resources:
|
52
|
+
### Original Resources:
|
80
53
|
|
81
54
|
* Github: http://github.com/jscruggs/metric_fu
|
82
55
|
* Issue Tracker: http://github.com/jscruggs/metric_fu/issues
|
data/bin/metric_fu
CHANGED
@@ -1,134 +1,9 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'metric_fu'
|
3
|
-
require '
|
3
|
+
require 'metric_fu/cli/client'
|
4
4
|
|
5
|
-
|
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
|
5
|
+
cli = MetricFu::Cli::Client.new
|
49
6
|
# see http://obtiva.com/blog/185-fun-with-ruby-it-s-a-trap
|
50
7
|
trap("INT") { cli.shutdown }
|
51
8
|
|
52
|
-
|
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
|
9
|
+
cli.run
|
data/bin/mf-stats
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby_noexec_wrapper
|
2
2
|
require 'rubygems'
|
3
3
|
begin
|
4
|
-
puts File.exists?('Gemfile') && `bundle && bundle exec rake stats`
|
4
|
+
puts File.exists?('Gemfile') && `bundle check && bundle exec rake stats || rake stats`
|
5
5
|
rescue StandardError, LoadError => e
|
6
6
|
puts `rake stats`
|
7
7
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'metric_fu'
|
2
|
+
require 'metric_fu/cli/helper'
|
3
|
+
require 'metric_fu/cli/parser'
|
4
|
+
module MetricFu
|
5
|
+
module Cli
|
6
|
+
class Client
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
@helper = MetricFu::Cli::Helper.new
|
10
|
+
end
|
11
|
+
def shutdown
|
12
|
+
@helper.shutdown
|
13
|
+
end
|
14
|
+
def run
|
15
|
+
options = @helper.process_options
|
16
|
+
mf_debug "Got options #{options.inspect}"
|
17
|
+
if options[:run]
|
18
|
+
@helper.run(options)
|
19
|
+
else
|
20
|
+
STDOUT.puts @helper.usage
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
require 'metric_fu'
|
2
|
+
require 'metric_fu/cli/parser'
|
3
|
+
# see https://github.com/grosser/pru/blob/master/bin/pru
|
4
|
+
module MetricFu
|
5
|
+
module Cli
|
6
|
+
class Helper
|
7
|
+
def run(options={})
|
8
|
+
@metric_fu = MetricFu::Run.new(options)
|
9
|
+
@metric_fu.run
|
10
|
+
complete
|
11
|
+
end
|
12
|
+
def version
|
13
|
+
MetricFu::VERSION
|
14
|
+
end
|
15
|
+
def shutdown
|
16
|
+
out "\nShuting down. Bye"
|
17
|
+
exit(1)
|
18
|
+
end
|
19
|
+
def banner
|
20
|
+
"MetricFu: A Fistful of code metrics"
|
21
|
+
end
|
22
|
+
def usage
|
23
|
+
<<-EOS
|
24
|
+
#{banner}
|
25
|
+
Use --help for help
|
26
|
+
EOS
|
27
|
+
end
|
28
|
+
def executable_name
|
29
|
+
'metric_fu'
|
30
|
+
end
|
31
|
+
|
32
|
+
def metrics
|
33
|
+
MetricFu.configuration.metrics.sort_by(&:to_s)
|
34
|
+
end
|
35
|
+
|
36
|
+
def process_options(argv=ARGV.dup)
|
37
|
+
options = MetricFu::Cli::MicroOptParse::Parser.new do |p|
|
38
|
+
p.banner = self.banner
|
39
|
+
p.version = self.version
|
40
|
+
p.option :run, "Run all metrics with defaults", :default => false
|
41
|
+
metrics.each do |metric|
|
42
|
+
p.option metric.to_sym, "Enables or disables #{metric.to_s.titleize}", :default => true #, :value_in_set => [true, false]
|
43
|
+
end
|
44
|
+
p.option :open, "Open report in browser", :default => true
|
45
|
+
end.process!(argv)
|
46
|
+
options
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
def out(text)
|
51
|
+
STDOUT.puts text
|
52
|
+
end
|
53
|
+
def error(text)
|
54
|
+
STDERR.puts text
|
55
|
+
end
|
56
|
+
def complete
|
57
|
+
out "all done"
|
58
|
+
exit(0)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'optparse'
|
2
|
+
module MetricFu
|
3
|
+
module Cli
|
4
|
+
# see https://github.com/florianpilz/CLI-Option-Parser-Examples
|
5
|
+
# https://raw.github.com/florianpilz/micro-optparse/master/lib/micro-optparse/parser.rb
|
6
|
+
module MicroOptParse
|
7
|
+
class Parser
|
8
|
+
attr_accessor :banner, :version
|
9
|
+
def initialize
|
10
|
+
@options = []
|
11
|
+
@used_short = []
|
12
|
+
@default_values = nil
|
13
|
+
yield self if block_given?
|
14
|
+
end
|
15
|
+
|
16
|
+
def option(name, desc, settings = {})
|
17
|
+
@options << [name, desc, settings]
|
18
|
+
end
|
19
|
+
|
20
|
+
def short_from(name)
|
21
|
+
name.to_s.chars.each do |c|
|
22
|
+
next if @used_short.include?(c) || c == "_"
|
23
|
+
return c # returns from short_from method
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def validate(options) # remove this method if you want fewer lines of code and don't need validations
|
28
|
+
options.each_pair do |key, value|
|
29
|
+
opt = @options.find_all{ |o| o[0] == key }.first
|
30
|
+
key = "--" << key.to_s.gsub("_", "-")
|
31
|
+
unless opt[2][:value_in_set].nil? || opt[2][:value_in_set].include?(value)
|
32
|
+
puts "Parameter for #{key} must be in [" << opt[2][:value_in_set].join(", ") << "]" ; exit(1)
|
33
|
+
end
|
34
|
+
unless opt[2][:value_matches].nil? || opt[2][:value_matches] =~ value
|
35
|
+
puts "Parameter for #{key} must match /" << opt[2][:value_matches].source << "/" ; exit(1)
|
36
|
+
end
|
37
|
+
unless opt[2][:value_satisfies].nil? || opt[2][:value_satisfies].call(value)
|
38
|
+
puts "Parameter for #{key} must satisfy given conditions (see description)" ; exit(1)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def process!(arguments = ARGV)
|
44
|
+
@result = (@default_values || {}).clone # reset or new
|
45
|
+
@optionparser ||= OptionParser.new do |p| # prepare only once
|
46
|
+
@options.each do |o|
|
47
|
+
@used_short << short = o[2][:short] || short_from(o[0])
|
48
|
+
@result[o[0]] = o[2][:default] || false # set default
|
49
|
+
klass = o[2][:default].class == Fixnum ? Integer : o[2][:default].class
|
50
|
+
|
51
|
+
if [TrueClass, FalseClass, NilClass].include?(klass) # boolean switch
|
52
|
+
p.on("-" << short, "--[no-]" << o[0].to_s.gsub("_", "-"), o[1]) {|x| @result[o[0]] = x}
|
53
|
+
else # argument with parameter
|
54
|
+
p.on("-" << short, "--" << o[0].to_s.gsub("_", "-") << " " << o[2][:default].to_s, klass, o[1]) {|x| @result[o[0]] = x}
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
p.banner = @banner unless @banner.nil?
|
59
|
+
p.on_tail("-h", "--help", "Show this message") {puts p ; exit}
|
60
|
+
short = @used_short.include?("v") ? "-V" : "-v"
|
61
|
+
p.on_tail(short, "--version", "Print version") {puts @version ; exit} unless @version.nil?
|
62
|
+
@default_values = @result.clone # save default values to reset @result in subsequent calls
|
63
|
+
end
|
64
|
+
|
65
|
+
begin
|
66
|
+
@optionparser.parse!(arguments)
|
67
|
+
rescue OptionParser::ParseError => e
|
68
|
+
puts e.message ; exit(1)
|
69
|
+
end
|
70
|
+
|
71
|
+
validate(@result) if self.respond_to?("validate")
|
72
|
+
@result
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
require 'fileutils'
|
2
|
+
require 'rbconfig'
|
2
3
|
MetricFu.reporting_require { 'templates/awesome/awesome_template' }
|
4
|
+
MetricFu.logging_require { 'mf_debugger' }
|
3
5
|
module MetricFu
|
4
6
|
|
5
7
|
|
@@ -49,6 +51,10 @@ module MetricFu
|
|
49
51
|
MfDebugger::Logger.debug_on = toggle
|
50
52
|
end
|
51
53
|
|
54
|
+
def mf_debug(msg)
|
55
|
+
MfDebugger.mf_debug msg
|
56
|
+
end
|
57
|
+
|
52
58
|
# TODO review if these code is functionally duplicated in the
|
53
59
|
# base generator initialize
|
54
60
|
def reset
|
@@ -113,11 +119,13 @@ module MetricFu
|
|
113
119
|
end
|
114
120
|
|
115
121
|
def platform #:nodoc:
|
122
|
+
# TODO, change
|
123
|
+
# RbConfig::CONFIG['ruby_install_name'].dup
|
116
124
|
return RUBY_PLATFORM
|
117
125
|
end
|
118
126
|
|
119
127
|
def self.ruby_strangely_makes_accessors_private?
|
120
|
-
!!(RUBY_VERSION =~ /1.9.2/)
|
128
|
+
!!(RUBY_VERSION =~ /1.9.2/) || defined?(JRUBY_VERSION)
|
121
129
|
end
|
122
130
|
protected unless ruby_strangely_makes_accessors_private?
|
123
131
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
require 'optparse'
|
3
|
+
require 'rbconfig'
|
3
4
|
require 'flog'
|
4
5
|
class RubyParser
|
5
6
|
alias_method :original_process, :process
|
@@ -33,7 +34,7 @@ module MetricFu
|
|
33
34
|
@flogger.flog files
|
34
35
|
|
35
36
|
rescue LoadError
|
36
|
-
if
|
37
|
+
if defined?(JRUBY_VERSION)
|
37
38
|
puts 'running in jruby - flog tasks not available'
|
38
39
|
end
|
39
40
|
end
|
@@ -1,18 +1,20 @@
|
|
1
1
|
MetricFu::Configuration.run do |config|
|
2
2
|
config.add_metric(:rcov)
|
3
3
|
config.add_graph(:rcov)
|
4
|
+
rcov_opts = [
|
5
|
+
"--sort coverage",
|
6
|
+
"--no-html",
|
7
|
+
"--text-coverage",
|
8
|
+
"--no-color",
|
9
|
+
"--profile",
|
10
|
+
"--exclude-only '.*'",
|
11
|
+
'--include-file "\Aapp,\Alib"'
|
12
|
+
]
|
13
|
+
rcov_opts << "-Ispec" if File.exist?("spec")
|
4
14
|
config.configure_metric(:rcov,
|
5
15
|
{ :environment => 'test',
|
6
|
-
:test_files =>
|
7
|
-
|
8
|
-
'spec/**/*_spec.rb'],
|
9
|
-
:rcov_opts => ["--sort coverage",
|
10
|
-
"--no-html",
|
11
|
-
"--text-coverage",
|
12
|
-
"--no-color",
|
13
|
-
"--profile",
|
14
|
-
"--rails",
|
15
|
-
"--exclude /gems/,/Library/,/usr/,spec"],
|
16
|
+
:test_files => Dir['{spec,test}/**/*_{spec,test}.rb'],
|
17
|
+
:rcov_opts => rcov_opts,
|
16
18
|
:external => nil
|
17
19
|
})
|
18
20
|
end
|
data/lib/metric_fu/run.rb
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
MetricFu.configure
|
2
2
|
module MetricFu
|
3
3
|
class Run
|
4
|
-
def initialize
|
4
|
+
def initialize(options={})
|
5
5
|
STDOUT.sync = true
|
6
|
+
load_user_configuration
|
7
|
+
disable_metrics(options)
|
6
8
|
end
|
7
9
|
def run
|
8
10
|
run_reports
|
@@ -13,8 +15,9 @@ module MetricFu
|
|
13
15
|
|
14
16
|
# ensure :hotspots runs last
|
15
17
|
def report_metrics(metrics=MetricFu.metrics)
|
16
|
-
|
17
|
-
MetricFu.metrics
|
18
|
+
MetricFu.configuration.metrics -= [ :hotspots ]
|
19
|
+
MetricFu.configuration.metrics += [ :hotspots ]
|
20
|
+
MetricFu.configuration.metrics
|
18
21
|
end
|
19
22
|
def run_reports
|
20
23
|
report_metrics.each {|metric|
|
@@ -50,6 +53,22 @@ module MetricFu
|
|
50
53
|
MetricFu.report.show_in_browser(MetricFu.output_directory)
|
51
54
|
end
|
52
55
|
end
|
56
|
+
private
|
57
|
+
def load_user_configuration
|
58
|
+
file = File.join(Dir.pwd, '.metrics')
|
59
|
+
load file if File.exist?(file)
|
60
|
+
end
|
61
|
+
def disable_metrics(options)
|
62
|
+
report_metrics.each do |metric|
|
63
|
+
if options[metric.to_sym]
|
64
|
+
mf_debug "using metric #{metric}"
|
65
|
+
else
|
66
|
+
mf_debug "disabling metric #{metric}"
|
67
|
+
MetricFu.configuration.metrics -= [ metric ]
|
68
|
+
MetricFu.configuration.graphs -= [ metric ]
|
69
|
+
mf_debug "active metrics are #{MetricFu.configuration.metrics.inspect}"
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
53
73
|
end
|
54
74
|
end
|
55
|
-
|
data/lib/metric_fu/version.rb
CHANGED
@@ -0,0 +1,146 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'metric_fu/cli/helper'
|
3
|
+
|
4
|
+
describe MetricFu::Cli::Helper do
|
5
|
+
|
6
|
+
describe "defaults" do
|
7
|
+
|
8
|
+
let(:helper) { MetricFu::Cli::Helper.new }
|
9
|
+
let(:defaults) { helper.process_options }
|
10
|
+
|
11
|
+
context "on every Ruby version" do
|
12
|
+
|
13
|
+
it "opens the report in a browser" do
|
14
|
+
defaults[:open].should be_true
|
15
|
+
end
|
16
|
+
|
17
|
+
it "enables Flog" do
|
18
|
+
defaults[:flog].should be_true
|
19
|
+
end
|
20
|
+
|
21
|
+
it "enables Flay" do
|
22
|
+
defaults[:flay].should be_true
|
23
|
+
end
|
24
|
+
|
25
|
+
it "enables Reek" do
|
26
|
+
defaults[:reek].should be_true
|
27
|
+
end
|
28
|
+
|
29
|
+
it "enables Hotspots" do
|
30
|
+
defaults[:hotspots].should be_true
|
31
|
+
end
|
32
|
+
|
33
|
+
it "enables Churn" do
|
34
|
+
defaults[:churn].should be_true
|
35
|
+
end
|
36
|
+
|
37
|
+
it "enables Saikuro" do
|
38
|
+
defaults[:saikuro].should be_true
|
39
|
+
end
|
40
|
+
|
41
|
+
it "enables RCov" do
|
42
|
+
defaults[:rcov].should be_true
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
|
47
|
+
context "on Ruby 1.8.7" do
|
48
|
+
|
49
|
+
before { helper.stub(:ruby).and_return("1.8.7") }
|
50
|
+
|
51
|
+
it "disables rails_best_practices" do
|
52
|
+
defaults[:rails_best_practices].should be_false
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
context "on Ruby 1.9" do
|
58
|
+
|
59
|
+
before { helper.stub(:ruby).and_return("1.9.3") }
|
60
|
+
|
61
|
+
xit "enables Rails Best Practices" do
|
62
|
+
defaults[:rails_best_practices].should be_true
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
69
|
+
describe ".parse" do
|
70
|
+
let(:helper) { MetricFu::Cli::Helper.new }
|
71
|
+
|
72
|
+
it "turns open in browser off" do
|
73
|
+
helper.process_options(["--no-open"])[:open].should be_false
|
74
|
+
end
|
75
|
+
|
76
|
+
it "turns open in browser on" do
|
77
|
+
helper.process_options(["--open"])[:open].should be_true
|
78
|
+
end
|
79
|
+
|
80
|
+
it "turns saikuro off" do
|
81
|
+
helper.process_options(["--no-saikuro"])[:saikuro].should be_false
|
82
|
+
end
|
83
|
+
|
84
|
+
it "turns saikuro on" do
|
85
|
+
helper.process_options(["--saikuro"])[:saikuro].should be_true
|
86
|
+
end
|
87
|
+
|
88
|
+
it "turns churn off" do
|
89
|
+
helper.process_options(["--no-churn"])[:churn].should be_false
|
90
|
+
end
|
91
|
+
|
92
|
+
it "turns churn on" do
|
93
|
+
helper.process_options(["--churn"])[:churn].should be_true
|
94
|
+
end
|
95
|
+
|
96
|
+
it "turns flay off" do
|
97
|
+
helper.process_options(["--no-flay"])[:flay].should be_false
|
98
|
+
end
|
99
|
+
|
100
|
+
it "turns flay on" do
|
101
|
+
helper.process_options(["--flay"])[:flay].should be_true
|
102
|
+
end
|
103
|
+
|
104
|
+
it "turns flog off" do
|
105
|
+
helper.process_options(["--no-flog"])[:flog].should be_false
|
106
|
+
end
|
107
|
+
|
108
|
+
it "turns flog on" do
|
109
|
+
helper.process_options(["--flog"])[:flog].should be_true
|
110
|
+
end
|
111
|
+
|
112
|
+
it "turns hotspots off" do
|
113
|
+
helper.process_options(["--no-hotspots"])[:hotspots].should be_false
|
114
|
+
end
|
115
|
+
|
116
|
+
it "turns hotspots on" do
|
117
|
+
helper.process_options(["--hotspots"])[:hotspots].should be_true
|
118
|
+
end
|
119
|
+
|
120
|
+
it "turns rcov off" do
|
121
|
+
helper.process_options(["--no-rcov"])[:rcov].should be_false
|
122
|
+
end
|
123
|
+
|
124
|
+
it "turns rcov on" do
|
125
|
+
helper.process_options(["--rcov"])[:rcov].should be_true
|
126
|
+
end
|
127
|
+
|
128
|
+
it "turns reek off" do
|
129
|
+
helper.process_options(["--no-reek"])[:reek].should be_false
|
130
|
+
end
|
131
|
+
|
132
|
+
it "turns reek on" do
|
133
|
+
helper.process_options(["--reek"])[:reek].should be_true
|
134
|
+
end
|
135
|
+
|
136
|
+
it "turns roodi off" do
|
137
|
+
helper.process_options(["--no-roodi"])[:roodi].should be_false
|
138
|
+
end
|
139
|
+
|
140
|
+
it "turns roodi on" do
|
141
|
+
helper.process_options(["--roodi"])[:roodi].should be_true
|
142
|
+
end
|
143
|
+
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
@@ -12,27 +12,27 @@ describe MetricFu::Configuration do
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def base_directory
|
15
|
-
@config.
|
15
|
+
@config.send(:base_directory)
|
16
16
|
end
|
17
17
|
|
18
18
|
def output_directory
|
19
|
-
@config.
|
19
|
+
@config.send(:output_directory)
|
20
20
|
end
|
21
21
|
|
22
22
|
def scratch_directory
|
23
|
-
@config.
|
23
|
+
@config.send(:scratch_directory)
|
24
24
|
end
|
25
25
|
|
26
26
|
def template_directory
|
27
|
-
@config.
|
27
|
+
@config.send(:template_directory)
|
28
28
|
end
|
29
29
|
|
30
30
|
def template_class
|
31
|
-
@config.
|
31
|
+
@config.send(:template_class)
|
32
32
|
end
|
33
33
|
|
34
34
|
def metric_fu_root
|
35
|
-
@config.
|
35
|
+
@config.send(:metric_fu_root_directory)
|
36
36
|
end
|
37
37
|
def load_metric(metric)
|
38
38
|
load File.join(MetricFu.metrics_dir, metric, 'init.rb')
|
@@ -96,58 +96,62 @@ describe MetricFu::Configuration do
|
|
96
96
|
|
97
97
|
it 'should set @flay to {:dirs_to_flay => @code_dirs}' do
|
98
98
|
load_metric 'flay'
|
99
|
-
@config.
|
99
|
+
@config.send(:flay).
|
100
100
|
should == {:dirs_to_flay => ['lib'], :filetypes=>["rb"], :minimum_score => 100}
|
101
101
|
end
|
102
102
|
|
103
103
|
it 'should set @flog to {:dirs_to_flog => @code_dirs}' do
|
104
104
|
load_metric 'flog'
|
105
|
-
@config.
|
105
|
+
@config.send(:flog).
|
106
106
|
should == {:dirs_to_flog => ['lib']}
|
107
107
|
end
|
108
108
|
|
109
109
|
it 'should set @reek to {:dirs_to_reek => @code_dirs}' do
|
110
110
|
load_metric 'reek'
|
111
|
-
@config.
|
111
|
+
@config.send(:reek).
|
112
112
|
should == {:config_file_pattern=>nil, :dirs_to_reek => ['lib']}
|
113
113
|
end
|
114
114
|
|
115
115
|
it 'should set @roodi to {:dirs_to_roodi => @code_dirs}' do
|
116
116
|
load_metric 'roodi'
|
117
|
-
@config.
|
117
|
+
@config.send(:roodi).
|
118
118
|
should == { :dirs_to_roodi => MetricFu.code_dirs,
|
119
119
|
:roodi_config => "#{MetricFu.root_dir}/config/roodi_config.yml"}
|
120
120
|
end
|
121
121
|
|
122
122
|
it 'should set @churn to {}' do
|
123
123
|
load_metric 'churn'
|
124
|
-
@config.
|
124
|
+
@config.send(:churn).
|
125
125
|
should == { :start_date => %q("1 year ago"), :minimum_churn_count => 10}
|
126
126
|
end
|
127
127
|
|
128
128
|
|
129
|
-
it 'should set @rcov to
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
129
|
+
it 'should set @rcov to ' +
|
130
|
+
%q(:test_files => Dir['{spec,test}/**/*_{spec,test}.rb'],
|
131
|
+
:rcov_opts => [
|
132
|
+
"--sort coverage",
|
133
|
+
"--no-html",
|
134
|
+
"--text-coverage",
|
135
|
+
"--no-color",
|
136
|
+
"--profile",
|
137
|
+
"--exclude-only '.*'",
|
138
|
+
'--include-file "\Aapp,\Alib"',
|
139
|
+
"-Ispec"
|
140
|
+
]) do
|
138
141
|
load_metric 'rcov'
|
139
|
-
@config.
|
142
|
+
@config.send(:rcov).
|
140
143
|
should == { :environment => 'test',
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
144
|
+
:test_files => Dir['{spec,test}/**/*_{spec,test}.rb'],
|
145
|
+
:rcov_opts => [
|
146
|
+
"--sort coverage",
|
147
|
+
"--no-html",
|
148
|
+
"--text-coverage",
|
149
|
+
"--no-color",
|
150
|
+
"--profile",
|
151
|
+
"--exclude-only '.*'",
|
152
|
+
'--include-file "\Aapp,\Alib"',
|
153
|
+
"-Ispec"
|
154
|
+
],
|
151
155
|
:external => nil}
|
152
156
|
end
|
153
157
|
|
@@ -159,7 +163,7 @@ describe MetricFu::Configuration do
|
|
159
163
|
:error_cyclo => "7",
|
160
164
|
:formater => "text" }' do
|
161
165
|
load_metric 'saikuro'
|
162
|
-
@config.
|
166
|
+
@config.send(:saikuro).
|
163
167
|
should == { :output_directory => "#{scratch_directory}/saikuro",
|
164
168
|
:input_directory => ['lib'],
|
165
169
|
:cyclo => "",
|
@@ -189,27 +193,35 @@ describe MetricFu::Configuration do
|
|
189
193
|
end
|
190
194
|
|
191
195
|
describe '#set_graphs ' do
|
192
|
-
|
193
|
-
|
196
|
+
if RUBY_VERSION < '1.9'
|
197
|
+
it 'should not set the graphs to include rails_best_practices for ruby 1.8' do
|
198
|
+
@config.graphs.should_not include(:rails_best_practices)
|
199
|
+
end
|
200
|
+
else
|
201
|
+
it 'should set the graphs to include rails_best_practices' do
|
202
|
+
@config.graphs.should include(:rails_best_practices)
|
203
|
+
end
|
194
204
|
end
|
195
205
|
end
|
196
206
|
|
197
207
|
describe '#set_code_dirs ' do
|
198
208
|
it 'should set the @code_dirs instance var to ["app", "lib"]' do
|
199
|
-
@config.
|
209
|
+
@config.send(:code_dirs).
|
200
210
|
should == ['app','lib']
|
201
211
|
end
|
202
212
|
end
|
203
213
|
it 'should set @stats to {}' do
|
204
214
|
load_metric 'stats'
|
205
|
-
@config.
|
215
|
+
@config.send(:stats).
|
206
216
|
should == {}
|
207
217
|
end
|
208
218
|
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
219
|
+
unless RUBY_VERSION < '1.9'
|
220
|
+
it 'should set @rails_best_practices to {}' do
|
221
|
+
load_metric 'rails_best_practices'
|
222
|
+
@config.send(:rails_best_practices).
|
223
|
+
should == {}
|
224
|
+
end
|
213
225
|
end
|
214
226
|
end
|
215
227
|
|
@@ -227,7 +239,7 @@ describe MetricFu::Configuration do
|
|
227
239
|
end
|
228
240
|
|
229
241
|
it 'should set the @code_dirs instance var to ["lib"]' do
|
230
|
-
@config.
|
242
|
+
@config.send(:code_dirs).should == ['lib']
|
231
243
|
end
|
232
244
|
end
|
233
245
|
end
|
@@ -238,11 +250,15 @@ describe MetricFu::Configuration do
|
|
238
250
|
|
239
251
|
[:churn, :flog, :flay, :reek, :roodi, :rcov, :hotspots, :saikuro].each do |metric|
|
240
252
|
it "should have a reader for #{metric}" do
|
241
|
-
|
253
|
+
expect {
|
254
|
+
@config.send(metric.to_sym)
|
255
|
+
}.to_not raise_error
|
242
256
|
end
|
243
257
|
|
244
258
|
it "should have a writer for #{metric}=" do
|
245
|
-
|
259
|
+
expect {
|
260
|
+
@config.send((metric.to_s + '=').to_sym, '')
|
261
|
+
}.to_not raise_error
|
246
262
|
end
|
247
263
|
end
|
248
264
|
end
|
@@ -3,7 +3,10 @@ require "spec_helper"
|
|
3
3
|
describe Flay do
|
4
4
|
describe "emit method" do
|
5
5
|
it "should look at the dirs" do
|
6
|
-
MetricFu::Configuration.run {|config|
|
6
|
+
MetricFu::Configuration.run {|config|
|
7
|
+
config.add_metric(:flay)
|
8
|
+
config.configure_metric(:flay, { :dirs_to_flay => ['app', 'lib'], :filetypes => ['rb'] })
|
9
|
+
}
|
7
10
|
File.stub!(:directory?).and_return(true)
|
8
11
|
@flay = MetricFu::Flay.new('base_dir')
|
9
12
|
|
@@ -12,7 +15,10 @@ describe Flay do
|
|
12
15
|
end
|
13
16
|
|
14
17
|
it "should limit flay scores by the minimum_score" do
|
15
|
-
MetricFu::Configuration.run {|config|
|
18
|
+
MetricFu::Configuration.run {|config|
|
19
|
+
config.add_metric(:flay)
|
20
|
+
config.configure_metric(:flay, { :dirs_to_flay => [], :minimum_score => 99 })
|
21
|
+
}
|
16
22
|
File.stub!(:directory?).and_return(true)
|
17
23
|
@flay = MetricFu::Flay.new('base_dir')
|
18
24
|
|
@@ -4,7 +4,8 @@ describe Reek do
|
|
4
4
|
describe "emit" do
|
5
5
|
it "should include config parameters" do
|
6
6
|
MetricFu::Configuration.run do |config|
|
7
|
-
config.
|
7
|
+
config.add_metric(:reek)
|
8
|
+
config.configure_metric(:reek,{:config_file_pattern => 'lib/config/*.reek', :dirs_to_reek => []})
|
8
9
|
end
|
9
10
|
reek = MetricFu::Reek.new
|
10
11
|
reek.should_receive(:`).with(/--config lib\/config\/\*\.reek/).and_return("")
|
@@ -4,7 +4,8 @@ describe Roodi do
|
|
4
4
|
describe "emit" do
|
5
5
|
it "should add config options when present" do
|
6
6
|
MetricFu::Configuration.run do |config|
|
7
|
-
config.roodi
|
7
|
+
config.add_metric(:roodi)
|
8
|
+
config.configure_metric(:roodi,{:roodi_config => 'lib/config/roodi_config.yml', :dirs_to_roodi => []})
|
8
9
|
end
|
9
10
|
roodi = MetricFu::Roodi.new
|
10
11
|
roodi.should_receive(:`).with(/-config=lib\/config\/roodi_config\.yml/).and_return("")
|
@@ -13,7 +14,8 @@ describe Roodi do
|
|
13
14
|
|
14
15
|
it "should NOT add config options when NOT present" do
|
15
16
|
MetricFu::Configuration.run do |config|
|
16
|
-
config.roodi
|
17
|
+
config.add_metric(:roodi)
|
18
|
+
config.configure_metric(:roodi,{:dirs_to_roodi => []})
|
17
19
|
end
|
18
20
|
roodi = MetricFu::Roodi.new
|
19
21
|
roodi.stub(:`)
|
@@ -21,4 +23,4 @@ describe Roodi do
|
|
21
23
|
roodi.emit
|
22
24
|
end
|
23
25
|
end
|
24
|
-
end
|
26
|
+
end
|
data/spec/run_spec.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'metric_fu/cli/helper'
|
3
|
+
|
4
|
+
describe MetricFu, "running" do
|
5
|
+
|
6
|
+
let(:helper) { MetricFu::Cli::Helper.new }
|
7
|
+
|
8
|
+
before do
|
9
|
+
FileUtils.rm_rf("tmp/metric_fu")
|
10
|
+
end
|
11
|
+
|
12
|
+
it "all these tests should not rely on shelling out to the command line" do
|
13
|
+
pending("shelling to bundler is very slow")
|
14
|
+
end
|
15
|
+
|
16
|
+
xit "has a clean start" do
|
17
|
+
File.should_not exist("tmp/metric_fu")
|
18
|
+
end
|
19
|
+
|
20
|
+
xit "loads the .metrics file" do
|
21
|
+
out = metric_fu
|
22
|
+
out.should include "Metrics config loaded"
|
23
|
+
end
|
24
|
+
|
25
|
+
xit "creates a report yaml file" do
|
26
|
+
expect { metric_fu }.to create_file("tmp/metric_fu/report.yml")
|
27
|
+
end
|
28
|
+
|
29
|
+
xit "creates a report html file" do
|
30
|
+
expect { metric_fu }.to create_file("tmp/metric_fu/output/index.html")
|
31
|
+
end
|
32
|
+
|
33
|
+
xit "displays help" do
|
34
|
+
out = metric_fu("bundle exec metric_fu --help")
|
35
|
+
out.should include helper.banner
|
36
|
+
end
|
37
|
+
|
38
|
+
xit "displays version" do
|
39
|
+
out = metric_fu("bundle exec metric_fu --version")
|
40
|
+
out.should == "#{MetricFu::VERSION}"
|
41
|
+
end
|
42
|
+
|
43
|
+
xit "errors on unknown flags" do
|
44
|
+
expect { metric_fu "--asdasdasda" }.to raise_error
|
45
|
+
end
|
46
|
+
|
47
|
+
def metric_fu(command = "--no-open")
|
48
|
+
results = `metric_fu #{command} 2>&1`
|
49
|
+
$?.to_i.should eq(0), "The command 'metric_fu #{command}' failed!\n\n#{results}"
|
50
|
+
results.strip
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
RSpec::Matchers.define :create_file do |expected|
|
2
|
+
|
3
|
+
match do |block|
|
4
|
+
@before = File.exist?(expected)
|
5
|
+
block.call
|
6
|
+
@after = File.exist?(expected)
|
7
|
+
!@before && @after
|
8
|
+
end
|
9
|
+
|
10
|
+
failure_message_for_should do |block|
|
11
|
+
existed_before_message expected do
|
12
|
+
"The file #{expected.inspect} was not created"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
failure_message_for_should_not do |block|
|
17
|
+
existed_before_message expected do
|
18
|
+
"The file #{expected.inspect} was created"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def existed_before_message(expected)
|
23
|
+
if @before
|
24
|
+
"The file #{expected.inspect} existed before, so this test doesn't work"
|
25
|
+
else
|
26
|
+
yield
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: metric_fu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.1.4.
|
4
|
+
version: 2.1.4.pre5
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -19,7 +19,7 @@ authors:
|
|
19
19
|
autorequire:
|
20
20
|
bindir: bin
|
21
21
|
cert_chain: []
|
22
|
-
date: 2013-02-
|
22
|
+
date: 2013-02-04 00:00:00.000000000 Z
|
23
23
|
dependencies:
|
24
24
|
- !ruby/object:Gem::Dependency
|
25
25
|
name: rails_best_practices
|
@@ -330,8 +330,10 @@ extensions: []
|
|
330
330
|
extra_rdoc_files: []
|
331
331
|
files:
|
332
332
|
- .gitignore
|
333
|
+
- .metrics
|
333
334
|
- .rspec
|
334
335
|
- .travis.yml
|
336
|
+
- CONTRIBUTING.md
|
335
337
|
- Gemfile
|
336
338
|
- HISTORY.md
|
337
339
|
- MIT-LICENSE
|
@@ -365,6 +367,9 @@ files:
|
|
365
367
|
- home_page/title.gif
|
366
368
|
- home_page/title_back.gif
|
367
369
|
- lib/metric_fu.rb
|
370
|
+
- lib/metric_fu/cli/client.rb
|
371
|
+
- lib/metric_fu/cli/helper.rb
|
372
|
+
- lib/metric_fu/cli/parser.rb
|
368
373
|
- lib/metric_fu/configuration.rb
|
369
374
|
- lib/metric_fu/data_structures/careful_array.rb
|
370
375
|
- lib/metric_fu/data_structures/line_numbers.rb
|
@@ -462,6 +467,7 @@ files:
|
|
462
467
|
- lib/metric_fu/version.rb
|
463
468
|
- lib/metric_fu_requires.rb
|
464
469
|
- metric_fu.gemspec
|
470
|
+
- spec/cli/helper_spec.rb
|
465
471
|
- spec/metric_fu/configuration_spec.rb
|
466
472
|
- spec/metric_fu/data_structures/line_numbers_spec.rb
|
467
473
|
- spec/metric_fu/data_structures/location_spec.rb
|
@@ -501,7 +507,9 @@ files:
|
|
501
507
|
- spec/resources/saikuro_sfiles/thing.rb_cyclo.html
|
502
508
|
- spec/resources/yml/20090630.yml
|
503
509
|
- spec/resources/yml/metric_missing.yml
|
510
|
+
- spec/run_spec.rb
|
504
511
|
- spec/spec_helper.rb
|
512
|
+
- spec/support/matcher_create_file.rb
|
505
513
|
- spec/support/suite.rb
|
506
514
|
homepage: http://github.com/metricfu/metric_fu
|
507
515
|
licenses:
|
@@ -524,11 +532,12 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
524
532
|
version: 1.3.6
|
525
533
|
requirements: []
|
526
534
|
rubyforge_project: metric_fu
|
527
|
-
rubygems_version: 1.8.
|
535
|
+
rubygems_version: 1.8.24
|
528
536
|
signing_key:
|
529
537
|
specification_version: 3
|
530
538
|
summary: A fistful of code metrics, with awesome templates and graphs
|
531
539
|
test_files:
|
540
|
+
- spec/cli/helper_spec.rb
|
532
541
|
- spec/metric_fu/configuration_spec.rb
|
533
542
|
- spec/metric_fu/data_structures/line_numbers_spec.rb
|
534
543
|
- spec/metric_fu/data_structures/location_spec.rb
|
@@ -568,5 +577,7 @@ test_files:
|
|
568
577
|
- spec/resources/saikuro_sfiles/thing.rb_cyclo.html
|
569
578
|
- spec/resources/yml/20090630.yml
|
570
579
|
- spec/resources/yml/metric_missing.yml
|
580
|
+
- spec/run_spec.rb
|
571
581
|
- spec/spec_helper.rb
|
582
|
+
- spec/support/matcher_create_file.rb
|
572
583
|
- spec/support/suite.rb
|