yardstick 0.9.2 → 0.9.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (47) hide show
  1. data/.travis.yml +9 -3
  2. data/Gemfile +19 -13
  3. data/Rakefile +3 -1
  4. data/config/flay.yml +3 -0
  5. data/config/flog.yml +2 -0
  6. data/config/roodi.yml +16 -0
  7. data/config/site.reek +91 -0
  8. data/config/yardstick.yml +2 -0
  9. data/lib/yardstick/cli.rb +2 -0
  10. data/lib/yardstick/measurable.rb +2 -0
  11. data/lib/yardstick/measurement.rb +17 -7
  12. data/lib/yardstick/measurement_set.rb +2 -0
  13. data/lib/yardstick/method.rb +2 -0
  14. data/lib/yardstick/ordered_set.rb +2 -0
  15. data/lib/yardstick/processor.rb +2 -0
  16. data/lib/yardstick/rake/measurement.rb +2 -0
  17. data/lib/yardstick/rake/verify.rb +2 -0
  18. data/lib/yardstick/rule.rb +2 -0
  19. data/lib/yardstick/rule_set.rb +2 -0
  20. data/lib/yardstick/version.rb +3 -1
  21. data/lib/yardstick/yard_ext.rb +2 -0
  22. data/lib/yardstick.rb +2 -0
  23. data/spec/spec_helper.rb +25 -1
  24. data/spec/support/config_alias.rb +2 -0
  25. data/spec/{public → unit}/yardstick/cli_spec.rb +2 -0
  26. data/spec/{public → unit}/yardstick/measurement_set_spec.rb +2 -0
  27. data/spec/{public → unit}/yardstick/measurement_spec.rb +2 -0
  28. data/spec/{public → unit}/yardstick/method_spec.rb +2 -0
  29. data/spec/{public → unit}/yardstick/rake/measurement_spec.rb +2 -0
  30. data/spec/{public → unit}/yardstick/rake/verify_spec.rb +2 -0
  31. data/spec/{semipublic → unit}/yardstick/rule_spec.rb +2 -0
  32. data/spec/{public → unit}/yardstick_spec.rb +2 -0
  33. data/tasks/metrics/ci.rake +9 -0
  34. data/tasks/metrics/flay.rake +53 -0
  35. data/tasks/metrics/flog.rake +44 -0
  36. data/tasks/{heckle.rake → metrics/heckle.rake} +2 -2
  37. data/tasks/metrics/metric_fu.rake +31 -0
  38. data/tasks/metrics/reek.rake +21 -0
  39. data/tasks/metrics/roodi.rake +19 -0
  40. data/tasks/metrics/yardstick.rake +27 -0
  41. data/tasks/spec.rake +53 -11
  42. data/tasks/yard.rake +3 -1
  43. data/yardstick.gemspec +9 -6
  44. metadata +85 -110
  45. data/tasks/ci.rake +0 -1
  46. data/tasks/metrics.rake +0 -37
  47. data/tasks/yardstick.rake +0 -12
data/.travis.yml CHANGED
@@ -1,7 +1,6 @@
1
1
  language: ruby
2
- before_install: gem install bundler
3
- bundler_args: --without yard guard benchmarks metrics
4
- script: "bundle exec rake spec"
2
+ bundler_args: --without yard guard benchmarks
3
+ script: "bundle exec rake ci"
5
4
  rvm:
6
5
  - ree
7
6
  - 1.8.7
@@ -14,6 +13,13 @@ rvm:
14
13
  - jruby-head
15
14
  - rbx-18mode
16
15
  - rbx-19mode
16
+ matrix:
17
+ allow_failures:
18
+ - rvm: ree
19
+ - rvm: 1.8.7
20
+ - rvm: jruby-19mode
21
+ - rvm: jruby-head
17
22
  notifications:
23
+ irc: "irc.freenode.org#datamapper"
18
24
  email:
19
25
  - dan.kubb@gmail.com
data/Gemfile CHANGED
@@ -4,8 +4,13 @@ source 'https://rubygems.org'
4
4
 
5
5
  gemspec
6
6
 
7
- group :yard do
8
- gem 'redcarpet', '~> 2.2.2', :platforms => [ :mri, :rbx ]
7
+ group :development do
8
+ gem 'rake', '~> 10.0.3'
9
+ gem 'rspec', '~> 1.3.2'
10
+ end
11
+
12
+ group :benchmarks do
13
+ gem 'rbench', '~> 0.2.3'
9
14
  end
10
15
 
11
16
  group :guard do
@@ -24,6 +29,12 @@ group :guard do
24
29
  gem 'terminal-notifier-guard', '~> 1.5.3', :require => false
25
30
  end
26
31
 
32
+ platform :jruby do
33
+ group :jruby do
34
+ gem 'jruby-openssl', '~> 0.8.2'
35
+ end
36
+ end
37
+
27
38
  group :metrics do
28
39
  gem 'flay', '~> 1.4.3'
29
40
  gem 'flog', '~> 2.5.3'
