rubocop-rails 2.8.1 → 2.9.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.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -0
  3. data/config/default.yml +33 -1
  4. data/lib/rubocop/cop/mixin/active_record_helper.rb +4 -3
  5. data/lib/rubocop/cop/mixin/enforce_superclass.rb +40 -0
  6. data/lib/rubocop/cop/mixin/index_method.rb +8 -11
  7. data/lib/rubocop/cop/rails/action_filter.rb +10 -14
  8. data/lib/rubocop/cop/rails/active_record_aliases.rb +13 -17
  9. data/lib/rubocop/cop/rails/active_record_callbacks_order.rb +17 -12
  10. data/lib/rubocop/cop/rails/active_record_override.rb +1 -1
  11. data/lib/rubocop/cop/rails/active_support_aliases.rb +12 -21
  12. data/lib/rubocop/cop/rails/after_commit_override.rb +1 -1
  13. data/lib/rubocop/cop/rails/application_controller.rb +3 -7
  14. data/lib/rubocop/cop/rails/application_job.rb +2 -1
  15. data/lib/rubocop/cop/rails/application_mailer.rb +2 -7
  16. data/lib/rubocop/cop/rails/application_record.rb +2 -7
  17. data/lib/rubocop/cop/rails/arel_star.rb +41 -0
  18. data/lib/rubocop/cop/rails/assert_not.rb +8 -10
  19. data/lib/rubocop/cop/rails/attribute_default_block_value.rb +90 -0
  20. data/lib/rubocop/cop/rails/belongs_to.rb +9 -18
  21. data/lib/rubocop/cop/rails/blank.rb +27 -27
  22. data/lib/rubocop/cop/rails/bulk_change_table.rb +1 -1
  23. data/lib/rubocop/cop/rails/content_tag.rb +16 -16
  24. data/lib/rubocop/cop/rails/create_table_with_timestamps.rb +2 -1
  25. data/lib/rubocop/cop/rails/date.rb +10 -11
  26. data/lib/rubocop/cop/rails/default_scope.rb +11 -4
  27. data/lib/rubocop/cop/rails/delegate.rb +9 -9
  28. data/lib/rubocop/cop/rails/delegate_allow_blank.rb +7 -8
  29. data/lib/rubocop/cop/rails/dynamic_find_by.rb +12 -11
  30. data/lib/rubocop/cop/rails/enum_hash.rb +11 -10
  31. data/lib/rubocop/cop/rails/enum_uniqueness.rb +2 -1
  32. data/lib/rubocop/cop/rails/environment_comparison.rb +18 -14
  33. data/lib/rubocop/cop/rails/exit.rb +4 -10
  34. data/lib/rubocop/cop/rails/file_path.rb +4 -3
  35. data/lib/rubocop/cop/rails/find_by.rb +13 -13
  36. data/lib/rubocop/cop/rails/find_by_id.rb +12 -21
  37. data/lib/rubocop/cop/rails/find_each.rb +16 -14
  38. data/lib/rubocop/cop/rails/has_and_belongs_to_many.rb +3 -2
  39. data/lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb +3 -2
  40. data/lib/rubocop/cop/rails/helper_instance_variable.rb +2 -2
  41. data/lib/rubocop/cop/rails/http_positional_arguments.rb +19 -21
  42. data/lib/rubocop/cop/rails/http_status.rb +7 -9
  43. data/lib/rubocop/cop/rails/ignored_skip_action_filter_option.rb +8 -6
  44. data/lib/rubocop/cop/rails/index_by.rb +2 -1
  45. data/lib/rubocop/cop/rails/index_with.rb +2 -1
  46. data/lib/rubocop/cop/rails/inquiry.rb +4 -3
  47. data/lib/rubocop/cop/rails/inverse_of.rb +3 -2
  48. data/lib/rubocop/cop/rails/lexically_scoped_action_filter.rb +17 -15
  49. data/lib/rubocop/cop/rails/link_to_blank.rb +20 -22
  50. data/lib/rubocop/cop/rails/mailer_name.rb +19 -13
  51. data/lib/rubocop/cop/rails/match_route.rb +14 -13
  52. data/lib/rubocop/cop/rails/negate_include.rb +10 -8
  53. data/lib/rubocop/cop/rails/not_null_column.rb +2 -1
  54. data/lib/rubocop/cop/rails/order_by_id.rb +1 -2
  55. data/lib/rubocop/cop/rails/output.rb +5 -2
  56. data/lib/rubocop/cop/rails/output_safety.rb +3 -2
  57. data/lib/rubocop/cop/rails/pick.rb +14 -12
  58. data/lib/rubocop/cop/rails/pluck.rb +6 -9
  59. data/lib/rubocop/cop/rails/pluck_id.rb +4 -6
  60. data/lib/rubocop/cop/rails/pluck_in_where.rb +7 -7
  61. data/lib/rubocop/cop/rails/pluralization_grammar.rb +10 -14
  62. data/lib/rubocop/cop/rails/presence.rb +12 -13
  63. data/lib/rubocop/cop/rails/present.rb +30 -24
  64. data/lib/rubocop/cop/rails/rake_environment.rb +8 -10
  65. data/lib/rubocop/cop/rails/read_write_attribute.rb +12 -11
  66. data/lib/rubocop/cop/rails/redundant_allow_nil.rb +29 -31
  67. data/lib/rubocop/cop/rails/redundant_foreign_key.rb +9 -12
  68. data/lib/rubocop/cop/rails/redundant_receiver_in_with_options.rb +11 -10
  69. data/lib/rubocop/cop/rails/reflection_class_name.rb +3 -2
  70. data/lib/rubocop/cop/rails/refute_methods.rb +9 -10
  71. data/lib/rubocop/cop/rails/relative_date_constant.rb +16 -8
  72. data/lib/rubocop/cop/rails/render_inline.rb +2 -1
  73. data/lib/rubocop/cop/rails/render_plain_text.rb +9 -14
  74. data/lib/rubocop/cop/rails/request_referer.rb +7 -7
  75. data/lib/rubocop/cop/rails/reversible_migration.rb +2 -6
  76. data/lib/rubocop/cop/rails/safe_navigation.rb +11 -10
  77. data/lib/rubocop/cop/rails/safe_navigation_with_blank.rb +5 -10
  78. data/lib/rubocop/cop/rails/save_bang.rb +17 -20
  79. data/lib/rubocop/cop/rails/scope_args.rb +2 -1
  80. data/lib/rubocop/cop/rails/short_i18n.rb +7 -9
  81. data/lib/rubocop/cop/rails/skips_model_validations.rb +4 -4
  82. data/lib/rubocop/cop/rails/squished_sql_heredocs.rb +5 -6
  83. data/lib/rubocop/cop/rails/time_zone.rb +22 -20
  84. data/lib/rubocop/cop/rails/uniq_before_pluck.rb +4 -6
  85. data/lib/rubocop/cop/rails/unique_validation_without_index.rb +2 -2
  86. data/lib/rubocop/cop/rails/unknown_env.rb +2 -2
  87. data/lib/rubocop/cop/rails/validation.rb +15 -14
  88. data/lib/rubocop/cop/rails/where_equals.rb +94 -0
  89. data/lib/rubocop/cop/rails/where_exists.rb +8 -13
  90. data/lib/rubocop/cop/rails/where_not.rb +5 -16
  91. data/lib/rubocop/cop/rails_cops.rb +4 -0
  92. data/lib/rubocop/rails/schema_loader.rb +4 -4
  93. data/lib/rubocop/rails/schema_loader/schema.rb +1 -1
  94. data/lib/rubocop/rails/version.rb +5 -1
  95. metadata +19 -9
