rubocop-rails 2.9.0 → 2.9.1

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: b997fb5d9995a5c7db5d151e13b86cf0dbd2b27f890e9ad116d11fab30a1b7e0
4
- data.tar.gz: 91c6b0a496bcbe9c92b0833944b301e893c9f9ee6e75db0fb393436c9869dc81
3
+ metadata.gz: 7a4f37840f94de73bdcc15533ef3e5e95ee265a79fd0486b5e813ee926421d17
4
+ data.tar.gz: b2fee8ee1727d8cf33c1d0568f12378f1115d1ae00aa52295656d232de8c59af
5
5
  SHA512:
6
- metadata.gz: d59f7cbb8d1f311bcdda8eda6c1c55d5cbc772993cac726f6d16d1947ca324b95354e24770140d3fce1a860cd2b4995d55c78e946c21ed85c9f4964b4d908794
7
- data.tar.gz: 891fc8896d26423f80edd9db48e75c065c3e46ccb03a534f182dd3af928b19165e7d2d259cd842b1222a729ba4e234d461e370327db4bb520673ab61071e0e89
6
+ metadata.gz: d4ceba3963546eaa994918f85d1558223de162f66de58ac48d1e466c2b126facf7548053c00fcbfcd4d05e2d1225eed32e15e6ff921627cfb2a14014119df757
7
+ data.tar.gz: af84d0f778766239432a0b599e21c0e6671b02739769570b2c8655df5f32770f796978747d02a321a5ad1ea2c009d60b7ec3e93b09f669106ad9305a4cc50c3e
@@ -30,7 +30,7 @@ module RuboCop
30
30
  def on_send(node)
31
31
  return unless node.receiver&.send_type?
32
32
  return unless SCOPE_METHODS.include?(node.receiver.method_name)
33
- return if method_chain(node).any? { |m| ignored?(m) }
33
+ return if ignored?(node)
34
34
 
35
35
  range = node.loc.selector
36
36
  add_offense(range) do |corrector|
@@ -40,12 +40,9 @@ module RuboCop
40
40
 
41
41
  private
42
42
 
43
- def method_chain(node)
44
- node.each_node(:send).map(&:method_name)
45
- end
46
-
47
- def ignored?(relation_method)
48
- cop_config['IgnoredMethods'].include?(relation_method)
43
+ def ignored?(node)
44
+ method_chain = node.each_node(:send).map(&:method_name)
45
+ (cop_config['IgnoredMethods'].map(&:to_sym) & method_chain).any?
49
46
  end
50
47
  end
51
48
  end
@@ -13,6 +13,9 @@ module RuboCop
13
13
  # variable, consider moving the behaviour elsewhere, for
14
14
  # example to a model, decorator or presenter.
15
15
  #
16
+ # Provided that a class inherits `ActionView::Helpers::FormBuilder`,
17
+ # an offense will not be registered.
18
+ #
16
19
  # @example
17
20
  # # bad
18
21
  # def welcome_message
@@ -23,18 +26,41 @@ module RuboCop
23
26
  # def welcome_message(user)
24
27
  # "Hello #{user.name}"
25
28
  # end
29
+ #
30
+ # # good
31
+ # class MyFormBuilder < ActionView::Helpers::FormBuilder
32
+ # @template.do_something
33
+ # end
26
34
  class HelperInstanceVariable < Base
27
35
  MSG = 'Do not use instance variables in helpers.'
28
36
 
37
+ def_node_matcher :form_builder_class?, <<~PATTERN
38
+ (const
39
+ (const
40
+ (const nil? :ActionView) :Helpers) :FormBuilder)
41
+ PATTERN
42
+
29
43
  def on_ivar(node)
44
+ return if inherit_form_builder?(node)
45
+
30
46
  add_offense(node)
31
47
  end
32
48
 
33
49
  def on_ivasgn(node)
34
- return if node.parent.or_asgn_type?
50
+ return if node.parent.or_asgn_type? || inherit_form_builder?(node)
35
51
 
36
52
  add_offense(node.loc.name)
37
53
  end
54
+
55
+ private
56
+
57
+ def inherit_form_builder?(node)
58
+ node.each_ancestor(:class) do |class_node|
59
+ return true if form_builder_class?(class_node.parent_class)
60
+ end
61
+
62
+ false
63
+ end
38
64
  end
39
65
  end
40
66
  end
@@ -13,11 +13,13 @@ module RuboCop
13
13
  # User.where('name IS NULL')
14
14
  # User.where('name IN (?)', ['john', 'jane'])
15
15
  # User.where('name IN (:names)', names: ['john', 'jane'])
16
+ # User.where('users.name = :name', name: 'Gabe')
16
17
  #
17
18
  # # good
18
19
  # User.where(name: 'Gabe')
19
20
  # User.where(name: nil)
20
21
  # User.where(name: ['john', 'jane'])
22
+ # User.where(users: { name: 'Gabe' })
21
23
  class WhereEquals < Base
22
24
  include RangeHelp
23
25
  extend AutoCorrector
@@ -68,7 +70,7 @@ module RuboCop
68
70
  when EQ_ANONYMOUS_RE, IN_ANONYMOUS_RE
69
71
  value_node.source
70
72
  when EQ_NAMED_RE, IN_NAMED_RE
71
- return unless value_node.hash_type?
73
+ return unless value_node&.hash_type?
72
74
 
73
75
  pair = value_node.pairs.find { |p| p.key.value.to_sym == Regexp.last_match(2).to_sym }
74
76
  pair.value.source
@@ -83,7 +85,9 @@ module RuboCop
83
85
 
84
86
  def build_good_method(column, value)
85
87
  if column.include?('.')
86
- "where('#{column}' => #{value})"
88
+ table, column = column.split('.')
89
+
90
+ "where(#{table}: { #{column}: #{value} })"
87
91
  else
88
92
  "where(#{column}: #{value})"
89
93
  end
@@ -4,7 +4,7 @@ module RuboCop
4
4
  module Rails
5
5
  # This module holds the RuboCop Rails version information.
6
6
  module Version
7
- STRING = '2.9.0'
7
+ STRING = '2.9.1'
8
8
 
9
9
  def self.document_version
10
10
  STRING.match('\d+\.\d+').to_s
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.9.0
4
+ version: 2.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-12-08 00:00:00.000000000 Z
13
+ date: 2020-12-16 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -193,7 +193,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
193
193
  - !ruby/object:Gem::Version
194
194
  version: '0'
195
195
  requirements: []
196
- rubygems_version: 3.2.0.rc.2
196
+ rubygems_version: 3.2.1
197
197
  signing_key:
198
198
  specification_version: 4
199
199
  summary: Automatic Rails code style checking tool.