@@ -42,13 +53,9 @@ group :metrics do
42
53
  gem 'map', '~> 6.3.0' # for metric_fu
43
54
  gem 'metric_fu', '~> 2.1.1'
44
55
  gem 'mspec', '~> 1.5.17'
56
+ gem 'rails_best_practices', '= 1.13.3' # for metric_fu
45
57
  gem 'rcov', '~> 1.0.0'
46
58
  gem 'ruby2ruby', '= 1.2.2' # for heckle
47
- gem 'rails_best_practices', '= 1.13.3' # for metric_fu
48
- end
49
-
50
- platforms :mri_19 do
51
- gem 'simplecov', '~> 0.7.1'
52
59
  end
53
60
 
54
61
  platforms :rbx do
@@ -56,12 +63,11 @@ group :metrics do
56
63
  end
57
64
  end
58
65
 
59
- group :benchmarks do
60
- gem 'rbench', '~> 0.2.3'
66
+ group :test do
67
+ gem 'coveralls', '~> 0.5.6'
68
+ gem 'simplecov', '~> 0.7.1'
61
69
  end
62
70
 
63
- platform :jruby do
64
- group :jruby do
65
- gem 'jruby-openssl', '~> 0.8.2'
66
- end
71
+ group :yard do
72
+ gem 'kramdown', '~> 0.14.2'
67
73
  end
data/Rakefile CHANGED
@@ -1,6 +1,8 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'rake'
2
4
 
3
- include FileUtils
5
+ require File.expand_path('../lib/yardstick/version', __FILE__)
4
6
 
5
7
  FileList['tasks/**/*.rake'].each { |task| import task }
6
8
 
data/config/flay.yml ADDED
@@ -0,0 +1,3 @@
1
+ ---
2
+ threshold: 16
3
+ total_score: 253
data/config/flog.yml ADDED
@@ -0,0 +1,2 @@
1
+ ---
2
+ threshold: 12.3
data/config/roodi.yml ADDED
@@ -0,0 +1,16 @@
1
+ ---
2
+ AbcMetricMethodCheck: { score: 8.0 }
3
+ AssignmentInConditionalCheck: { }
4
+ CaseMissingElseCheck: { }
5
+ ClassLineCountCheck: { line_count: 221 }
6
+ ClassNameCheck: { pattern: !ruby/regexp '/\A(?:[A-Z]+|[A-Z][a-z](?:[A-Z]?[a-z])+)\z/' }
7
+ ClassVariableCheck: { }
8
+ CyclomaticComplexityBlockCheck: { complexity: 3 }
9
+ CyclomaticComplexityMethodCheck: { complexity: 3 }
10
+ EmptyRescueBodyCheck: { }
11
+ ForLoopCheck: { }
12
+ MethodLineCountCheck: { line_count: 9 }
13
+ MethodNameCheck: { pattern: !ruby/regexp '/\A(?:[a-z\d](?:_?[a-z\d])+[?!=]?|\[\]=?|==|<=>|<<|[+*&|-])\z/' }
14
+ ModuleLineCountCheck: { line_count: 225 }
15
+ ModuleNameCheck: { pattern: !ruby/regexp '/\A(?:[A-Z]+|[A-Z][a-z](?:[A-Z]?[a-z])+)\z/' }
16
+ ParameterNumberCheck: { parameter_count: 3 }
data/config/site.reek ADDED
@@ -0,0 +1,91 @@
1
+ ---
2
+ UncommunicativeParameterName:
3
+ accept: []
4
+ exclude: []
5
+ enabled: true
6
+ reject:
7
+ - !ruby/regexp /^.$/
8
+ - !ruby/regexp /[0-9]$/
9
+ - !ruby/regexp /[A-Z]/
10
+ LargeClass:
11
+ max_methods: 0
12
+ exclude: []
13
+ enabled: true
14
+ max_instance_variables: 0
15
+ UncommunicativeMethodName:
16
+ accept: []
17
+ exclude: []
18
+ enabled: true
19
+ reject:
20
+ - !ruby/regexp /^[a-z]$/
21
+ - !ruby/regexp /[0-9]$/
22
+ - !ruby/regexp /[A-Z]/
23
+ LongParameterList:
24
+ max_params: 0
25
+ exclude: []
26
+ enabled: true
27
+ overrides: {}
28
+ FeatureEnvy:
29
+ exclude: []
30
+ enabled: true
31
+ ClassVariable:
32
+ exclude: []
33
+ enabled: true
34
+ BooleanParameter:
35
+ exclude: []
36
+ enabled: true
37
+ IrresponsibleModule:
38
+ exclude: []
39
+ enabled: false
40
+ UncommunicativeModuleName:
41
+ accept: []
42
+ exclude: []
43
+ enabled: true
44
+ reject:
45
+ - !ruby/regexp /^.$/
46
+ - !ruby/regexp /[0-9]$/
47
+ NestedIterators:
48
+ ignore_iterators: []
49
+ exclude: []
50
+ enabled: true
51
+ max_allowed_nesting: 0
52
+ LongMethod:
53
+ max_statements: 1
54
+ exclude: []
55
+ enabled: true
56
+ Duplication:
57
+ allow_calls: []
58
+ exclude: []
59
+ enabled: true
60
+ max_calls: 1
61
+ UtilityFunction:
62
+ max_helper_calls: 1
63
+ exclude: []
64
+ enabled: true
65
+ Attribute:
66
+ exclude: []
67
+ enabled: false
68
+ UncommunicativeVariableName:
69
+ accept: []
70
+ exclude: []
71
+ enabled: true
72
+ reject:
73
+ - !ruby/regexp /^.$/
74
+ - !ruby/regexp /[0-9]$/
75
+ - !ruby/regexp /[A-Z]/
76
+ SimulatedPolymorphism:
77
+ exclude: []
78
+ enabled: true
79
+ max_ifs: 1
80
+ DataClump:
81
+ exclude: []
82
+ enabled: true
83
+ max_copies: 1
84
+ min_clump_size: 1
85
+ ControlCouple:
86
+ exclude: []
87
+ enabled: true
88
+ LongYieldList:
89
+ max_params: 1
90
+ exclude: []
91
+ enabled: true
@@ -0,0 +1,2 @@
1
+ ---
2
+ threshold: 100
data/lib/yardstick/cli.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'optparse'
2
4
 
