rubocop-rspec 1.16.0 → 1.17.0

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,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: da531fd6da6c4bc5ffa7012451f5d496e876621d
4
- data.tar.gz: 68cf66d909464963445c3d5edff27f434bea6d5c
3
+ metadata.gz: 920ff6aef932dcc189cf4a9b36a4da113414e514
4
+ data.tar.gz: 924b473a982bea7b74862f9d38c7adebd54b0d15
5
5
  SHA512:
6
- metadata.gz: 4b97442d8f7fa551ffd4c85f76ca2bdfea664bc09a5ca5f3580f70c5c4f498da522017ef6a02b48caa0b8c8b9c6925f1edbfaf3f524265a6808b1cc01746732e
7
- data.tar.gz: 4f228565a1e5842f9332b4af0dbd02084dc4203ab58c0f3f888560ac385af243ed66b4789596e621d669bdf1da1bdb3dd664f0d094981f54b525668b2fcc07a8
6
+ metadata.gz: 95f9ed3893655f17e5d78fbe03decd86deb93fab86db2599f2848795c035eeea9e4347df6b3700f3cc6e31599bd76e37ab4ab57477a9c17b9cf462c479bafb9a
7
+ data.tar.gz: ad2e034857001d8fd654008c96446fb48641dde3787a2ace21709005c2c185f8fa2a370a11e7dca03d42ccb428f1d110de574eaf286bf17447f92b8bc08dd2c5
data/CHANGELOG.md CHANGED
@@ -2,6 +2,11 @@
2
2
 
3
3
  ## Master (Unreleased)
4
4
 
5
+ ## 1.17.0 (2017-09-14)
6
+
7
+ * Add `RSpec/Capybara` namespace including the first cop for feature specs: `Capybara/FeatureMethods`. ([@rspeicher][])
8
+ * Update to RuboCop 0.50.0. ([@bquorning][])
9
+
5
10
  ## 1.16.0 (2017-09-06)
6
11
 
7
12
  * Add `RSpec/FactoryGirl` namespace including the first cop for factories: `FactoryGirl/DynamicAttributeDefinedStatically`. ([@jonatas][])
@@ -26,7 +31,7 @@
26
31
 
27
32
  ## 1.15.0 (2017-03-24)
28
33
 
29
- * Add `RSpec/DescribeSymbol` cop. ([@tsigo][])
34
+ * Add `RSpec/DescribeSymbol` cop. ([@rspeicher][])
30
35
  * Fix error when `RSpec/OverwritingSetup` and `RSpec/ScatteredLet` analyzed empty example groups. ([@backus][])
31
36
 
32
37
  ## 1.14.0 (2017-03-24)
@@ -233,7 +238,7 @@
233
238
  [@redross]: https://github.com/redross
234
239
  [@cfabianski]: https://github.com/cfabianski
235
240
  [@dgollahon]: https://github.com/dgollahon
236
- [@tsigo]: https://github.com/tsigo
241
+ [@rspeicher]: https://github.com/rspeicher
237
242
  [@jonatas]: https://github.com/jonatas
238
243
  [@pocke]: https://github.com/pocke
239
244
  [@bmorrall]: https:/github.com/bmorrall
data/config/default.yml CHANGED
@@ -325,7 +325,12 @@ RSpec/VoidExpect:
325
325
  Enabled: true
326
326
  StyleGuide: http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/VoidExpect
327
327
 
328
+ Capybara/FeatureMethods:
329
+ Description: Checks for consistent method usage in feature specs.
330
+ Enabled: true
331
+ StyleGuide: http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/Capybara/FeatureMethods
332
+
328
333
  FactoryGirl/DynamicAttributeDefinedStatically:
329
334
  Description: Prefer declaring dynamic attribute values in a block.
330
335
  Enabled: true
331
- StyleGuide: http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/FactoryGirl/DynamicAttributeDefinedStatically
336
+ StyleGuide: http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/FactoryGirl/DynamicAttributeDefinedStatically
data/lib/rubocop-rspec.rb CHANGED
@@ -17,6 +17,7 @@ require 'rubocop/rspec/example'
17
17
  require 'rubocop/rspec/hook'
18
18
  require 'rubocop/cop/rspec/cop'