@@ -45,11 +45,13 @@ module RuboCop
45
45
  # # good
46
46
  # Model.distinct.pluck(:id)
47
47
  #
48
- class UniqBeforePluck < RuboCop::Cop::Cop
48
+ class UniqBeforePluck < Base
49
49
  include ConfigurableEnforcedStyle
50
50
  include RangeHelp
51
+ extend AutoCorrector
51
52
 
52
53
  MSG = 'Use `distinct` before `pluck`.'
54
+ RESTRICT_ON_SEND = %i[uniq distinct pluck].freeze
53
55
  NEWLINE = "\n"
54
56
  PATTERN = '[!^block (send (send %<type>s :pluck ...) ' \
55
57
  '${:uniq :distinct} ...)]'
@@ -69,11 +71,7 @@ module RuboCop
69
71
 
70
72
  return unless method
71
73
 
72
- add_offense(node, location: :selector)
73
- end
74
-
75
- def autocorrect(node)
76
- lambda do |corrector|
74
+ add_offense(node.loc.selector) do |corrector|
77
75
  method = node.method_name
78
76
 
79
77
  corrector.remove(dot_method_with_whitespace(method, node))
@@ -24,13 +24,13 @@ module RuboCop
24
24
  # # good - even if the schema does not have a unique index
25
25
  # validates :account, length: { minimum: MIN_LENGTH }