3
5
  module Yardstick
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Yardstick
2
4
  module Measurable
3
5
  include Measurement::UtilityMethods
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Yardstick
2
4
 
3
5
  # A measurement given a constraint on the docs
@@ -14,6 +16,14 @@ module Yardstick
14
16
  # @api public
15
17
  attr_reader :description
16
18
 
19
+ # Return the method docstring
20
+ #
21
+ # @return [YARD::Docstring]
22
+ #
23
+ # @api private
24
+ attr_reader :docstring
25
+ protected :docstring
26
+
17
27
  # Return a Measurement instance
18
28
  #
19
29
  # @example
@@ -99,7 +109,7 @@ module Yardstick
99
109
  # @api public
100
110
  def puts(io = $stdout)
101
111
  unless ok?
102
- io.puts("#{file}:#{line}: #{path}: #{@description}")
112
+ io.puts("#{file}:#{line}: #{path}: #{description}")
103
113
  end
104
114
  end
105
115
 
@@ -116,8 +126,9 @@ module Yardstick
116
126
  #
117
127
  # @api semipublic
118
128
  def eql?(other)
119
- @description.eql?(other.instance_variable_get(:@description)) &&
120
- @docstring.eql?(other.instance_variable_get(:@docstring))
129
+ other.kind_of?(self.class) &&
130
+ description.eql?(other.description) &&
131
+ docstring.eql?(other.docstring)
121
132
  end
122
133
 
123
134
  # Return hash identifier for the Measurement
@@ -127,7 +138,7 @@ module Yardstick
127
138
  #
128
139
  # @api private
129
140
  def hash
130
- [ @description, @docstring ].hash
141
+ description.hash ^ docstring.hash
131
142
  end
132
143
 
133
144
  private
@@ -142,7 +153,7 @@ module Yardstick
142
153
  # @api private
143
154
  def measure
144
155
  catch :measurement do
145
- @docstring.instance_eval(&@block)
156
+ docstring.instance_eval(&@block)
146
157
  end
147
158
  end
148
159
 
@@ -153,7 +164,7 @@ module Yardstick
153
164
  #
154
165
  # @api private
155
166
  def object
156
- @docstring.object
167
+ docstring.object
157
168
  end
158
169
 
159
170
  # The filename for the code
@@ -214,6 +225,5 @@ module Yardstick
214
225
  end
215
226
 
216
227
  end # module UtilityMethods
217
-
218
228
  end # class Measurement
219
229
  end # module Yardstick
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Yardstick
2
4
 
3
5
  # A set of yardstick measurements
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Yardstick
2
4
  module Method
3
5
  include Measurable
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Yardstick
2
4
 
3
5
  # A base class for an ordered set
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Yardstick
2
4
 
3
5
  # Handle procesing a docstring or path of files
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'rake'
2
4
  require 'rake/tasklib'
3
5
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'rake'
2
4
  require 'rake/tasklib'
3
5
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Yardstick
2
4
 
3
5
  # A constraint on the docs
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Yardstick
2
4
 
3
5
  # A set of rules to apply to docs
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module Yardstick
2
- VERSION = '0.9.2'.freeze
4
+ VERSION = '0.9.3'
3
5
  end # module Yardstick
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  module YARD #:nodoc: all
2
4
 
3
5
  # Extend docstring with yardstick methods
data/lib/yardstick.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'pathname'
2
4
  require 'rational'
3
5
 
data/spec/spec_helper.rb CHANGED
@@ -1,6 +1,30 @@
1
+ # encoding: utf-8
2
+
3
+ if ENV['COVERAGE'] == 'true'
4
+ require 'simplecov'
5
+ require 'coveralls'
6
+
7
+ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
8
+ SimpleCov::Formatter::HTMLFormatter,
9
+ Coveralls::SimpleCov::Formatter
10
+ ]
11
+
12
+ SimpleCov.start do
13
+ command_name 'spec:unit'
14
+ add_filter 'config'
15
+ add_filter 'spec'
16
+ minimum_coverage 100
17
+ end
18
+ end
19
+
1
20
  require 'yardstick'