19
19
  require 'rubocop/rspec/align_let_brace'
20
+ require 'rubocop/rspec/capybara'
20
21
  require 'rubocop/rspec/factory_girl'
21
22
 
22
23
  RuboCop::RSpec::Inject.defaults!
@@ -28,6 +29,7 @@ require 'rubocop/cop/rspec/any_instance'
28
29
  require 'rubocop/cop/rspec/around_block'
29
30
  require 'rubocop/cop/rspec/be_eql'
30
31
  require 'rubocop/cop/rspec/before_after_all'
32
+ require 'rubocop/cop/rspec/capybara/feature_methods'
31
33
  require 'rubocop/cop/rspec/describe_class'
32
34
  require 'rubocop/cop/rspec/describe_method'
33
35
  require 'rubocop/cop/rspec/describe_symbol'
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module RSpec
6
+ module Capybara
7
+ # Checks for consistent method usage in feature specs.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # feature 'User logs in' do
12
+ # given(:user) { User.new }
13
+ #
14
+ # background do
15
+ # visit new_session_path
16
+ # end
17
+ #
18
+ # scenario 'with OAuth' do
19
+ # # ...
20
+ # end
21
+ # end
22
+ #
23
+ # # good
24
+ # describe 'User logs in' do
25
+ # let(:user) { User.new }
26
+ #
27
+ # before do
28
+ # visit new_session_path
29
+ # end
30
+ #
31
+ # it 'with OAuth' do
32
+ # # ...
33
+ # end
34
+ # end
35
+ class FeatureMethods < Cop
36
+ MSG = 'Use `%s` instead of `%s`.'.freeze
37
+
38
+ # https://git.io/v7Kwr
39
+ MAP = {
40
+ background: :before,
41
+ scenario: :it,
42
+ xscenario: :xit,
43
+ given: :let,
44
+ given!: :let!,
45
+ feature: :describe
46
+ }.freeze
47
+
48
+ def_node_matcher :feature_method?, <<-PATTERN
49
+ (send {(const nil :RSpec) nil} ${:#{MAP.keys.join(' :')}} ...)
50
+ PATTERN
51
+
52
+ def on_send(node)
53
+ feature_method?(node) do |match|
54
+ add_offense(node, :selector, format(MSG, MAP[match], match))
55
+ end
56
+ end
57
+
58
+ def autocorrect(node)
59
+ lambda do |corrector|
60
+ corrector.replace(node.loc.selector, MAP[node.method_name].to_s)
61
+ end
62
+ end
63
+ end
64
+ end
65
+ end
66
+ end
67
+ end
@@ -40,7 +40,7 @@ module RuboCop
40
40
  key_parts = [example.metadata, example.implementation]
41
41
 
42
42
  if example.definition.method_name == :its
43
- key_parts << example.definition.method_args
43
+ key_parts << example.definition.arguments
44
44
  end
45
45
 
46
46
  key_parts
@@ -0,0 +1,7 @@
1
+ module RuboCop
2
+ module RSpec
3
+ # RuboCop Capybara project namespace
4
+ module Capybara
5
+ end
6
+ end
7
+ end
@@ -4,8 +4,8 @@ module RuboCop
4
4
  module RSpec
5
5
  # Builds a YAML config file from two config hashes
6
6
  class ConfigFormatter
7
- NAMESPACES = /^(#{Regexp.union('RSpec', 'FactoryGirl')})/
8
- STYLE_GUIDE_BASE_URL = 'http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/'.freeze
7
+ NAMESPACES = /^(#{Regexp.union('RSpec', 'Capybara', 'FactoryGirl')})/
8
+ STYLE_GUIDE_BASE_URL = 'http://www.rubydoc.info/gems/rubocop-rspec/RuboCop/Cop/RSpec/'.freeze
9
9
 
10
10
  def initialize(config, descriptions)
11
11
  @config = config
@@ -22,7 +22,7 @@ module RuboCop
22
22
  cops.each_with_object(config.dup) do |cop, unified|
23
23
  unified[cop] = config.fetch(cop)
24
24
  .merge(descriptions.fetch(cop))
25
- .merge('StyleGuide' => STYLE_GUIDE_BASE_URL + cop)
25
+ .merge('StyleGuide' => STYLE_GUIDE_BASE_URL + cop.sub('RSpec/', ''))
26
26
  end
27
27
  end
28
28
 
@@ -42,7 +42,7 @@ module RuboCop
42
42
  end
43
43
 
44
44
  def scope_argument
45
- node.method_args.first
45
+ node.send_node.first_argument
46
46
  end
47
47
  end
48
48
  end
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module RSpec
5
5
  # Version information for the RSpec RuboCop plugin.
6
6
  module Version
7
- STRING = '1.16.0'.freeze
7
+ STRING = '1.17.0'.freeze
8
8
  end
9
9
  end
10
10
  end
@@ -1,15 +1,13 @@
1
- # encoding: utf-8
2
-
3
1
  $LOAD_PATH.unshift File.expand_path('../lib', __FILE__)
4
2
  require 'rubocop/rspec/version'
5
3
 
6
4
  Gem::Specification.new do |spec|
7
5
  spec.name = 'rubocop-rspec'
8
6
  spec.summary = 'Code style checking for RSpec files'
9
- spec.description = <<-end_description
7
+ spec.description = <<-DESCRIPTION
10
8
  Code style checking for RSpec files.
11
9
  A plugin for the RuboCop code style enforcing & linting tool.
12
- end_description
10
+ DESCRIPTION
13
11
  spec.homepage = 'http://github.com/backus/rubocop-rspec'
14
12
  spec.authors = ['John Backus', 'Ian MacLeod', 'Nils Gemeinhardt']
15
13
  spec.email = [
@@ -34,7 +32,7 @@ Gem::Specification.new do |spec|
34
32
  spec.test_files = spec.files.grep(%r{^spec/})
35
33
  spec.extra_rdoc_files = ['MIT-LICENSE.md', 'README.md']
36
34
 
37
- spec.add_runtime_dependency 'rubocop', '>= 0.49.0'
35
+ spec.add_runtime_dependency 'rubocop', '>= 0.50.0'
38
36
 
39
37
  spec.add_development_dependency 'rake'
40
38
  spec.add_development_dependency 'rspec', '>= 3.4'
@@ -6,10 +6,11 @@ RSpec.describe 'config/default.yml' do
6
6
  let(:cop_names) do
7
7
  namespaces = {
8
8
  'rspec' => 'RSpec',
9
+ 'capybara' => 'Capybara',
9
10
  'factory_girl' => 'FactoryGirl'
10
11
  }
11
12
  glob = SpecHelper::ROOT.join('lib', 'rubocop', 'cop',
12
- 'rspec', '{,factory_girl/}*.rb')
13
+ 'rspec', '{capybara/,,factory_girl/}*.rb')
13
14
  cop_names =
14
15
  Pathname.glob(glob).map do |file|
15
16
  file_name = file.basename('.rb').to_s
@@ -0,0 +1,52 @@
1
+ RSpec.describe RuboCop::Cop::RSpec::Capybara::FeatureMethods do
2
+ subject(:cop) { described_class.new }
3
+
4
+ it 'flags violations for `background`' do
5
+ expect_offense(<<-RUBY)
6
+ background do; end
7
+ ^^^^^^^^^^ Use `before` instead of `background`.
8
+ RUBY
9
+ end
10
+
11
+ it 'flags violations for `scenario`' do
12
+ expect_offense(<<-RUBY)
13
+ scenario 'Foo' do; end
14
+ ^^^^^^^^ Use `it` instead of `scenario`.
15
+ RUBY
16
+ end
17
+
18
+ it 'flags violations for `xscenario`' do
19
+ expect_offense(<<-RUBY)
20
+ RSpec.xscenario 'Foo' do; end
21
+ ^^^^^^^^^ Use `xit` instead of `xscenario`.
22
+ RUBY
23
+ end
24
+
25
+ it 'flags violations for `given`' do
26
+ expect_offense(<<-RUBY)
27
+ given(:foo) { :foo }
28
+ ^^^^^ Use `let` instead of `given`.
29
+ RUBY
30
+ end
31
+
32
+ it 'flags violations for `given!`' do
33
+ expect_offense(<<-RUBY)
34
+ given!(:foo) { :foo }
35
+ ^^^^^^ Use `let!` instead of `given!`.
36
+ RUBY
37
+ end
38
+
39
+ it 'flags violations for `feature`' do
40
+ expect_offense(<<-RUBY)
41
+ RSpec.feature 'Foo' do; end
42
+ ^^^^^^^ Use `describe` instead of `feature`.
43
+ RUBY
44
+ end
45
+
46
+ include_examples 'autocorrect', 'background { }', 'before { }'
47
+ include_examples 'autocorrect', 'scenario { }', 'it { }'
48
+ include_examples 'autocorrect', 'xscenario { }', 'xit { }'
49
+ include_examples 'autocorrect', 'given(:foo) { }', 'let(:foo) { }'
50
+ include_examples 'autocorrect', 'given!(:foo) { }', 'let!(:foo) { }'
51
+ include_examples 'autocorrect', 'RSpec.feature { }', 'RSpec.describe { }'
52
+ end
@@ -140,7 +140,6 @@ RSpec.describe RuboCop::Cop::RSpec::ExpectActual, :config do
140
140
 
141
141
  it 'ignores rspec-rails routing specs' do
142
142
  inspect_source(
143
- cop,
144
143
  'expect(get: "/foo").to be_routeable',
145
144
  'spec/routing/foo_spec.rb'
146
145
  )
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  RSpec.describe RuboCop::Cop::RSpec::HookArgument, :config do
4
2
  subject(:cop) { described_class.new(config) }
5
3
 
@@ -1,5 +1,3 @@
1
- # encoding: utf-8
2
-
3
1
  RSpec.describe RuboCop::Cop::RSpec::ItBehavesLike, :config do
4
2
  subject(:cop) { described_class.new(config) }
5
3
 
@@ -77,7 +77,7 @@ RSpec.describe RuboCop::Cop::RSpec::LetBeforeExamples do
77
77
  end
78
78
 
79
79
  it 'does not encounter an error when handling an empty describe' do
80
- expect { inspect_source(cop, 'RSpec.describe(User) do end', 'a_spec.rb') }
80
+ expect { inspect_source('RSpec.describe(User) do end', 'a_spec.rb') }
81
81
  .not_to raise_error
82
82
  end
83
83
  end
@@ -163,7 +163,7 @@ RSpec.describe RuboCop::Cop::RSpec::MultipleExpectations, :config do
163
163
  end
164
164
 
165
165
  it 'generates a todo based on the worst violation' do
166
- inspect_source(cop, <<-RUBY, 'spec/foo_spec.rb')
166
+ inspect_source(<<-RUBY, 'spec/foo_spec.rb')
167
167
  describe Foo do
168
168
  it 'uses expect twice' do
169
169
  expect(foo).to eq(bar)
@@ -29,7 +29,7 @@ RSpec.describe RuboCop::Cop::RSpec::MultipleSubjects do
29
29
  end
30
30
  RUBY
31
31
 
32
- expect(autocorrect_source(cop, source, 'example_spec.rb')).to eql(source)
32
+ expect(autocorrect_source(source, 'example_spec.rb')).to eql(source)
33
33
  end
34
34
 
35
35
  it 'does not flag shared example groups' do
@@ -56,7 +56,7 @@ RSpec.describe RuboCop::Cop::RSpec::NestedGroups, :config do
56
56
  let(:cop_config) { { 'MaxNesting' => '1' } }
57
57
 
58
58
  it 'emits a deprecation warning' do
59
- expect { inspect_source(cop, 'describe(Foo) { }', 'foo_spec.rb') }
59
+ expect { inspect_source('describe(Foo) { }', 'foo_spec.rb') }
60
60
  .to output(
61
61
  'Configuration key `MaxNesting` for RSpec/NestedGroups is ' \
62
62
  "deprecated in favor of `Max`. Please use that instead.\n"
@@ -45,7 +45,7 @@ RSpec.describe RuboCop::Cop::RSpec::OverwritingSetup do
45
45
  end
46
46
 
47
47
  it 'does not encounter an error when handling an empty describe' do
48
- expect { inspect_source(cop, 'RSpec.describe(User) do end', 'a_spec.rb') }
48
+ expect { inspect_source('RSpec.describe(User) do end', 'a_spec.rb') }
49
49
  .not_to raise_error
50
50
  end
51
51
  end
@@ -25,7 +25,7 @@ RSpec.describe RuboCop::Cop::RSpec::ScatteredLet do
25
25
  end
26
26
 
27
27
  it 'does not encounter an error when handling an empty describe' do
28
- expect { inspect_source(cop, 'RSpec.describe(User) do end', 'a_spec.rb') }
28
+ expect { inspect_source('RSpec.describe(User) do end', 'a_spec.rb') }
29
29
  .not_to raise_error
30
30
  end
31
31
  end
@@ -1,6 +1,6 @@
1
1
  RSpec.shared_examples 'autocorrect' do |original, corrected|
2
2
  it "autocorrects `#{original}` to `#{corrected}`" do
3
- autocorrected = autocorrect_source(cop, original, 'spec/foo_spec.rb')
3
+ autocorrected = autocorrect_source(original, 'spec/foo_spec.rb')
4
4
 
5
5
  expect(autocorrected).to eql(corrected)
6
6
  end
@@ -1,6 +1,6 @@
1
1
  RSpec.shared_examples 'detects style' do |source, style, filename: 'x_spec.rb'|
2
2
  it 'generates a todo based on the detected style' do
3
- inspect_source(cop, source, filename)
3
+ inspect_source(source, filename)
4
4
 
5
5
  expect(cop.config_to_allow_offenses).to eq('EnforcedStyle' => style)
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-rspec
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.16.0
4
+ version: 1.17.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - John Backus
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2017-09-06 00:00:00.000000000 Z
13
+ date: 2017-09-14 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rubocop
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - ">="
20
20
  - !ruby/object:Gem::Version
21
- version: 0.49.0
21
+ version: 0.50.0
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- version: 0.49.0
28
+ version: 0.50.0
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: rake
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -108,6 +108,7 @@ files:
108
108
  - lib/rubocop/cop/rspec/around_block.rb
109
109
  - lib/rubocop/cop/rspec/be_eql.rb
110
110
  - lib/rubocop/cop/rspec/before_after_all.rb
111
+ - lib/rubocop/cop/rspec/capybara/feature_methods.rb
111
112
  - lib/rubocop/cop/rspec/cop.rb
112
113
  - lib/rubocop/cop/rspec/describe_class.rb
113
114
  - lib/rubocop/cop/rspec/describe_method.rb
@@ -157,6 +158,7 @@ files:
157
158
  - lib/rubocop/cop/rspec/void_expect.rb
158
159
  - lib/rubocop/rspec.rb
159
160
  - lib/rubocop/rspec/align_let_brace.rb
161
+ - lib/rubocop/rspec/capybara.rb
160
162
  - lib/rubocop/rspec/concept.rb
161
163
  - lib/rubocop/rspec/config_formatter.rb
162
164
  - lib/rubocop/rspec/description_extractor.rb
@@ -181,6 +183,7 @@ files:
181
183
  - spec/rubocop/cop/rspec/around_block_spec.rb
182
184
  - spec/rubocop/cop/rspec/be_eql_spec.rb
183
185
  - spec/rubocop/cop/rspec/before_after_all_spec.rb
186
+ - spec/rubocop/cop/rspec/capybara/feature_methods_spec.rb
184
187
  - spec/rubocop/cop/rspec/cop_spec.rb
185
188
  - spec/rubocop/cop/rspec/describe_class_spec.rb
186
189
  - spec/rubocop/cop/rspec/describe_method_spec.rb
@@ -274,6 +277,7 @@ test_files:
274
277
  - spec/rubocop/cop/rspec/around_block_spec.rb
275
278
  - spec/rubocop/cop/rspec/be_eql_spec.rb
276
279
  - spec/rubocop/cop/rspec/before_after_all_spec.rb
280
+ - spec/rubocop/cop/rspec/capybara/feature_methods_spec.rb
277
281
  - spec/rubocop/cop/rspec/cop_spec.rb
278
282
  - spec/rubocop/cop/rspec/describe_class_spec.rb
279
283
  - spec/rubocop/cop/rspec/describe_method_spec.rb