metric_fu 4.7.3 → 4.7.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZjM3MzJkYjE2Yzc0NzFhMGUzNWM0NDhkOWQ5MGEzNWQzMWMxMTBlOQ==
4
+ ZGM5Njc5OTJhMzVlNzcwMTEzODAwM2I4MDdlNmQzYWVkMmFiNzI4NA==
5
5
  data.tar.gz: !binary |-
6
- ZDIzMzBmYjZhOTQyMWM2OTIxMTI3ZjUxNTQzMjNiNWU1MGM2OThkZA==
6
+ N2NhZjJmMmMyN2RhZGQxYWNjYmE3MzI1OGUzNWNmNjFlNDVkOGE5ZA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- MDNkMTYzNjBlMGE4NGM0ZmU5OWQ2YmNkNGQ0YjVlYTE5YmM0ZjE1NGVhZmMx
10
- YTQ2YzU5MjdlNTA5MDEwOGFiZDBhZTExNzJjNzU0MDM3OGY3YmNiYTJlMjJl
11
- NjkzMTNmY2ZjNTlhOGI2ZDI1YzQ5ZjZiYTVkM2U5NzIwN2I3Yjc=
9
+ ODhhMmQ5ZDg2MWVlNjY0YjNlM2M4MTU4NjM5YzE3ZWZhYTgwNDQ5YjIyMjU0
10
+ ZjNlYjk5MTY0NzY3MzFiZTI1MTU2YzA2OGI1YTVjMGFmYTkyYjcxMTMyMTQ0
11
+ NTQyZmVlMWNlMjA4OGE5OWM2OWE0Yzc3ZjNiZmIwYzgyZmU2OWE=
12
12
  data.tar.gz: !binary |-
13
- NTg4ZDMwOTQwODJiNjI5NGIzMzY5ODMyNzZlNDUwOTdjZDk5MDFlNmJlOTM1
14
- ZDcxNTlhNWY1NDE0OWY5MzVhYjUyMWY4MzEyYjQyMmU4ZGM2ZWM2MWQzYjQ3
15
- NmFmMjYwOTZlYzM3ODY3OTllY2M0NDA5NzFhM2VkYTliMzIxNWY=
13
+ MjkzNzhkMDFmNjMyYzRmODA4NzNmOTE0NGViZTVjZTgzM2QxZGJiYjQ5Yzlk
14
+ MmMwYjU3ZGZhYmJhNTRmNzgwMjg4MzJhMTg4ZDBiZDMyNWViZDFiMDRlMzAx
15
+ ODk0MGVmMzA5N2EwODI3MTVlODdjOWM1MDEwNGYwNjg1MjQ2ZmU=
Binary file
data.tar.gz.sig CHANGED
Binary file
data/.metrics CHANGED
@@ -4,14 +4,13 @@
4
4
  #
5
5
  # MetricFu::Configuration.run do |config|
6
6
  #
7
- # Configure Metrics
7
+ # # Configure Metrics
8
8
  #
9
- # To configure individual metrics...
9
+ # # To configure individual metrics...
10
10
  #
11
11
  # config.configure_metric(:rcov) do |rcov|
12
- # rcov.enabled = true
13
- # coverage_file = File.expand_path("coverage/rcov/rcov.txt", Dir.pwd)
14
- # rcov.external = coverage_file
12
+ # rcov.coverage_file = MetricFu.run_path.join("coverage/rcov/rcov.txt")
13
+ # rcov.enable
15
14
  # rcov.activate
16
15
  # end
17
16
  #
@@ -29,7 +28,7 @@
29
28
  # churn.start_date = '6 months ago'
30
29
  # end
31
30
  #
32
- # Or, to configure a group of metrics...
31
+ # # Or, to configure a group of metrics...
33
32
  # config.configure_metrics.each do |metric|
34
33
  # if [:churn, :flay, :flog].include?(metric.name)
35
34
  # metric.enabled = true
@@ -39,31 +38,31 @@
39
38
  # end
40
39
  #
41
40
  #
42
- # Configure Formatters
41
+ # # Configure Formatters
43
42
  #
44
- # By default, metric_fu will use the built-in html formatter
45
- # to generate HTML reports for each metric with pretty graphs.
43
+ # # By default, metric_fu will use the built-in html formatter
44
+ # # to generate HTML reports for each metric with pretty graphs.
46
45
 