26
26
  #
27
- class UniqueValidationWithoutIndex < Cop
27
+ class UniqueValidationWithoutIndex < Base
28
28
  include ActiveRecordHelper
29
29
 
30
30
  MSG = 'Uniqueness validation should be with a unique index.'
31
+ RESTRICT_ON_SEND = %i[validates].freeze
31
32
 
32
33
  def on_send(node)
33
- return unless node.method?(:validates)
34
34
  return unless uniqueness_part(node)
35
35
  return if condition_part?(node)
36
36
  return unless schema
@@ -17,7 +17,7 @@ module RuboCop
17
17
  # # good
18
18
  # Rails.env.production?
19
19
  # Rails.env == 'production'
20
- class UnknownEnv < Cop
20
+ class UnknownEnv < Base
21
21
  MSG = 'Unknown environment `%<name>s`.'
22
22
  MSG_SIMILAR = 'Unknown environment `%<name>s`. ' \
23
23
  'Did you mean `%<similar>s`?'
@@ -41,7 +41,7 @@ module RuboCop
41
41
 
42
42
  def on_send(node)
43
43
  unknown_environment_predicate?(node) do |name|
44
- add_offense(node, location: :selector, message: message(name))
44
+ add_offense(node.loc.selector, message: message(name))
45
45
  end
46
46
 
47
47
  unknown_environment_equal?(node) do |str_node|
@@ -32,7 +32,9 @@ module RuboCop
32
32
  # validates :foo, size: true
33
33
  # validates :foo, uniqueness: true
34
34
  #
35
- class Validation < Cop
35
+ class Validation < Base
36
+ extend AutoCorrector
37
+
36
38
  MSG = 'Prefer the new style validations `%<prefer>s` over ' \
37
39
  '`%<current>s`.'
38
40
 
@@ -50,22 +52,20 @@ module RuboCop
50
52
  uniqueness
51
53
  ].freeze
52
54
 
53
- DENYLIST = TYPES.map { |p| "validates_#{p}_of".to_sym }.freeze
55
+ RESTRICT_ON_SEND = TYPES.map { |p| "validates_#{p}_of".to_sym }.freeze
54
56
  ALLOWLIST = TYPES.map { |p| "validates :column, #{p}: value" }.freeze
55
57
 
56
58
  def on_send(node)
57
- return unless !node.receiver && DENYLIST.include?(node.method_name)
59
+ return if node.receiver
58
60
 
59
- add_offense(node, location: :selector)
60
- end
61
+ range = node.loc.selector
61
62
 
62
- def autocorrect(node)
63
- last_argument = node.arguments.last
64
- return if !last_argument.literal? && !last_argument.splat_type? &&
65
- !frozen_array_argument?(last_argument)
63
+ add_offense(range, message: message(node)) do |corrector|
64
+ last_argument = node.arguments.last
65
+ return if !last_argument.literal? && !last_argument.splat_type? &&
66
+ !frozen_array_argument?(last_argument)
66
67
 
67
- lambda do |corrector|
68
- corrector.replace(node.loc.selector, 'validates')
68
+ corrector.replace(range, 'validates')
69
69
  correct_validate_type(corrector, node)
70
70
  end
71
71
  end
@@ -73,12 +73,13 @@ module RuboCop
73
73
  private
74
74
 
75
75
  def message(node)
76
- format(MSG, prefer: preferred_method(node.method_name),
77
- current: node.method_name)
76
+ method_name = node.method_name
77
+
78
+ format(MSG, prefer: preferred_method(method_name), current: method_name)
78
79
  end
79
80
 
80
81
  def preferred_method(method)
81
- ALLOWLIST[DENYLIST.index(method.to_sym)]
82
+ ALLOWLIST[RESTRICT_ON_SEND.index(method.to_sym)]
82
83
  end
83
84
 
84
85
  def correct_validate_type(corrector, node)
