rubocop-petal 0.5.0 → 0.6.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
  SHA256:
3
- metadata.gz: aa2179fb3df37d962557546e94f204ee9a8789d2850cda31a53e7375b47edb50
4
- data.tar.gz: dfeedd44694e75eab2c78f7205d93701a356378d147d6dca9e5adf68bf1e805f
3
+ metadata.gz: c7d73cfbe6b4f194f1c60d25235331cf7a08b04b516411efeabeafce9e6e7886
4
+ data.tar.gz: 193dd79a6efd61cdd2edbb5bfae7158497ca7cc2bb52da38b02dfecd776eadfa
5
5
  SHA512:
6
- metadata.gz: df124d64a0b69c1311c86e47393fd94379f89fac39d5f6752ec8af6f97df783764fcf581de9c5e11d79d5245bba37f8f07464d29d86f102c9b07056c610ffb8c
7
- data.tar.gz: dec1a550aa7fbfdfeae58457bd668d671b21a0db0933685d253c18408b913bde81ccbf0e7fbb6ab1b5966741a6d4b3590956fc2641a11a0fda40d55c9980bc9a
6
+ metadata.gz: 15ef827ea4cf56872e2c85178463e2d3a05a6a47411832439c81cb4dd9a9ff9221efb61603d2a9e6b38d5859fe0aa2745499bd1d98ef516169e1947065bf1ebb
7
+ data.tar.gz: 0c14a8c68e7af71afbd81cd827fdd76dfbcc8780e06ab7f1f2f662cc7409fe505b2afc05fa6260f18c6d3a1dd8df05176d51c965c71b68c4f75501abe4a9aa96
data/CHANGELOG.md CHANGED
@@ -2,15 +2,20 @@
2
2
 
3
3
  # main
4
4
 