47
- # To configure different formatter(s) or output ...
46
+ # # To configure different formatter(s) or output ...
48
47
  #
49
48
  # config.configure_formatter(:html)
50
49
  # config.configure_formatter(:yaml, "customreport.yml")
51
50
  # config.configure_formatter(MyCustomFormatter)
52
51
  #
53
- # MetricFu will attempt to require a custom formatter by
54
- # fully qualified name based on ruby search path,
55
- # but you may find that you need to add a require above.
52
+ # # MetricFu will attempt to require a custom formatter by
53
+ # # fully qualified name based on ruby search path,
54
+ # # but you may find that you need to add a require above.
56
55
  #
57
- # For instance, to require a formatter in your app's lib directory, add the
58
- # following line to the top of this file.
59
- # require './lib/my_custom_formatter.rb'
56
+ # # For instance, to require a formatter in your app's lib directory, add the
57
+ # # following line to the top of this file.
58
+ # # require './lib/my_custom_formatter.rb'
60
59
  #
61
60
  #
62
- # Configure Graph Engine
61
+ # # Configure Graph Engine
63
62
  #
64
- # By default, metric_fu uses the bluff graph engine.
65
- # To configure a different graph engine...
63
+ # # By default, metric_fu uses the bluff graph engine.
64
+ # # To configure a different graph engine...
66
65
  #
67
- # config.configure_graph_engine(:gchart)
66
+ # # config.configure_graph_engine(:gchart)
68
67
  #
69
68
  # end
@@ -5,16 +5,16 @@ cache: bundler
5
5
  gemfile:
6
6
  - gemfiles/Gemfile.travis
7
7
  before_install:
8
- - gem install bundler -v '= 1.5.1'
8
+ - gem install bundler
9
9
  # env:
10
10
  # - "rack=1.3.4"
11
11
  rvm:
12
12
  - 2.1.0
13
13
  - 2.0.0
14
14
  - 1.9.3
15
- # - 1.9.2 # code_metric 0.1.0 requires ruby 1.9.3 or greater
16
- - jruby-19mode # JRuby in 1.9 mode
17
- - rbx
15
+ - 1.9.2
16
+ - jruby
17
+ - rbx-2
18
18
  matrix:
19
19
  allow_failures:
20
- - rvm: rbx
20
+ - rvm: rbx-2
@@ -34,34 +34,36 @@ Extrovert
34
34
  KAKUTANI Shintaro
35
35
  Andrew Timberlake
36
36
  Guilherme Souza
37
+ Przemysław Dąbek
37
38
  carlost
38
39
  David Barri
39
40
  Beau Fabry
40
41
  Chris Mason
41
42
  Andrew Selder
42
- Mark Wilden
43
43
  iain
44
+ Mark Wilden
44
45
  Lars E. Hoeg
45
46
  Eric Wollesen
46
47
  Adam Bair
47
48
  Jinzhu
48
- Diego Carrion
49
- Martin Gotink
50
49
  Matthew Van Horn
51
- saltracer
50
+ Martin Gotink
51
+ Diego Carrion
52
52
  benlovell
53
- khall
53
+ saltracer
54
54
  ff-cviradiya
55
- Todd A. Jacobs
55
+ khall
56
56
  Stefan Huber
57
+ Todd A. Jacobs
58
+ jayzes
59
+ Scyllinice
57
60
  Hans Hasselberg
58
61
  Bitdeli Chef
59
- Scyllinice
60
- jayzes
61
62
  Matthew Gordon
62
- Joel Nimety
63
+ Chris Ian Fiel
63
64
  factorylabs
65
+ Paul Elliott
64
66
  Greg Allen
67
+ Joel Nimety
65
68
  Mike Ball