@@ -0,0 +1,94 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Rails
6
+ # This cop identifies places where manually constructed SQL
7
+ # in `where` can be replaced with `where(attribute: value)`.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # User.where('name = ?', 'Gabe')
12
+ # User.where('name = :name', name: 'Gabe')
13
+ # User.where('name IS NULL')
14
+ # User.where('name IN (?)', ['john', 'jane'])
15
+ # User.where('name IN (:names)', names: ['john', 'jane'])
16
+ #
17
+ # # good
18
+ # User.where(name: 'Gabe')
19
+ # User.where(name: nil)
20
+ # User.where(name: ['john', 'jane'])
21
+ class WhereEquals < Base
22
+ include RangeHelp
23
+ extend AutoCorrector
24
+
25
+ MSG = 'Use `%<good_method>s` instead of manually constructing SQL.'
26
+ RESTRICT_ON_SEND = %i[where].freeze
27
+
28
+ def_node_matcher :where_method_call?, <<~PATTERN
29
+ {
30
+ (send _ :where (array $str_type? $_ ?))
31
+ (send _ :where $str_type? $_ ?)
32
+ }
33
+ PATTERN
34
+
35
+ def on_send(node)
36
+ where_method_call?(node) do |template_node, value_node|
37
+ value_node = value_node.first
38
+
39
+ range = offense_range(node)
40
+
41
+ column_and_value = extract_column_and_value(template_node, value_node)
42
+ return unless column_and_value
43
+
44
+ good_method = build_good_method(*column_and_value)
45
+ message = format(MSG, good_method: good_method)
46
+
47
+ add_offense(range, message: message) do |corrector|
48
+ corrector.replace(range, good_method)
49
+ end
50
+ end
51
+ end
52
+
53
+ EQ_ANONYMOUS_RE = /\A([\w.]+)\s+=\s+\?\z/.freeze # column = ?
54
+ IN_ANONYMOUS_RE = /\A([\w.]+)\s+IN\s+\(\?\)\z/i.freeze # column IN (?)
55
+ EQ_NAMED_RE = /\A([\w.]+)\s+=\s+:(\w+)\z/.freeze # column = :column
56
+ IN_NAMED_RE = /\A([\w.]+)\s+IN\s+\(:(\w+)\)\z/i.freeze # column IN (:column)
57
+ IS_NULL_RE = /\A([\w.]+)\s+IS\s+NULL\z/i.freeze # column IS NULL
58
+
59
+ private
60
+
61
+ def offense_range(node)
62
+ range_between(node.loc.selector.begin_pos, node.loc.expression.end_pos)
63
+ end
64
+
65
+ def extract_column_and_value(template_node, value_node)
66
+ value =
67
+ case template_node.value
68
+ when EQ_ANONYMOUS_RE, IN_ANONYMOUS_RE
69
+ value_node.source
70
+ when EQ_NAMED_RE, IN_NAMED_RE
71
+ return unless value_node.hash_type?
72
+
73
+ pair = value_node.pairs.find { |p| p.key.value.to_sym == Regexp.last_match(2).to_sym }
74
+ pair.value.source
75
+ when IS_NULL_RE
76
+ 'nil'
77
+ else
78
+ return
79
+ end
80
+
81
+ [Regexp.last_match(1), value]
82
+ end
83
+
84
+ def build_good_method(column, value)
85
+ if column.include?('.')
86
+ "where('#{column}' => #{value})"
87
+ else
88
+ "where(#{column}: #{value})"
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -36,10 +36,12 @@ module RuboCop
36
36
  # User.where('name = ?', 'john').exists?
37
37
  # user.posts.where(published: true).exists?
38
38
  # User.where('length(name) > 10').exists?
39
- class WhereExists < Cop
39
+ class WhereExists < Base
40
40
  include ConfigurableEnforcedStyle
41
+ extend AutoCorrector
41
42
 
42
43
  MSG = 'Prefer `%<good_method>s` over `%<bad_method>s`.'
44
+ RESTRICT_ON_SEND = %i[exists?].freeze
43
45
 
44
46
  def_node_matcher :where_exists_call?, <<~PATTERN
45
47
  (send (send _ :where $...) :exists?)
@@ -54,19 +56,12 @@ module RuboCop
54
56
  return unless convertable_args?(args)
55
57
 
56
58
  range = correction_range(node)