2
21
  require 'spec'
3
- require 'spec/autorun'
22
+ require 'spec/autorun' if RUBY_VERSION < '1.9'
23
+
24
+ # require spec support files and shared behavior
25
+ Dir[File.expand_path('../{support,shared}/**/*.rb', __FILE__)].each do |file|
26
+ require file
27
+ end
4
28
 
5
29
  Spec::Runner.configure do |config|
6
30
  clear_tasks = proc { Rake::Task.clear }
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'rbconfig'
2
4
 
3
5
  ::Config = RbConfig unless defined?(::Config)
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
  require 'yardstick/cli'
3
5
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Yardstick::MeasurementSet do
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  shared_examples_for 'measurement is successful' do
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  shared_examples_for 'method is measured' do
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
  require 'yardstick/rake/measurement'
3
5
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
  require 'yardstick/rake/verify'
3
5
 
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Yardstick::Rule do
@@ -1,3 +1,5 @@
1
+ # encoding: utf-8
2
+
1
3
  require 'spec_helper'
2
4
 
3
5
  describe Yardstick do
@@ -0,0 +1,9 @@
1
+ # encoding: utf-8
2
+
3
+ desc 'Run metrics with Heckle'
4
+ task :ci => %w[ ci:metrics metrics:heckle ]
5
+
6
+ namespace :ci do
7
+ desc 'Run metrics (except heckle) and spec'
8
+ task :metrics => %w[ spec metrics:verify_measurements metrics:flog metrics:flay metrics:reek metrics:roodi metrics:all ]
9
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ PLATFORM = defined?(RUBY_ENGINE) && RUBY_ENGINE || 'ruby'
4
+
5
+ namespace :metrics do
6
+ if RUBY_VERSION >= '1.9.3' && PLATFORM == 'ruby'
7
+ begin
8
+ require 'flay'
9
+ require 'yaml'
10
+
11
+ config = YAML.load_file(File.expand_path('../../../config/flay.yml', __FILE__)).freeze
12
+ threshold = config.fetch('threshold').to_i
13
+ total_score = config.fetch('total_score').to_f
14
+ files = Flay.expand_dirs_to_files(config.fetch('path', 'lib')).sort
15
+
16
+ # original code by Marty Andrews:
17
+ # http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html
18
+ desc 'Analyze for code duplication'
19
+ task :flay do
20
+ # run flay once without a threshold to ensure the max mass matches the threshold
21
+ flay = Flay.new(:fuzzy => false, :verbose => false, :mass => 0)
22
+ flay.process(*files)
23
+
24
+ max = (flay.masses.map { |hash, mass| mass.to_f / flay.hashes[hash].size }.max) || 0
25
+ unless max >= threshold
26
+ raise "Adjust flay threshold down to #{max}"
27
+ end
28
+
29
+ total = flay.masses.reduce(0.0) { |total, (hash, mass)| total + (mass.to_f / flay.hashes[hash].size) }
30
+ unless total == total_score
31
+ raise "Flay total is now #{total}, but expected #{total_score}"
32
+ end
33
+
34
+ # run flay a second time with the threshold set
35
+ flay = Flay.new(:fuzzy => false, :verbose => false, :mass => threshold.succ)
36
+ flay.process(*files)
37
+
38
+ if flay.masses.any?
39
+ flay.report
40
+ raise "#{flay.masses.size} chunks of code have a duplicate mass > #{threshold}"
41
+ end
42
+ end
43
+ rescue LoadError
44
+ task :flay do
45
+ $stderr.puts 'Flay is not available. In order to run flay, you must: gem install flay'
46
+ end
47
+ end
48
+ else
49
+ task :flay do
50
+ $stderr.puts "Flay is disabled under #{PLATFORM}-#{RUBY_VERSION} since it is not score compatible with other implementations"
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,44 @@
1
+ # encoding: utf-8
2
+
3
+ namespace :metrics do
4
+ begin
5
+ require 'backports'
6
+ require 'flog'
7
+ require 'yaml'
8
+
9
+ config = YAML.load_file(File.expand_path('../../../config/flog.yml', __FILE__)).freeze
10
+ threshold = config.fetch('threshold').to_f.round(1)
11
+
12
+ # original code by Marty Andrews:
13
+ # http://blog.martyandrews.net/2009/05/enforcing-ruby-code-quality.html
14
+ desc 'Analyze for code complexity'
15
+ task :flog do
16
+ flog = Flog.new
17
+ flog.flog Array(config.fetch('path', 'lib'))
18
+
19
+ totals = flog.totals.select { |name, score| name[-5, 5] != '#none' }.
20
+ map { |name, score| [ name, score.round(1) ] }.
21
+ sort_by { |name, score| score }
22
+
23
+ if totals.any?
24
+ max = totals.last[1]
25
+ unless max >= threshold
26
+ raise "Adjust flog score down to #{max}"
27
+ end
28
+ end
29
+
30
+ bad_methods = totals.select { |name, score| score > threshold }
31
+ if bad_methods.any?
32
+ bad_methods.reverse_each do |name, score|
33
+ puts '%8.1f: %s' % [ score, name ]
34
+ end
35
+
36
+ raise "#{bad_methods.size} methods have a flog complexity > #{threshold}"
37
+ end
38
+ end
39
+ rescue LoadError
40
+ task :flog do
41
+ $stderr.puts 'Flog is not available. In order to run flog, you must: gem install flog'
42
+ end
43
+ end
44
+ end
@@ -1,9 +1,9 @@
1
1
  # original code by Ashley Moran:
2
2
  # http://aviewfromafar.net/2007/11/1/rake-task-for-heckling-your-specs
3
3
  desc 'Heckle each module and class'
4
- task :heckle => :verify_rcov do
4
+ task 'metrics:heckle' => 'metrics:coverage' do
5
5
  root_module = 'Yardstick'
6
- spec_files = FileList['spec/**/*_spec.rb']
6
+ spec_files = FileList['spec/uni/**/*_spec.rb']
7
7
 
8
8
  current_module = nil
9
9
  current_method = nil
@@ -0,0 +1,31 @@
1
+ # encoding: utf-8
2
+
3
+ begin
4
+ require 'metric_fu'
5
+ require 'json'
6
+
7
+ # XXX: temporary hack until metric_fu is fixed
8
+ MetricFu::Saikuro.class_eval { include FileUtils }
9
+
10
+ MetricFu::Configuration.run do |config|
11
+ config.rcov = {
12
+ :environment => 'test',
13
+ :test_files => %w[ spec/**/*_spec.rb ],
14
+ :rcov_opts => %w[
15
+ --sort coverage
16
+ --no-html
17
+ --text-coverage
18
+ --no-color
19
+ --profile
20
+ --exclude spec/,^/
21
+ --include lib:spec
22
+ ],
23
+ }
24
+ end
25
+ rescue LoadError
26
+ namespace :metrics do
27
+ task :all do
28
+ $stderr.puts 'metric_fu is not available. In order to run metrics:all, you must: gem install metric_fu'
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ namespace :metrics do
4
+ begin
5
+ require 'reek/rake/task'
6
+
7
+ RBX_18_MODE = RUBY_VERSION < '1.9' && defined?(RUBY_ENGINE) && RUBY_ENGINE == 'rbx'
8
+
9
+ Reek::Rake::Task.new do |t|
10
+ # reek has some problems under rbx in 1.8 mode that cause the underlying
11
+ # script to raise an exception. Rather than halt the "rake ci" process due
12
+ # to one bug, we choose to ignore it in this specific case until reek can be
13
+ # fixed.
14
+ t.fail_on_error = ! RBX_18_MODE # always true, except under rbx 18 mode
15
+ end
16
+ rescue LoadError
17
+ task :reek do
18
+ $stderr.puts 'Reek is not available. In order to run reek, you must: gem install reek'
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,19 @@
1
+ # encoding: utf-8
2
+
3
+ namespace :metrics do
4
+ begin
5
+ require 'roodi'
6
+ require 'rake/tasklib'
7
+ require 'roodi_task'
8
+
9
+ RoodiTask.new do |t|
10
+ t.verbose = false
11
+ t.config = File.expand_path('../../../config/roodi.yml', __FILE__)
12
+ t.patterns = %w[ lib/**/*.rb ]
13
+ end
14
+ rescue LoadError
15
+ task :roodi do
16
+ $stderr.puts 'Roodi is not available. In order to run roodi, you must: gem install roodi'
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,27 @@
1
+ # encoding: utf-8
2
+
3
+ namespace :metrics do
4
+ begin
5
+ $LOAD_PATH.unshift(File.expand_path('../../../lib', __FILE__))
6
+
7
+ require 'yardstick/rake/measurement'
8
+ require 'yardstick/rake/verify'
9
+ require 'yaml'
10
+
11
+ config = YAML.load_file(File.expand_path('../../../config/yardstick.yml', __FILE__))
12
+
13
+ # yardstick_measure task
14
+ Yardstick::Rake::Measurement.new
15
+
16
+ # verify_measurements task
17
+ Yardstick::Rake::Verify.new do |verify|
18
+ verify.threshold = config.fetch('threshold')
19
+ end
20
+ rescue LoadError
21
+ %w[ yardstick_measure verify_measurements ].each do |name|
22
+ task name.to_s do
23
+ $stderr.puts "Yardstick is not available. In order to run #{name}, you must: gem install yardstick"
24
+ end
25
+ end
26
+ end
27
+ end
data/tasks/spec.rake CHANGED
@@ -1,22 +1,64 @@
1
- require 'spec/rake/spectask'
2
- require 'spec/rake/verify_rcov'
1
+ # encoding: utf-8
3
2
 