66
- Chris Ian Fiel
67
- Paul Elliott
69
+ Guilherme Simões
data/DEV.md ADDED
@@ -0,0 +1,56 @@
1
+ ## Contracted Interfaces
2
+
3
+ ```ruby
4
+ MetricFu.run_dir #=> Dir.pwd
5
+ MetricFu.run_dir = some_path
6
+ MetricFu.run_path #=> Pathname(Dir.pwd)
7
+ MetricFu.root_dir
8
+ MetricFu.load_user_configuration
9
+ MetricFu.loader.loaded_files
10
+ MetricFu.lib_require(base = '',&block)
11
+ MetricFu.lib_dir #=> metric_fu/lib
12
+ MetricFu.metrics_require(&block)
13
+ MetricFu.metrics_dir #=> metric_fu/lib/metrics
14
+ MetricFu.formatter_require(&block)
15
+ MetricFu.formatter_dir #=> metric_fu/lib/formatter
16
+ MetricFu.reporting_require(&block)
17
+ MetricFu.reporting_dir #=> metric_fu/lib/reporting
18
+ MetricFu.logging_require(&block)
19
+ MetricFu.logging_dir #=> metric_fu/lib/logging
20
+ MetricFu.errors_require(&block)
21
+ MetricFu.errors_dir #=> metric_fu/lib/errors
22
+ MetricFu.data_structures_require(&block)
23
+ MetricFu.data_structures_dir #=> metric_fu/lib/data_structures
24
+ MetricFu.tasks_require(&block)
25
+ MetricFu.tasks_dir #=> metric_fu/lib/tasks
26
+
27
+ MetricFu.configuration #=> MetricFu::Configuration.new
28
+ MetricFu.configuration.configure_metrics # for each metric, yield to block or runs enable, activate
29
+ metric = MetricFu.configuration.configure_metric(:flog)
30
+ metric.run_options #=> metric.default_run_options.merge(metric.configured_run_options)
31
+ metric.enable
32
+ metric.enabled = true
33
+ metric.activate
34
+ metric.activated = true
35
+ metric.name #=> :flog
36
+ ```
37
+
38
+ ## Testing
39
+
40
+ `bundle exec rspec`
41
+
42
+ ## Forking
43
+
44
+ ## Issues / Pull Requests
45
+
46
+ * see [CONTRIBUTING](CONTRIBUTING.md)
47
+
48
+ ## Building
49
+
50
+ `rake build` or `rake install`
51
+
52
+ ## Releasing
53
+
54
+ 1. Update lib/metric_fu/version.rb
55
+ 2. Update HISTORY.md
56
+ 3. `rake release`
data/HISTORY.md CHANGED
@@ -4,13 +4,21 @@ 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 [changes](https://github.com/metricfu/metric_fu/compare/v4.7.3...master)
7
+ ### Master [changes](https://github.com/metricfu/metric_fu/compare/v4.7.4...master)
8
8
 
9
9
  * Breaking Changes
10
10
  * Features
11
11
  * Fixes
12
12
  * Misc
13
13
 
14
+ ### [4.7.4 / 2014-02-16](https://github.com/metricfu/metric_fu/compare/v4.7.3...v4.7.4)
15
+
16
+ * Fixes
17
+ * Reek no longer crashes when reporting no warnings (Michael Stark, #199)
18
+ * Prevent Roodi non-metric output from ending up in the results (Martin Gotink #202)
19
+ * Coverage file is only read in when the specified external file exists. (Benjamin Fleischer, #156)
20
+ * Metrics are configured to default values before the user config is loaded (Benjamin Fleischer, #156, #78)
21
+
14
22
  ### [4.7.3 / 2014-02-09](https://github.com/metricfu/metric_fu/compare/v4.7.2...v4.7.3)
15
23
 
16
24
  * Fixes
data/README.md CHANGED
@@ -122,8 +122,8 @@ in your .metrics file add the below to run pre-generated metrics
122
122
  ```ruby
123
123
  MetricFu::Configuration.run do |config|
124
124
  config.configure_metric(:rcov) do |rcov|
125
- rcov.enabled = true
126
- rcov.external = File.expand_path("coverage/rcov/rcov.txt", Dir.pwd)
125
+ rcov.coverage_file = MetricFu.run_path.join("coverage/rcov/rcov.txt")
126
+ rcov.enable
127
127
  rcov.activate
128
128
  end
129
129
  end
@@ -164,13 +164,16 @@ SimpleCov.formatter = SimpleCov::Formatter::MultiFormatter[
164
164
  SimpleCov.start
165
165
  ```
166
166
 
167
+ Additionally, the `coverage_file` path must be specified as above
168
+ and must exist.
169
+
167
170
  ## Compatibility
168
171
 
169
172
  * It is currently testing on MRI (>= 1.9.3), JRuby (19 mode), and Rubinius (19 mode). Ruby 1.8 is no longer supported.
170
173
 
171
174
  * For 1.8.7 support, see version 3.0.0 for partial support, or 2.1.3.7.18.1 (where [Semantic Versioning](http://semver.org/) goes to die)
172
175
 
173
- * MetricFu no longer runs any of the analyzed code. For code coverage, You may still use rcov metrics as documented below
176
+ * MetricFu no longer runs any of the analyzed code. For code coverage, You may still use rcov metrics as documented above
174
177
 
175
178
  * The Cane, Flog, and Rails Best Practices metrics are disabled when Ripper is not available
176
179
 
@@ -0,0 +1 @@
1
+ 9a3c76074181ca4ec770f1a52f652268e44af10648cf82cb641672d2075d92133751ad275ad1ba417c473ba8095d872df762eb379e2e48fd38ce1db06b4ea1e7
@@ -3,14 +3,8 @@ source 'https://rubygems.org'
3
3
  #to use, from the app root run
4
4
  # export BUNDLE_GEMFILE=$PWD/gemfiles/Gemfile.travis
5
5
  # when done, unset BUNDLE_GEMFILE
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
6
 
7
+ # for 1.9.2 support because of https://github.com/railsbp/rails_best_practices/blob/master/rails_best_practices.gemspec
14
8
  gem 'activesupport', '~> 3.2'
15
9
 
16
10
  eval_gemfile File.expand_path('../../Gemfile', __FILE__)
@@ -96,16 +96,20 @@ module MetricFu
96
96
  yield MetricFu.configuration
97
97
  end
98
98
 
99
- def configure_metric(name)
99
+ def self.configure_metric(name)
100
100
  yield MetricFu::Metric.get_metric(name)
101
101
  end
102
102
 
103
+ def configure_metric(name, &block)
104
+ self.class.configure_metric(name, &block)
105
+ end
106
+
103
107
  def configure_metrics
104
108
  MetricFu::Io::FileSystem.set_directories
105
109
  MetricFu::Metric.metrics.each do |metric|
106
110
  if block_given?
107
111
  yield metric
108
- elsif !metric_manually_configured?(metric)
112
+ else
109
113
  metric.enabled = false
110
114
  metric.enable
111
115
  end
@@ -113,14 +117,6 @@ module MetricFu
113
117
  end
114
118
  end
115
119
 
116
- # TODO: Remove this method. If we run configure_metrics
117
- # and it disabled rcov, we shouldn't have to worry here
118
- # that rcov is a special case that can only be enabled
119
- # manually
120
- def metric_manually_configured?(metric)
121
- [:rcov].include?(metric.name)
122
- end
123
-
124
120
  # TODO: Reconsider method name/behavior, as it really adds a formatter
125
121
  def configure_formatter(format, output = nil)
126
122
  @formatters << MetricFu::Formatter.class_for(format).new(output: output)
@@ -81,6 +81,7 @@ module MetricFu
81
81
 
82
82
  Dir.glob(File.join(MetricFu.metrics_dir, '**/init.rb')).each{|init_file|require(init_file)}
83
83
 
84
+ MetricFu.configuration.configure_metrics
84
85
  load_user_configuration
85
86
 
86
87
  MetricFu.lib_require { 'reporter' }
@@ -6,11 +6,16 @@ module MetricFu
6
6
  end
7
7
 
8
8
  def default_run_options
9
- { :environment => 'test',
10
- :test_files => Dir['{spec,test}/**/*_{spec,test}.rb'],
11
- :rcov_opts => rcov_opts,
12
- :external => nil
13
- }
9
+ {
10
+ :environment => 'test',
11
+ :test_files => Dir['{spec,test}/**/*_{spec,test}.rb'],
12
+ :rcov_opts => rcov_opts,
13
+ :external => nil,
14
+ }
15
+ end
16
+
17
+ def coverage_file=(coverage_file)
18
+ configured_run_options.update(:external => coverage_file)
14
19
  end
15
20
 
16
21
  def has_graph?
@@ -18,13 +23,26 @@ module MetricFu
18
23
  end
19
24
 
20
25
  def enable
21
- MetricFu.configuration.mf_debug("rcov is not available. See README")
26
+ if external_coverage_file?
27
+ super
28
+ else
29
+ mf_debug("RCov is not available. See README")
30
+ end
22
31
  end
23
32
 
24
33
  def activate
25
34
  super
26
35
  end
27
36
 
37
+ def external_coverage_file?
38
+ if coverage_file = run_options[:external]
39
+ File.exist?(coverage_file) ||
40
+ mf_log("Configured RCov file #{coverage_file.inspect} does not exist")
41
+ else
42
+ false
43
+ end
44
+ end
45
+
28
46
  private
29
47
 
30
48
  def rcov_opts
@@ -1,5 +1,6 @@
1
1
  MetricFu.lib_require { 'utility' }
2
2
  MetricFu.lib_require { 'calculate' }
3
+ MetricFu.data_structures_require { 'line_numbers' }
3
4
 
4
5
  module MetricFu
5
6
 
@@ -45,6 +46,7 @@ module MetricFu
45
46
  end
46
47
 
47
48
  def default_command
49
+ require 'rake'
48
50
  reset_output_location
49
51
  test_files = FileList[*options[:test_files]].join(' ')
50
52
  rcov_opts = options[:rcov_opts].join(' ')
@@ -144,8 +146,9 @@ module MetricFu
144
146
  end
145
147
  end
146
148
 
149
+ # We never run rcov anymore
147
150
  def run_rcov?
148
- !(options[:external])
151
+ false
149
152
  end
150
153
 
151
154
  def load_output
@@ -153,17 +156,13 @@ module MetricFu
153
156
  end
154
157
 
155
158
  def output_file
156
- if run_rcov?
157
- default_output_file
158
- else
159
- options.fetch(:external)
160
- end
159
+ options.fetch(:external)
161
160
  end
162
161
 
162
+ # Only used if run_rcov? is true
163
163
  def default_output_file
164
- File.join(metric_directory, 'rcov.txt')
164
+ output_file || File.join(metric_directory, 'rcov.txt')
165
165
  end
166
166
 
167
-
168
167
  end
169
168
  end
@@ -23,6 +23,7 @@ module MetricFu
23
23
  def analyze
24
24
  @matches = @output.chomp.split("\n\n").map{|m| m.split("\n") }
25
25
  @matches = @matches.map do |match|
26
+ break {} if zero_warnings?(match)
26
27
  file_path = match.shift.split(' -- ').first
27
28
  file_path = file_path.gsub('"', ' ').strip
28
29
  code_smells = match.map do |smell|
@@ -115,5 +116,8 @@ module MetricFu
115
116
  '-n'
116
117
  end
117
118
 
119
+ def zero_warnings?(match)
120
+ match.last == "0 total warnings"
121
+ end
118
122
  end
119
123
  end
@@ -17,7 +17,7 @@ module MetricFu
17
17
  @output = MetricFu::Utility.strip_escape_codes(@output)
18
18
  @matches = @output.chomp.split("\n").map{|m| m.split(" - ") }
19
19
  total = @matches.pop
20
- @matches.reject! {|array| array.empty? }
20
+ @matches.reject! {|array| array.size < 2 }
21
21
  @matches.map! do |match|
22
22
  file, line = match[0].split(':')
23
23
  problem = match[1]
@@ -1,4 +1,3 @@
1
- MetricFu.configure
2
1
  module MetricFu
3
2
  class Run
4
3
  def initialize
@@ -45,12 +44,10 @@ module MetricFu
45
44
  end
46
45
  end
47
46
  def configure_metric(metric, metric_options)
48
- MetricFu::Configuration.run do |config|
49
- config.configure_metric(metric) do |metric|
50
- metric_options.each do |option, value|
51
- mf_log "Setting #{metric} option #{option} to #{value}"
52
- metric.public_send("#{option}=", value)
53
- end
47
+ MetricFu::Configuration.configure_metric(metric) do |metric|
48
+ metric_options.each do |option, value|
49
+ mf_log "Setting #{metric} option #{option} to #{value}"
50
+ metric.public_send("#{option}=", value)
54
51
  end
55
52
  end
56
53
  end
@@ -1,3 +1,3 @@
1
1
  module MetricFu
2
- VERSION = '4.7.3'
2
+ VERSION = '4.7.4'
3
3
  end
@@ -212,6 +212,7 @@ describe MetricFu::Configuration do
212
212
  load_metric 'rcov'
213
213
  expect(MetricFu::Metric.get_metric(:rcov).run_options).to eq(
214
214
  { :environment => 'test',
215
+ :external => nil,
215
216
  :test_files => Dir['{spec,test}/**/*_{spec,test}.rb'],
216
217
  :rcov_opts => [
217
218
  "--sort coverage",
@@ -223,7 +224,7 @@ describe MetricFu::Configuration do
223
224
  '--include-file "\Aapp,\Alib"',
224
225
  "-Ispec"
225
226
  ],
226
- :external => nil}
227
+ }
227
228
  )
228
229
  end
229
230
 
@@ -1,4 +1,5 @@
1
1
  require "spec_helper"
2
+ MetricFu.metrics_require { 'rcov/rcov_grapher' }
2
3
 
3
4
  describe RcovGrapher do
4
5
  before :each do
@@ -15,8 +15,16 @@ describe MetricFu::ReekGenerator do
15
15
 
16
16
  #TODO review tested output
17
17
  describe "analyze method" do
18
+
18
19
  before :each do
19
- @lines = <<-HERE
20
+ MetricFu::Configuration.run {}
21
+ allow(File).to receive(:directory?).and_return(true)
22
+ @reek = MetricFu::ReekGenerator.new
23
+ end
24
+
25
+ context "with reek warnings" do
26
+ before :each do
27
+ @lines = <<-HERE
20
28
  "app/controllers/activity_reports_controller.rb" -- 4 warnings:
21
29
  ActivityReportsController#authorize_user calls current_user.primary_site_ids multiple times (Duplication)
22
30
  ActivityReportsController#authorize_user calls params[id] multiple times (Duplication)
@@ -32,43 +40,55 @@ LinkTargetsController#authorize_user calls current_user.role multiple times (Dup
32
40
  "app/controllers/newline_controller.rb" -- 1 warnings:
33
41
  NewlineController#some_method calls current_user.<< "new line\n" multiple times (Duplication)
34
42
  HERE
35
- MetricFu::Configuration.run {}
36
- allow(File).to receive(:directory?).and_return(true)
37
- reek = MetricFu::ReekGenerator.new
38
- reek.instance_variable_set(:@output, @lines)
39
- @matches = reek.analyze
43
+ @reek.instance_variable_set(:@output, @lines)
44
+ @matches = @reek.analyze
45
+ end
46
+
47
+ it "should find the code smell's method name" do
48
+ smell = @matches.first[:code_smells].first
49
+ expect(smell[:method]).to eq("ActivityReportsController#authorize_user")
50
+ end
51
+
52
+ it "should find the code smell's type" do
53
+ smell = @matches[1][:code_smells].first
54
+ expect(smell[:type]).to eq("Nested Iterators")
55
+ end
56
+
57
+ it "should find the code smell's message" do
58
+ smell = @matches[1][:code_smells].first
59
+ expect(smell[:message]).to eq("is nested")
60
+ end
61
+
62
+ it "should find the code smell's type" do
63
+ smell = @matches.first
64
+ expect(smell[:file_path]).to eq("app/controllers/activity_reports_controller.rb")
65
+ end
66
+
67
+ it "should NOT insert nil smells into the array when there's a newline in the method call" do
68
+ expect(@matches.last[:code_smells]).to eq(@matches.last[:code_smells].compact)
69
+ expect(@matches.last).to eq({:file_path=>"app/controllers/newline_controller.rb",
70
+ :code_smells=>[{:type=>"Duplication",
71
+ :method=>"\"",
72
+ :message=>"multiple times"}]})
73
+ # Note: hopefully a temporary solution until I figure out how to deal with newlines in the method call more effectively -Jake 5/11/2009
74
+ end
40
75
  end
41
76
 
42
- it "should find the code smell's method name" do
43
- smell = @matches.first[:code_smells].first
44
- expect(smell[:method]).to eq("ActivityReportsController#authorize_user")
45
- end
77
+ context "without reek warnings" do
78
+ before :each do
79
+ @lines = <<-HERE
46
80
 
47
- it "should find the code smell's type" do
48
- smell = @matches[1][:code_smells].first
49
- expect(smell[:type]).to eq("Nested Iterators")
50
- end
51
-
52
- it "should find the code smell's message" do
53
- smell = @matches[1][:code_smells].first
54
- expect(smell[:message]).to eq("is nested")
55
- end
56
-
57
- it "should find the code smell's type" do
58
- smell = @matches.first
59
- expect(smell[:file_path]).to eq("app/controllers/activity_reports_controller.rb")
60
- end
81
+ 0 total warnings
82
+ HERE
83
+ @reek.instance_variable_set(:@output, @lines)
84
+ @matches = @reek.analyze
85
+ end
61
86
 
62
- it "should NOT insert nil smells into the array when there's a newline in the method call" do
63
- expect(@matches.last[:code_smells]).to eq(@matches.last[:code_smells].compact)
64
- expect(@matches.last).to eq({:file_path=>"app/controllers/newline_controller.rb",
65
- :code_smells=>[{:type=>"Duplication",
66
- :method=>"\"",
67
- :message=>"multiple times"}]})
68
- # Note: hopefully a temporary solution until I figure out how to deal with newlines in the method call more effectively -Jake 5/11/2009
87
+ it "returns empty analysis" do
88
+ expect(@matches).to eq({})
89
+ end
69
90
  end
70
91
  end
71
-
72
92
  end
73
93
 
74
94
  describe MetricFu::ReekGenerator do
@@ -18,4 +18,65 @@ describe MetricFu::RoodiGenerator do
18
18
  roodi.emit
19
19
  end
20
20
  end
21
+
22
+ describe "analyze" do
23
+ context "when it has multiple failures" do
24
+ before :each do
25
+ lines = <<-HERE
26
+
27
+ Running Roodi checks
28
+ ./app/models/some_model.rb:14 - Found = in conditional. It should probably be an ==
29
+ lib/some_file.rb:53 - Rescue block should not be empty.
30
+
31
+ Checked 65 files
32
+ HERE
33
+
34
+ roodi = MetricFu::RoodiGenerator.new
35
+ roodi.instance_variable_set(:@output, lines)
36
+ @matches = roodi.analyze
37
+ end
38
+
39
+ it "should find all problems" do
40
+ problem_count = @matches[:problems].size
41
+ expect(problem_count).to eq(2)
42
+ end
43
+
44
+ it "should find the file of the problem" do
45
+ problem = @matches[:problems].first
46
+ expect(problem[:file]).to eq("./app/models/some_model.rb")
47
+ end
48
+
49
+ it "should find the line of the problem" do
50
+ problem = @matches[:problems].first
51
+ expect(problem[:line]).to eq("14")
52
+ end
53
+
54
+ it "should find the description of the problem" do
55
+ problem = @matches[:problems].first
56
+ expect(problem[:problem]).to eq("Found = in conditional. It should probably be an ==")
57
+ end
58
+ end
59
+ end
60
+
61
+ context "when it has no failures" do
62
+ before :each do
63
+ lines = <<-HERE
64
+
65
+ Running Roodi checks
66
+
67
+ Checked 42 files
68
+ Found 0 errors.
69
+
70
+ HERE
71
+
72
+ roodi = MetricFu::RoodiGenerator.new
73
+ roodi.instance_variable_set(:@output, lines)
74
+ @matches = roodi.analyze
75
+ end
76
+
77
+ it "should have no problems" do
78
+ problem_count = @matches[:problems].size
79
+ expect(problem_count).to eq(0)
80
+ end
81
+ end
21
82
  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: 4.7.3
4
+ version: 4.7.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jake Scruggs
@@ -49,7 +49,7 @@ cert_chain:
49
49
  dWphdUtxcjhoS0RMdTRLK3F1Q0dqWC82TEw2CldPTno5dlQ2aDA1M2tIWllN
50
50
  cmQ0R3MvTmRhQTR0SlN4cmhabFhkYWpBbS8wdkFPekxJcVVISFFrM1IwdGY3
51
51
  YVkKZC93PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
52
- date: 2014-02-09 00:00:00.000000000 Z
52
+ date: 2014-02-16 00:00:00.000000000 Z
53
53
  dependencies:
54
54
  - !ruby/object:Gem::Dependency
55
55
  name: flay
@@ -309,6 +309,7 @@ files:
309
309
  - AUTHORS
310
310
  - CONTRIBUTING.md
311
311
  - CONTRIBUTORS
312
+ - DEV.md
312
313
  - Gemfile
313
314
  - Gemfile.devtools
314
315
  - Guardfile
@@ -342,6 +343,7 @@ files:
342
343
  - checksum/metric_fu-4.7.0.gem.sha512
343
344
  - checksum/metric_fu-4.7.1.gem.sha512
344
345
  - checksum/metric_fu-4.7.2.gem.sha512
346
+ - checksum/metric_fu-4.7.3.gem.sha512
345
347
  - config/roodi_config.yml
346
348
  - gem_tasks/build.rake
347
349
  - gemfiles/Gemfile.travis
metadata.gz.sig CHANGED
Binary file