57
- message = format(MSG, good_method: build_good_method(args), bad_method: range.source)
58
- add_offense(node, location: range, message: message)
59
- end
60
- end
61
-
62
- def autocorrect(node)
63
- args = find_offenses(node)
59
+ good_method = build_good_method(args)
60
+ message = format(MSG, good_method: good_method, bad_method: range.source)
64
61
 
65
- lambda do |corrector|
66
- corrector.replace(
67
- correction_range(node),
68
- build_good_method(args)
69
- )
62
+ add_offense(range, message: message) do |corrector|
63
+ corrector.replace(range, good_method)
64
+ end
70
65
  end
71
66
  end
72
67
 
@@ -21,10 +21,12 @@ module RuboCop
21
21
  # User.where.not(name: nil)
22
22
  # User.where.not(name: ['john', 'jane'])
23
23
  #
24
- class WhereNot < Cop
24
+ class WhereNot < Base
25
25
  include RangeHelp
26
+ extend AutoCorrector
26
27
 
27
28
  MSG = 'Use `%<good_method>s` instead of manually constructing negated SQL in `where`.'
29
+ RESTRICT_ON_SEND = %i[where].freeze
28
30
 
29
31
  def_node_matcher :where_method_call?, <<~PATTERN
30
32
  {
@@ -45,21 +47,8 @@ module RuboCop
45
47
  good_method = build_good_method(*column_and_value)
46
48
  message = format(MSG, good_method: good_method)
47
49
 
48
- add_offense(node, location: range, message: message)
49
- end
50
- end
51
-
52
- def autocorrect(node)
53
- where_method_call?(node) do |template_node, value_node|
54
- value_node = value_node.first
55
-
56
- lambda do |corrector|
57
- range = offense_range(node)
58
-
59
- column, value = *extract_column_and_value(template_node, value_node)
60
- replacement = build_good_method(column, value)
61
-
62
- corrector.replace(range, replacement)
50
+ add_offense(range, message: message) do |corrector|
51
+ corrector.replace(range, good_method)
63
52
  end
64
53
  end
65
54
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require_relative 'mixin/active_record_helper'
4
+ require_relative 'mixin/enforce_superclass'
4
5
  require_relative 'mixin/index_method'
5
6
  require_relative 'mixin/target_rails_version'
6
7
 
@@ -14,7 +15,9 @@ require_relative 'rails/application_controller'
14
15
  require_relative 'rails/application_job'
15
16
  require_relative 'rails/application_mailer'
16
17
  require_relative 'rails/application_record'
18
+ require_relative 'rails/arel_star'
17
19
  require_relative 'rails/assert_not'
20
+ require_relative 'rails/attribute_default_block_value'
18
21
  require_relative 'rails/belongs_to'
19
22
  require_relative 'rails/blank'
20
23
  require_relative 'rails/bulk_change_table'
@@ -83,5 +86,6 @@ require_relative 'rails/uniq_before_pluck'
83
86
  require_relative 'rails/unique_validation_without_index'
84
87
  require_relative 'rails/unknown_env'
85
88
  require_relative 'rails/validation'
89
+ require_relative 'rails/where_equals'
86
90
  require_relative 'rails/where_exists'
87
91
  require_relative 'rails/where_not'
@@ -13,15 +13,15 @@ module RuboCop
13
13
  #
14
14
  # @return [Schema, nil]
15
15
  def load(target_ruby_version)
16
- return @schema if defined?(@schema)
16
+ return @load if defined?(@load)
17
17
 
18
- @schema = load!(target_ruby_version)
18
+ @load = load!(target_ruby_version)
19
19
  end
20
20
 
21
21
  def reset!
22
- return unless instance_variable_defined?(:@schema)
22
+ return unless instance_variable_defined?(:@load)
23
23
 
24
- remove_instance_variable(:@schema)
24
+ remove_instance_variable(:@load)
25
25
  end
26
26
 
27
27
  def db_schema_path
@@ -98,7 +98,7 @@ module RuboCop
98
98
  end
99
99
 
100
100
  def each_content(node, &block)
101
- return enum_for(__method__, node) unless block_given?
101
+ return enum_for(__method__, node) unless block
102
102
 
103
103
  case node.body&.type
104
104
  when :begin
@@ -4,7 +4,11 @@ module RuboCop
4
4
  module Rails
5
5
  # This module holds the RuboCop Rails version information.
6
6
  module Version
7
- STRING = '2.8.1'
7
+ STRING = '2.9.0'
8
+
9
+ def self.document_version
10
+ STRING.match('\d+\.\d+').to_s
11
+ end
8
12
  end
9
13
  end
10
14
  end
metadata CHANGED
@@ -1,16 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.8.1
4
+ version: 2.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bozhidar Batsov
8
8
  - Jonas Arvidsson
9
9
  - Yuji Nakayama
10
- autorequire:
10
+ autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2020-09-15 00:00:00.000000000 Z
13
+ date: 2020-12-08 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -46,14 +46,20 @@ dependencies:
46
46
  requirements:
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: 0.87.0
49
+ version: 0.90.0
50
+ - - "<"
51
+ - !ruby/object:Gem::Version
52
+ version: '2.0'
50
53
  type: :runtime
51
54
  prerelease: false
52
55
  version_requirements: !ruby/object:Gem::Requirement
53
56
  requirements:
54
57
  - - ">="
55
58
  - !ruby/object:Gem::Version
56
- version: 0.87.0
59
+ version: 0.90.0
60
+ - - "<"
61
+ - !ruby/object:Gem::Version
62
+ version: '2.0'
57
63
  description: |
58
64
  Automatic Rails code style checking tool.
59
65
  A RuboCop extension focused on enforcing Rails best practices and coding conventions.
@@ -70,6 +76,7 @@ files:
70
76
  - config/default.yml
71
77
  - lib/rubocop-rails.rb
72
78
  - lib/rubocop/cop/mixin/active_record_helper.rb
79
+ - lib/rubocop/cop/mixin/enforce_superclass.rb
73
80
  - lib/rubocop/cop/mixin/index_method.rb
74
81
  - lib/rubocop/cop/mixin/target_rails_version.rb
75
82
  - lib/rubocop/cop/rails/action_filter.rb
@@ -82,7 +89,9 @@ files:
82
89
  - lib/rubocop/cop/rails/application_job.rb
83
90
  - lib/rubocop/cop/rails/application_mailer.rb
84
91
  - lib/rubocop/cop/rails/application_record.rb
92
+ - lib/rubocop/cop/rails/arel_star.rb
85
93
  - lib/rubocop/cop/rails/assert_not.rb
94
+ - lib/rubocop/cop/rails/attribute_default_block_value.rb
86
95
  - lib/rubocop/cop/rails/belongs_to.rb
87
96
  - lib/rubocop/cop/rails/blank.rb
88
97
  - lib/rubocop/cop/rails/bulk_change_table.rb
@@ -151,6 +160,7 @@ files:
151
160
  - lib/rubocop/cop/rails/unique_validation_without_index.rb
152
161
  - lib/rubocop/cop/rails/unknown_env.rb
153
162
  - lib/rubocop/cop/rails/validation.rb
163
+ - lib/rubocop/cop/rails/where_equals.rb
154
164
  - lib/rubocop/cop/rails/where_exists.rb
155
165
  - lib/rubocop/cop/rails/where_not.rb
156
166
  - lib/rubocop/cop/rails_cops.rb
@@ -166,9 +176,9 @@ metadata:
166
176
  homepage_uri: https://docs.rubocop.org/rubocop-rails/
167
177
  changelog_uri: https://github.com/rubocop-hq/rubocop-rails/blob/master/CHANGELOG.md
168
178
  source_code_uri: https://github.com/rubocop-hq/rubocop-rails/
169
- documentation_uri: https://docs.rubocop.org/rubocop-rails/
179
+ documentation_uri: https://docs.rubocop.org/rubocop-rails/2.9/
170
180
  bug_tracker_uri: https://github.com/rubocop-hq/rubocop-rails/issues
171
- post_install_message:
181
+ post_install_message:
172
182
  rdoc_options: []
173
183
  require_paths:
174
184
  - lib
@@ -183,8 +193,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
183
193
  - !ruby/object:Gem::Version
184
194
  version: '0'
185
195
  requirements: []
186
- rubygems_version: 3.1.4
187
- signing_key:
196
+ rubygems_version: 3.2.0.rc.2
197
+ signing_key:
188
198
  specification_version: 4
189
199
  summary: Automatic Rails code style checking tool.
190
200
  test_files: []