4
3
  spec_defaults = lambda do |spec|
5
- spec.pattern = 'spec/**/*_spec.rb'
6
4
  spec.ruby_opts = %w[ -r./spec/support/config_alias ]
7
5
  spec.spec_opts << '--options' << 'spec/spec.opts'
8
6
  end
9
7
 
10
- Spec::Rake::SpecTask.new(:spec, &spec_defaults)
8
+ begin
9
+ require 'spec/rake/spectask'
11
10
 
12
- Spec::Rake::SpecTask.new(:rcov) do |rcov|
13
- spec_defaults.call(rcov)
14
- rcov.rcov = true
15
- rcov.rcov_opts = File.read('spec/rcov.opts').split(/\s+/)
11
+ desc 'Run all specs'
12
+ task :spec => %w[ spec:unit spec:integration ]
13
+
14
+ namespace :spec do
15
+ desc 'Run unit specs'
16
+ Spec::Rake::SpecTask.new(:unit) do |unit|
17
+ spec_defaults.call(unit)
18
+ unit.pattern = 'spec/unit/**/*_spec.rb'
19
+ end
20
+
21
+ desc 'Run integration specs'
22
+ Spec::Rake::SpecTask.new(:integration) do |integration|
23
+ spec_defaults.call(integration)
24
+ integration.pattern = 'spec/integration/**/*_spec.rb'
25
+ end
26
+ end
27
+ rescue LoadError
28
+ %w[ spec spec:unit spec:integration ].each do |name|
29
+ task name do
30
+ $stderr.puts "rspec is not available. In order to run #{name}, you must: gem install rspec"
31
+ end
32
+ end
16
33
  end
17
34
 
18
- RCov::VerifyTask.new(:verify_rcov => :rcov) do |rcov|
19
- rcov.threshold = 100
35
+ namespace :metrics do
36
+ lib = RUBY_VERSION < '1.9' ? 'rcov' : 'simplecov'
37
+ begin
38
+ require lib
39
+
40
+ if lib == 'rcov'
41
+ require 'spec/rake/spectask'
42
+
43
+ desc 'Generate code coverage'
44
+ Spec::Rake::SpecTask.new(:coverage) do |rcov|
45
+ spec_defaults.call(rcov)
46
+ rcov.rcov = true
47
+ rcov.pattern = 'spec/unit/**/*_spec.rb'
48
+ rcov.rcov_opts = File.read('spec/rcov.opts').split(/\s+/)
49
+ end
50
+ else
51
+ desc 'Generate code coverage'
52
+ task :coverage do
53
+ ENV['COVERAGE'] = 'true'
54
+ Rake::Task['spec:unit'].execute
55
+ end
56
+ end
57
+ rescue LoadError
58
+ task :coverage do
59
+ $stderr.puts "coverage is not available. In order to run #{lib}, you must: gem install #{lib}"
60
+ end
61
+ end
20
62
  end
21
63
 
22
- task :default => :spec
64
+ task :test => :spec
data/tasks/yard.rake CHANGED
@@ -1,9 +1,11 @@
1
+ # encoding: utf-8
2
+
1
3
  begin
2
4
  require 'yard'
3
5
 
4
6
  YARD::Rake::YardocTask.new
5
7
  rescue LoadError
6
8
  task :yard do
7
- abort 'YARD is not available. In order to run yard, you must: gem install yard'
9
+ $stderr.puts 'YARD is not available. In order to run yard, you must: gem install yard'
8
10
  end
9
11
  end
data/yardstick.gemspec CHANGED
@@ -1,15 +1,19 @@
1
1
  # encoding: utf-8
2
2
 