5
- #v0.5.0
5
+ # v0.6.0
6
+
7
+ * Added cop `RSpec::SidekiqInline` ([#24](https://github.com/petalmd/rubocop-petal/pull/24))
8
+ * Remove cop `Rails/ValidateUniquenessCase` ([#21](https://github.com/petalmd/rubocop-petal/pull/21))
9
+
10
+ # v0.5.0
6
11
 
7
12
  * Added cop `Rails/ValidateUniquenessCase` ([#20](https://github.com/petalmd/rubocop-petal/pull/20))
8
13
 
9
- #v0.4.1
14
+ # v0.4.1
10
15
 
11
16
  * Fix typo default config SafeAutoCorrect RSpec/StubProducts ([#19](https://github.com/petalmd/rubocop-petal/pull/19))
12
17
 
13
- #v0.4.0
18
+ # v0.4.0
14
19
 
15
20
  * Added cop `RSpec/StubProducts` ([#18](https://github.com/petalmd/rubocop-petal/pull/18))
16
21
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubocop-petal (0.5.0)
4
+ rubocop-petal (0.6.0)
5
5
  rubocop (>= 1.7.0, < 2.0)
6
6
  rubocop-rails (~> 2.10)
7
7
 
@@ -22,7 +22,7 @@ GEM
22
22
  parallel (1.21.0)
23
23
  parser (3.0.3.2)
24
24
  ast (~> 2.4.1)
25
- rack (2.2.3)
25
+ rack (3.0.0)
26
26
  rainbow (3.0.0)
27
27
  rake (13.0.6)
28
28
  regexp_parser (2.2.0)
@@ -51,7 +51,7 @@ GEM
51
51
  unicode-display_width (>= 1.4.0, < 3.0)
52
52
  rubocop-ast (1.15.0)
53
53
  parser (>= 3.0.1.1)
54
- rubocop-rails (2.14.2)
54
+ rubocop-rails (2.15.2)
55
55
  activesupport (>= 4.2.0)
56
56
  rack (>= 1.1)
57
57
  rubocop (>= 1.7.0, < 2.0)
data/config/default.yml CHANGED
@@ -30,6 +30,13 @@ RSpec/CreateListMax:
30
30
  Include:
31
31
  - spec/**/*
32
32
 
33
+ RSpec/SidekiqInline:
34
+ Description: 'Prevent using `Sidekiq::Testing.inline!` in spec in favor of stubbing and calling it inline with `new.perform`.'
35
+ Enabled: pending
36
+ StyleGuide: https://github.com/mperham/sidekiq/issues/3495
37
+ Include:
38
+ - spec/**/*
39
+
33
40
  RSpec/StubProducts:
34
41
  Description: 'Suggest to use stub_products instead of veil/unveil_product.'
35
42
  Enabled: true
@@ -70,11 +77,3 @@ Rails/TableName:
70
77
  Chewy/ResetOnType:
71
78
  Description: 'Prevent using reset! methods on Chewy type class'
72
79
  Enabled: true
73
-
74
- Rails/ValidateUniquenessCase:
75
- Description: 'Enforce setting uniqueness case sensitive option.'
76
- Enabled: true
77
- SafeAutoCorrect: false
78
- StyleGuide: 'https://guides.rubyonrails.org/6_1_release_notes.html#active-record-notable-changes'
79
- Include:
80
- - app/models/**/*
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module RSpec
6
+ # Prevent using `Sidekiq::Testing.inline!` in spec.
7
+ # The method will execute inline every perform_async called.
8
+ # Must likely a spec want to test a specific worker and called it.
9
+ # If you don't need to execute it, consider using `have_enqueued_sidekiq_job`
10
+ # matcher.
11
+ #
12
+ # @example
13
+ # # bad
14
+ # Sidekiq::Testing.inline! do; end
15
+ #
16
+ # # good
17
+ # expect(MyWorker).to receive(:perform_async).with(some_id) do |id|
18
+ # MyWorker.new.perform(id)
19
+ # end
20
+ #
21
+ class SidekiqInline < Base
22
+ MSG = 'Stub `perform_async` and call inline worker with `new.perform`.'
23
+ RESTRICT_ON_SEND = [:inline!].freeze
24
+
25
+ def_node_matcher :sidekiq_inline?, <<~PATTERN
26
+ (send (const (const _ :Sidekiq) :Testing) :inline!)
27
+ PATTERN
28
+
29
+ def on_send(node)
30
+ return unless sidekiq_inline?(node)
31
+
32
+ add_offense(node)
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module Petal
5
- VERSION = '0.5.0'
5
+ VERSION = '0.6.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-petal
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jean-Francis Bastien
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-04-25 00:00:00.000000000 Z
11
+ date: 2022-09-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -44,7 +44,7 @@ dependencies:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '2.10'
47
- description:
47
+ description:
48
48
  email:
49
49
  - jfbastien@petalmd.com
50
50
  executables: []
@@ -75,9 +75,9 @@ files:
75
75
  - lib/rubocop/cop/rails/enum_prefix.rb
76
76
  - lib/rubocop/cop/rails/risky_activerecord_invocation.rb
77
77
  - lib/rubocop/cop/rails/table_name.rb
78
- - lib/rubocop/cop/rails/validate_uniqueness_case.rb
79
78
  - lib/rubocop/cop/rspec/authenticated_as.rb
80
79
  - lib/rubocop/cop/rspec/create_list_max.rb
80
+ - lib/rubocop/cop/rspec/sidekiq_inline.rb
81
81
  - lib/rubocop/cop/rspec/stub_products.rb
82
82
  - lib/rubocop/petal.rb
83
83
  - lib/rubocop/petal/inject.rb
@@ -90,7 +90,7 @@ metadata:
90
90
  homepage_uri: https://github.com/petalmd/rubocop-petal
91
91
  source_code_uri: https://github.com/petalmd/rubocop-petal
92
92
  rubygems_mfa_required: 'true'
93
- post_install_message:
93
+ post_install_message:
94
94
  rdoc_options: []
95
95
  require_paths:
96
96
  - lib
@@ -105,8 +105,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
105
105
  - !ruby/object:Gem::Version
106
106
  version: '0'
107
107
  requirements: []
108
- rubygems_version: 3.2.3
109
- signing_key:
108
+ rubygems_version: 3.0.3
109
+ signing_key:
110
110
  specification_version: 4
111
111
  summary: Petal custom cops
112
112
  test_files: []
@@ -1,89 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module RuboCop
4
- module Cop
5
- module Rails
6
- # Enforces to specify a case sensitive or case insensitive option
7
- # to the uniqueness validation.
8
- #
9
- # The default value in Rails 5 is `case_sensitive: true`. Which does not
10
- # reflect MySQL's default behavior. In Rails 6.1 the default value will be
11
- # `case_sensitive: false` to reflect MySQL's default behavior
12
- # (https://guides.rubyonrails.org/6_1_release_notes.html#active-record-notable-changes).
13
- #
14
- # # bad
15
- # validates :name, uniqueness: true
16
- # validates :name, uniqueness: { scope: :user_id }
17
- #
18
- # # good
19
- # validates :name, uniqueness: { case_sensitive: true }
20
- # validates :name, uniqueness: { scope: :user_id, case_sensitive: false }
21
- #
22
- class ValidateUniquenessCase < Base
23
- extend AutoCorrector
24
-
25
- # Don't force to add the `case_sensitive` option when
26
- # the default value is already `false` in Rails 6.
27
- MAXIMUM_RAILS_VERSION = 6.1
28
- MSG = 'Pass `case_sensitive: true|false` to uniqueness options.'
29
- RESTRICT_ON_SEND = %i[validates].freeze
30
-
31
- def_node_search :uniqueness?, <<~PATTERN
32
- (sym :uniqueness)
33
- PATTERN
34
-
35
- def_node_matcher :have_case_sensitive_options?, <<~PATTERN
36
- (pair (sym :case_sensitive) ${true false})
37
- PATTERN
38
-
39
- def on_send(node)
40
- return unless support_target_rails_version?
41
-
42
- uniqueness_options = match_uniqueness_options(node)
43
- return unless uniqueness_options
44
-
45
- uniqueness_child_options = uniqueness_options.children.last
46
-
47
- # When it's just `uniqueness: true`
48
- if uniqueness_child_options.boolean_type?
49
- boolean_uniqueness(uniqueness_options)
50
- return
51
- end
52
-
53
- case_sensitive_options = uniqueness_child_options.pairs.detect { |c| have_case_sensitive_options?(c) }
54
- hash_uniqueness_offense(uniqueness_options, case_sensitive_options)
55
- end
56
-
57
- private
58
-
59
- def match_uniqueness_options(node)
60
- node.children.last.children.detect do |c|
61
- # Skip if not a hash
62
- next if c.is_a?(Symbol)
63
-
64
- uniqueness?(c)
65
- end
66
- end
67
-
68
- def boolean_uniqueness(node)
69
- # When it's just `uniqueness: true`
70
- add_offense(node) do |corrector|
71
- corrector.replace(node, 'uniqueness: { case_sensitive: false }')
72
- end
73
- end
74
-
75
- def hash_uniqueness_offense(node, sensitive_options)
76
- return if sensitive_options
77
-
78
- add_offense(node) do |corrector|
79
- corrector.insert_after(node.loc.expression.adjust(end_pos: -2), ', case_sensitive: false')
80
- end
81
- end
82
-
83
- def support_target_rails_version?
84
- target_rails_version < MAXIMUM_RAILS_VERSION
85
- end
86
- end
87
- end
88
- end
89
- end