rubocop-rails_deprecation 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: 50c57a07baf6ba0d3d701e8b399394b240e0303f60ea4db9f790b02fa62b8fe4
4
- data.tar.gz: 76a9afe9155e2154810e512e3a2e657c0f6df2a142f6c55724c261a3cf62099f
3
+ metadata.gz: 8cd931c5484f2340724c62e6027b6b9cb42fb5a66556a73a8b9776510f5bef53
4
+ data.tar.gz: 6aa4dcb475684c260b069c098dfab8fe9f59ec644ba4f0a883b2a63105cd21e0
5
5
  SHA512:
6
- metadata.gz: 21378a6e0eb10d8f9ce8f472ab0cf002eaaf12514e3f22b29be8667b30a0eea162801e5fc686cf94afabcb3ee6bea63f0e25d23327e7cf458a116e28a4d35522
7
- data.tar.gz: '07901cc6b3f6b5e0aa0cc5dd1c0a2eb4dad61195af75fa94e99061c6c3a647bab8852426334000f381e2f348ef3d78a4090b6d41b6834434a79772142c05871b'
6
+ metadata.gz: 0b221fc6c392b527f86c59eac7841781fe3c9fe94815451596c3b2134f01709accb3fae86befc3c92fd53fe2b3df106718fe2d8b435a737bfc4f06d328b6d9eb
7
+ data.tar.gz: 954e9a81b8c16d01ea55412123c9a8b72254379c01331ebd4309b9dd0e6e9c9a937a44ec3e6bf0417cbf5ca9dfc36456c710a689e52fd7fe63af4e4121d6990f
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.6.0 - 2022-04-10
6
+
7
+ ### Added
8
+
9
+ - Add RailsDeprecation/WhereNot cop.
10
+
5
11
  ## 0.5.0 - 2022-04-10
6
12
 
7
13
  ### Changed
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- rubocop-rails_deprecation (0.5.0)
4
+ rubocop-rails_deprecation (0.6.0)
5
5
  rubocop (>= 1.27)
6
6
 
7
7
  GEM
@@ -4,10 +4,20 @@ module RuboCop
4
4
  module Cop
5
5
  module RailsDeprecation
6
6
  class Base < ::RuboCop::Cop::Base
7
+ DEFAULT_MAXIMUM_TARGET_RAILS_VERSION = ::Float::INFINITY
8
+
7
9
  DEFAULT_MINIMUM_TARGET_RAILS_VERSION = 5.0
8
10
 
9
11
  class << self
10
- attr_writer :minimum_target_rails_version
12
+ attr_writer(
13
+ :maximum_target_rails_version,
14
+ :minimum_target_rails_version
15
+ )
16
+
17
+ # @return [Float]
18
+ def maximum_target_rails_version
19
+ @maximum_target_rails_version ||= DEFAULT_MAXIMUM_TARGET_RAILS_VERSION
20
+ end
11
21
 
12
22
  # @return [Float]
13
23
  def minimum_target_rails_version
@@ -18,7 +28,7 @@ module RuboCop
18
28
  # @param [Float] version
19
29
  # @return [Boolean]
20
30
  def support_target_rails_version?(version)
21
- minimum_target_rails_version <= version
31
+ (minimum_target_rails_version..maximum_target_rails_version).include?(version)
22
32
  end
23
33
  end
24
34
  end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module RailsDeprecation
6
+ # This cop identifies passing Hash with multiple elements to `where.not`.
7
+ #
8
+ # @example
9
+ #
10
+ # # bad
11
+ # where.not(key1: value1, key2: value2)
12
+ #
13
+ # # good
14
+ # where.not(key1: value1).where.not(key2: value2)
15
+ #
16
+ # # good
17
+ # where.not(key1: value1)
18
+ #
19
+ class WhereNot < Base
20
+ extend AutoCorrector
21
+
22
+ self.maximum_target_rails_version = 6.0
23
+
24
+ MSG = 'Use `where.not(key1: value1).where.not(key2: value2)` instead of `where.not(key1: value1, key2: value2)`.'
25
+
26
+ def_node_matcher :where_not_with_multiple_elements_hash?, <<~PATTERN
27
+ (send
28
+ (send _ :where) :not
29
+ ({ hash | kwargs }
30
+ (pair _ _)
31
+ (pair _ _)+))
32
+ PATTERN
33
+
34
+ def on_send(node)
35
+ return unless where_not_with_multiple_elements_hash?(node)
36
+
37
+ add_offense(node) do |corrector|
38
+ pairs = node.children[2].children
39
+ last_end_pos = pairs[0].location.expression.end_pos
40
+ pairs[1..].each do |pair|
41
+ corrector.remove(pair.location.expression.with(begin_pos: last_end_pos))
42
+ last_end_pos = pair.location.expression.end_pos
43
+ corrector.insert_after(node.location.expression, ".where.not(#{pair.source})")
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -2,3 +2,4 @@
2
2
 
3
3
  require_relative 'rails_deprecation/base'
4
4
  require_relative 'rails_deprecation/to_formatted_s'
5
+ require_relative 'rails_deprecation/where_not'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module RuboCop
4
4
  module RailsDeprecation
5
- VERSION = '0.5.0'
5
+ VERSION = '0.6.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-rails_deprecation
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
  - Ryo Nakamura
@@ -44,6 +44,7 @@ files:
44
44
  - lib/rubocop-rails_deprecation.rb
45
45
  - lib/rubocop/cop/rails_deprecation/base.rb
46
46
  - lib/rubocop/cop/rails_deprecation/to_formatted_s.rb
47
+ - lib/rubocop/cop/rails_deprecation/where_not.rb
47
48
  - lib/rubocop/cop/rails_deprecation_cops.rb
48
49
  - lib/rubocop/rails_deprecation.rb
49
50
  - lib/rubocop/rails_deprecation/inject.rb