3
- require File.expand_path('../lib/yardstick/version', __FILE__)
3
+ lib = File.expand_path('../lib', __FILE__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
6
+ require 'yardstick/version'
4
7
 
5
8
  Gem::Specification.new do |gem|
6
9
  gem.name = 'yardstick'
7
- gem.version = Yardstick::VERSION.dup
10
+ gem.version = Yardstick::VERSION
8
11
  gem.authors = ['Dan Kubb']
9
12
  gem.email = %w[dan.kubb@gmail.com]
10
13
  gem.description = 'Measure YARD documentation coverage'
11
14
  gem.summary = 'A tool for verifying YARD documentation coverage'
12
15
  gem.homepage = 'https://github.com/dkubb/yardstick'
16
+ gem.licenses = ['MIT']
13
17
 
14
18
  gem.require_paths = %w[lib]
15
19
  gem.files = `git ls-files`.split($/)
@@ -17,9 +21,8 @@ Gem::Specification.new do |gem|
17
21
  gem.extra_rdoc_files = %w[LICENSE README.rdoc]
18
22
  gem.executables = %w[yardstick]
19
23
 
20
- gem.add_runtime_dependency('backports', '~> 2.8.2')
21
- gem.add_runtime_dependency('yard', '~> 0.8.4.1')
24
+ gem.add_dependency 'backports', ['~> 3.0', '>= 3.0.3']
25
+ gem.add_dependency 'yard', '~> 0.8.5'
22
26
 
23
- gem.add_development_dependency('rake', '~> 10.0.3')
24
- gem.add_development_dependency('rspec', '~> 1.3.2')
27
+ gem.add_development_dependency 'bundler', '~> 1.0'
25
28
  end
metadata CHANGED
@@ -1,98 +1,80 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: yardstick
3
- version: !ruby/object:Gem::Version
4
- hash: 63
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.3
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 9
9
- - 2
10
- version: 0.9.2
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Dan Kubb
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2013-02-16 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2013-03-01 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
21
15
  name: backports
22
- prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
24
17
  none: false
25
- requirements:
18
+ requirements:
26
19
  - - ~>
27
- - !ruby/object:Gem::Version
28
- hash: 43
29
- segments:
30
- - 2
31
- - 8
32
- - 2
33
- version: 2.8.2
20
+ - !ruby/object:Gem::Version
21
+ version: '3.0'
22
+ - - ! '>='
23
+ - !ruby/object:Gem::Version
24
+ version: 3.0.3
34
25
  type: :runtime
35
- version_requirements: *id001
36
- - !ruby/object:Gem::Dependency
37
- name: yard
38
26
  prerelease: false
39
- requirement: &id002 !ruby/object:Gem::Requirement
27
+ version_requirements: !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: '3.0'
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: 3.0.3
36
+ - !ruby/object:Gem::Dependency
37
+ name: yard
38
+ requirement: !ruby/object:Gem::Requirement
40
39
  none: false
41
- requirements:
40
+ requirements:
42
41
  - - ~>
43
- - !ruby/object:Gem::Version
44
- hash: 29
45
- segments:
46
- - 0
47
- - 8
48
- - 4
49
- - 1
50
- version: 0.8.4.1
42
+ - !ruby/object:Gem::Version
43
+ version: 0.8.5
51
44
  type: :runtime
52
- version_requirements: *id002
53
- - !ruby/object:Gem::Dependency
54
- name: rake
55
45
  prerelease: false
56
- requirement: &id003 !ruby/object:Gem::Requirement
46
+ version_requirements: !ruby/object:Gem::Requirement
47
+ none: false
48
+ requirements:
49
+ - - ~>
50
+ - !ruby/object:Gem::Version
51
+ version: 0.8.5
52
+ - !ruby/object:Gem::Dependency
53
+ name: bundler
54
+ requirement: !ruby/object:Gem::Requirement
57
55
  none: false
58
- requirements:
56
+ requirements:
59
57
  - - ~>
60
- - !ruby/object:Gem::Version
61
- hash: 73
62
- segments:
63
- - 10
64
- - 0
65
- - 3
66
- version: 10.0.3
58
+ - !ruby/object:Gem::Version
59
+ version: '1.0'
67
60
  type: :development
68
- version_requirements: *id003
69
- - !ruby/object:Gem::Dependency
70
- name: rspec
71
61
  prerelease: false
72
- requirement: &id004 !ruby/object:Gem::Requirement
62
+ version_requirements: !ruby/object:Gem::Requirement
73
63
  none: false
74
- requirements:
64
+ requirements:
75
65
  - - ~>
76
- - !ruby/object:Gem::Version
77
- hash: 31
78
- segments:
79
- - 1
80
- - 3
81
- - 2
82
- version: 1.3.2
83
- type: :development
84
- version_requirements: *id004
66
+ - !ruby/object:Gem::Version
67
+ version: '1.0'
85
68
  description: Measure YARD documentation coverage
86
- email:
69
+ email:
87
70
  - dan.kubb@gmail.com
88
- executables:
71
+ executables:
89
72
  - yardstick
90
73
  extensions: []
91
-
92
- extra_rdoc_files:
74
+ extra_rdoc_files:
93
75
  - LICENSE
94
76
  - README.rdoc
95
- files:
77
+ files:
96
78
  - .document
97
79
  - .gitignore
98
80
  - .rvmrc
@@ -102,6 +84,11 @@ files:
102
84
  - README.rdoc
103
85
  - Rakefile
104
86
  - bin/yardstick
87
+ - config/flay.yml
88
+ - config/flog.yml
89
+ - config/roodi.yml
90
+ - config/site.reek
91
+ - config/yardstick.yml
105
92
  - lib/yardstick.rb
106
93
  - lib/yardstick/cli.rb
107
94
  - lib/yardstick/measurable.rb
@@ -116,65 +103,53 @@ files:
116
103
  - lib/yardstick/rule_set.rb
117
104
  - lib/yardstick/version.rb
118
105
  - lib/yardstick/yard_ext.rb
119
- - spec/public/yardstick/cli_spec.rb
120
- - spec/public/yardstick/measurement_set_spec.rb
121
- - spec/public/yardstick/measurement_spec.rb
122
- - spec/public/yardstick/method_spec.rb
123
- - spec/public/yardstick/rake/measurement_spec.rb
124
- - spec/public/yardstick/rake/verify_spec.rb
125
- - spec/public/yardstick_spec.rb
126
106
  - spec/rcov.opts
127
- - spec/semipublic/yardstick/rule_spec.rb
128
107
  - spec/spec.opts
129
108
  - spec/spec_helper.rb
130
109
  - spec/support/config_alias.rb
131
- - tasks/ci.rake
132
- - tasks/heckle.rake
133
- - tasks/metrics.rake
110
+ - spec/unit/yardstick/cli_spec.rb
111
+ - spec/unit/yardstick/measurement_set_spec.rb
112
+ - spec/unit/yardstick/measurement_spec.rb
113
+ - spec/unit/yardstick/method_spec.rb
114
+ - spec/unit/yardstick/rake/measurement_spec.rb
115
+ - spec/unit/yardstick/rake/verify_spec.rb
116
+ - spec/unit/yardstick/rule_spec.rb
117
+ - spec/unit/yardstick_spec.rb
118
+ - tasks/metrics/ci.rake
119
+ - tasks/metrics/flay.rake
120
+ - tasks/metrics/flog.rake
121
+ - tasks/metrics/heckle.rake
122
+ - tasks/metrics/metric_fu.rake
123
+ - tasks/metrics/reek.rake
124
+ - tasks/metrics/roodi.rake
125
+ - tasks/metrics/yardstick.rake
134
126
  - tasks/spec.rake
135
127
  - tasks/yard.rake
136
- - tasks/yardstick.rake
137
128
  - yardstick.gemspec
138
129
  homepage: https://github.com/dkubb/yardstick
139
- licenses: []
140
-
130
+ licenses:
131
+ - MIT
141
132
  post_install_message:
142
133
  rdoc_options: []
143
-
144
- require_paths:
134
+ require_paths:
145
135
  - lib
146
- required_ruby_version: !ruby/object:Gem::Requirement
136
+ required_ruby_version: !ruby/object:Gem::Requirement
147
137
  none: false
148
- requirements:
149
- - - ">="
150
- - !ruby/object:Gem::Version
151
- hash: 3
152
- segments:
153
- - 0
154
- version: "0"
155
- required_rubygems_version: !ruby/object:Gem::Requirement
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ required_rubygems_version: !ruby/object:Gem::Requirement
156
143
  none: false
157
- requirements:
158
- - - ">="
159
- - !ruby/object:Gem::Version
160
- hash: 3
161
- segments:
162
- - 0
163
- version: "0"
144
+ requirements:
145
+ - - ! '>='
146
+ - !ruby/object:Gem::Version
147
+ version: '0'
164
148
  requirements: []
165
-
166
149
  rubyforge_project:
167
- rubygems_version: 1.8.24
150
+ rubygems_version: 1.8.23
168
151
  signing_key:
169
152
  specification_version: 3
170
153
  summary: A tool for verifying YARD documentation coverage
171
- test_files:
172
- - spec/public/yardstick/cli_spec.rb
173
- - spec/public/yardstick/measurement_set_spec.rb
174
- - spec/public/yardstick/measurement_spec.rb
175
- - spec/public/yardstick/method_spec.rb
176
- - spec/public/yardstick/rake/measurement_spec.rb
177
- - spec/public/yardstick/rake/verify_spec.rb
178
- - spec/public/yardstick_spec.rb
179
- - spec/semipublic/yardstick/rule_spec.rb
154
+ test_files: []
180
155
  has_rdoc:
data/tasks/ci.rake DELETED
@@ -1 +0,0 @@
1
- task :ci => [ :verify_measurements, :heckle, 'metrics:all' ]
data/tasks/metrics.rake DELETED
@@ -1,37 +0,0 @@
1
- begin
2
- require 'metric_fu'
3
- rescue LoadError
4
- namespace :metrics do
5
- task :all do
6
- abort 'metric_fu is not available. In order to run metrics:all, you must: gem install metric_fu'
7
- end
8
- end
9
- end
10
-
11
- begin
12
- require 'reek/adapters/rake_task'
13
-
14
- Reek::RakeTask.new do |t|
15
- t.fail_on_error = true
16
- t.verbose = false
17
- t.source_files = 'lib/**/*.rb'
18
- end
19
- rescue LoadError
20
- task :reek do
21
- abort 'Reek is not available. In order to run reek, you must: gem install reek'
22
- end
23
- end
24
-
25
- begin
26
- require 'roodi'
27
- require 'rake/tasklib'
28
- require 'roodi_task'
29
-
30
- RoodiTask.new do |t|
31
- t.verbose = false
32
- end
33
- rescue LoadError
34
- task :roodi do
35
- abort 'Roodi is not available. In order to run roodi, you must: gem install roodi'
36
- end
37
- end
data/tasks/yardstick.rake DELETED
@@ -1,12 +0,0 @@
1
- $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
2
-
3
- require 'yardstick/rake/measurement'
4
- require 'yardstick/rake/verify'
5
-
6
- # yardstick_measure task
7
- Yardstick::Rake::Measurement.new
8
-
9
- # verify_measurements task
10
- Yardstick::Rake::Verify.new do |verify|
11
- verify.threshold = 100
12
- end