rubocop-rails 2.6.0 → 2.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -0
  3. data/config/default.yml +189 -6
  4. data/lib/rubocop/cop/mixin/active_record_helper.rb +12 -3
  5. data/lib/rubocop/cop/mixin/enforce_superclass.rb +40 -0
  6. data/lib/rubocop/cop/mixin/index_method.rb +25 -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 +148 -0
  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 +91 -0
  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 +20 -33
  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 +61 -0
  27. data/lib/rubocop/cop/rails/delegate.rb +10 -10
  28. data/lib/rubocop/cop/rails/delegate_allow_blank.rb +7 -8
  29. data/lib/rubocop/cop/rails/dynamic_find_by.rb +13 -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 +5 -4
  35. data/lib/rubocop/cop/rails/find_by.rb +13 -13
  36. data/lib/rubocop/cop/rails/find_by_id.rb +94 -0
  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 +4 -7
  40. data/lib/rubocop/cop/rails/helper_instance_variable.rb +4 -2
  41. data/lib/rubocop/cop/rails/http_positional_arguments.rb +25 -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 +11 -2
  45. data/lib/rubocop/cop/rails/index_with.rb +11 -2
  46. data/lib/rubocop/cop/rails/inquiry.rb +39 -0
  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 -20
  50. data/lib/rubocop/cop/rails/mailer_name.rb +86 -0
  51. data/lib/rubocop/cop/rails/match_route.rb +120 -0
  52. data/lib/rubocop/cop/rails/negate_include.rb +41 -0
  53. data/lib/rubocop/cop/rails/not_null_column.rb +2 -1
  54. data/lib/rubocop/cop/rails/order_by_id.rb +52 -0
  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 +21 -15
  58. data/lib/rubocop/cop/rails/pluck.rb +56 -0
  59. data/lib/rubocop/cop/rails/pluck_id.rb +56 -0
  60. data/lib/rubocop/cop/rails/pluck_in_where.rb +70 -0
  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 +9 -11
  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 +4 -3
  70. data/lib/rubocop/cop/rails/refute_methods.rb +9 -10
  71. data/lib/rubocop/cop/rails/relative_date_constant.rb +20 -9
  72. data/lib/rubocop/cop/rails/render_inline.rb +41 -0
  73. data/lib/rubocop/cop/rails/render_plain_text.rb +71 -0
  74. data/lib/rubocop/cop/rails/request_referer.rb +7 -7
  75. data/lib/rubocop/cop/rails/reversible_migration.rb +82 -7
  76. data/lib/rubocop/cop/rails/safe_navigation.rb +12 -11
  77. data/lib/rubocop/cop/rails/safe_navigation_with_blank.rb +5 -10
  78. data/lib/rubocop/cop/rails/save_bang.rb +19 -22
  79. data/lib/rubocop/cop/rails/scope_args.rb +2 -1
  80. data/lib/rubocop/cop/rails/short_i18n.rb +74 -0
  81. data/lib/rubocop/cop/rails/skips_model_validations.rb +46 -11
  82. data/lib/rubocop/cop/rails/squished_sql_heredocs.rb +82 -0
  83. data/lib/rubocop/cop/rails/time_zone.rb +22 -20
  84. data/lib/rubocop/cop/rails/uniq_before_pluck.rb +10 -10
  85. data/lib/rubocop/cop/rails/unique_validation_without_index.rb +18 -8
  86. data/lib/rubocop/cop/rails/unknown_env.rb +15 -4
  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 +126 -0
  90. data/lib/rubocop/cop/rails/where_not.rb +97 -0
  91. data/lib/rubocop/cop/rails_cops.rb +22 -0
  92. data/lib/rubocop/rails/schema_loader.rb +4 -4
  93. data/lib/rubocop/rails/schema_loader/schema.rb +5 -5
  94. data/lib/rubocop/rails/version.rb +5 -1
  95. metadata +37 -9
@@ -0,0 +1,97 @@
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.not(...)`.
8
+ #
9
+ # @example
10
+ # # bad
11
+ # User.where('name != ?', 'Gabe')
12
+ # User.where('name != :name', name: 'Gabe')
13
+ # User.where('name <> ?', 'Gabe')
14
+ # User.where('name <> :name', name: 'Gabe')
15
+ # User.where('name IS NOT NULL')
16
+ # User.where('name NOT IN (?)', ['john', 'jane'])
17
+ # User.where('name NOT IN (:names)', names: ['john', 'jane'])
18
+ #
19
+ # # good
20
+ # User.where.not(name: 'Gabe')
21
+ # User.where.not(name: nil)
22
+ # User.where.not(name: ['john', 'jane'])
23
+ #
24
+ class WhereNot < Base
25
+ include RangeHelp
26
+ extend AutoCorrector
27
+
28
+ MSG = 'Use `%<good_method>s` instead of manually constructing negated SQL in `where`.'
29
+ RESTRICT_ON_SEND = %i[where].freeze
30
+
31
+ def_node_matcher :where_method_call?, <<~PATTERN
32
+ {
33
+ (send _ :where (array $str_type? $_ ?))
34
+ (send _ :where $str_type? $_ ?)
35
+ }
36
+ PATTERN
37
+
38
+ def on_send(node)
39
+ where_method_call?(node) do |template_node, value_node|
40
+ value_node = value_node.first
41
+
42
+ range = offense_range(node)
43
+
44
+ column_and_value = extract_column_and_value(template_node, value_node)
45
+ return unless column_and_value
46
+
47
+ good_method = build_good_method(*column_and_value)
48
+ message = format(MSG, good_method: good_method)
49
+
50
+ add_offense(range, message: message) do |corrector|
51
+ corrector.replace(range, good_method)
52
+ end
53
+ end
54
+ end
55
+
56
+ NOT_EQ_ANONYMOUS_RE = /\A([\w.]+)\s+(?:!=|<>)\s+\?\z/.freeze # column != ?, column <> ?
57
+ NOT_IN_ANONYMOUS_RE = /\A([\w.]+)\s+NOT\s+IN\s+\(\?\)\z/i.freeze # column NOT IN (?)
58
+ NOT_EQ_NAMED_RE = /\A([\w.]+)\s+(?:!=|<>)\s+:(\w+)\z/.freeze # column != :column, column <> :column
59
+ NOT_IN_NAMED_RE = /\A([\w.]+)\s+NOT\s+IN\s+\(:(\w+)\)\z/i.freeze # column NOT IN (:column)
60
+ IS_NOT_NULL_RE = /\A([\w.]+)\s+IS\s+NOT\s+NULL\z/i.freeze # column IS NOT NULL
61
+
62
+ private
63
+
64
+ def offense_range(node)
65
+ range_between(node.loc.selector.begin_pos, node.loc.expression.end_pos)
66
+ end
67
+
68
+ def extract_column_and_value(template_node, value_node)
69
+ value =
70
+ case template_node.value
71
+ when NOT_EQ_ANONYMOUS_RE, NOT_IN_ANONYMOUS_RE
72
+ value_node.source
73
+ when NOT_EQ_NAMED_RE, NOT_IN_NAMED_RE
74
+ return unless value_node.hash_type?
75
+
76
+ pair = value_node.pairs.find { |p| p.key.value.to_sym == Regexp.last_match(2).to_sym }
77
+ pair.value.source
78
+ when IS_NOT_NULL_RE
79
+ 'nil'
80
+ else
81
+ return
82
+ end
83
+
84
+ [Regexp.last_match(1), value]
85
+ end
86
+
87
+ def build_good_method(column, value)
88
+ if column.include?('.')
89
+ "where.not('#{column}' => #{value})"
90
+ else
91
+ "where.not(#{column}: #{value})"
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
97
+ end
@@ -1,24 +1,30 @@
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
 
7
8
  require_relative 'rails/action_filter'
8
9
  require_relative 'rails/active_record_aliases'
10
+ require_relative 'rails/active_record_callbacks_order'
9
11
  require_relative 'rails/active_record_override'
10
12
  require_relative 'rails/active_support_aliases'
13
+ require_relative 'rails/after_commit_override'
11
14
  require_relative 'rails/application_controller'
12
15
  require_relative 'rails/application_job'
13
16
  require_relative 'rails/application_mailer'
14
17
  require_relative 'rails/application_record'
18
+ require_relative 'rails/arel_star'
15
19
  require_relative 'rails/assert_not'
20
+ require_relative 'rails/attribute_default_block_value'
16
21
  require_relative 'rails/belongs_to'
17
22
  require_relative 'rails/blank'
18
23
  require_relative 'rails/bulk_change_table'
19
24
  require_relative 'rails/content_tag'
20
25
  require_relative 'rails/create_table_with_timestamps'
21
26
  require_relative 'rails/date'
27
+ require_relative 'rails/default_scope'
22
28
  require_relative 'rails/delegate'
23
29
  require_relative 'rails/delegate_allow_blank'
24
30
  require_relative 'rails/dynamic_find_by'
@@ -28,6 +34,7 @@ require_relative 'rails/environment_comparison'
28
34
  require_relative 'rails/exit'
29
35
  require_relative 'rails/file_path'
30
36
  require_relative 'rails/find_by'
37
+ require_relative 'rails/find_by_id'
31
38
  require_relative 'rails/find_each'
32
39
  require_relative 'rails/has_and_belongs_to_many'
33
40
  require_relative 'rails/has_many_or_has_one_dependent'
@@ -37,13 +44,21 @@ require_relative 'rails/http_status'
37
44
  require_relative 'rails/ignored_skip_action_filter_option'
38
45
  require_relative 'rails/index_by'
39
46
  require_relative 'rails/index_with'
47
+ require_relative 'rails/inquiry'
40
48
  require_relative 'rails/inverse_of'
41
49
  require_relative 'rails/lexically_scoped_action_filter'
42
50
  require_relative 'rails/link_to_blank'
51
+ require_relative 'rails/mailer_name'
52
+ require_relative 'rails/match_route'
53
+ require_relative 'rails/negate_include'
43
54
  require_relative 'rails/not_null_column'
55
+ require_relative 'rails/order_by_id'
44
56
  require_relative 'rails/output'
45
57
  require_relative 'rails/output_safety'
46
58
  require_relative 'rails/pick'
59
+ require_relative 'rails/pluck'
60
+ require_relative 'rails/pluck_id'
61
+ require_relative 'rails/pluck_in_where'
47
62
  require_relative 'rails/pluralization_grammar'
48
63
  require_relative 'rails/presence'
49
64
  require_relative 'rails/present'
@@ -55,15 +70,22 @@ require_relative 'rails/redundant_receiver_in_with_options'
55
70
  require_relative 'rails/reflection_class_name'
56
71
  require_relative 'rails/refute_methods'
57
72
  require_relative 'rails/relative_date_constant'
73
+ require_relative 'rails/render_inline'
74
+ require_relative 'rails/render_plain_text'
58
75
  require_relative 'rails/request_referer'
59
76
  require_relative 'rails/reversible_migration'
60
77
  require_relative 'rails/safe_navigation'
61
78
  require_relative 'rails/safe_navigation_with_blank'
62
79
  require_relative 'rails/save_bang'
63
80
  require_relative 'rails/scope_args'
81
+ require_relative 'rails/short_i18n'
64
82
  require_relative 'rails/skips_model_validations'
83
+ require_relative 'rails/squished_sql_heredocs'
65
84
  require_relative 'rails/time_zone'
66
85
  require_relative 'rails/uniq_before_pluck'
67
86
  require_relative 'rails/unique_validation_without_index'
68
87
  require_relative 'rails/unknown_env'
69
88
  require_relative 'rails/validation'
89
+ require_relative 'rails/where_equals'
90
+ require_relative 'rails/where_exists'
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
@@ -97,14 +97,12 @@ module RuboCop
97
97
  end.compact
98
98
  end
99
99
 
100
- def each_content(node)
101
- return enum_for(__method__, node) unless block_given?
100
+ def each_content(node, &block)
101
+ return enum_for(__method__, node) unless block
102
102
 
103
103
  case node.body&.type
104
104
  when :begin
105
- node.body.children.each do |child|
106
- yield(child)
107
- end
105
+ node.body.children.each(&block)
108
106
  else
109
107
  yield(node.body)
110
108
  end
@@ -178,6 +176,8 @@ module RuboCop
178
176
  attr_reader :table_name
179
177
 
180
178
  def initialize(node)
179
+ super(node)
180
+
181
181
  @table_name = node.first_argument.value
182
182
  @columns, @expression = build_columns_or_expr(node.arguments[1])
183
183
  @unique = nil
@@ -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.6.0'
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.6.0
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-06-08 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.82.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.82.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,23 +76,29 @@ 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
76
83
  - lib/rubocop/cop/rails/active_record_aliases.rb
84
+ - lib/rubocop/cop/rails/active_record_callbacks_order.rb
77
85
  - lib/rubocop/cop/rails/active_record_override.rb
78
86
  - lib/rubocop/cop/rails/active_support_aliases.rb
87
+ - lib/rubocop/cop/rails/after_commit_override.rb
79
88
  - lib/rubocop/cop/rails/application_controller.rb
80
89
  - lib/rubocop/cop/rails/application_job.rb
81
90
  - lib/rubocop/cop/rails/application_mailer.rb
82
91
  - lib/rubocop/cop/rails/application_record.rb
92
+ - lib/rubocop/cop/rails/arel_star.rb
83
93
  - lib/rubocop/cop/rails/assert_not.rb
94
+ - lib/rubocop/cop/rails/attribute_default_block_value.rb
84
95
  - lib/rubocop/cop/rails/belongs_to.rb
85
96
  - lib/rubocop/cop/rails/blank.rb
86
97
  - lib/rubocop/cop/rails/bulk_change_table.rb
87
98
  - lib/rubocop/cop/rails/content_tag.rb
88
99
  - lib/rubocop/cop/rails/create_table_with_timestamps.rb
89
100
  - lib/rubocop/cop/rails/date.rb
101
+ - lib/rubocop/cop/rails/default_scope.rb
90
102
  - lib/rubocop/cop/rails/delegate.rb
91
103
  - lib/rubocop/cop/rails/delegate_allow_blank.rb
92
104
  - lib/rubocop/cop/rails/dynamic_find_by.rb
@@ -96,6 +108,7 @@ files:
96
108
  - lib/rubocop/cop/rails/exit.rb
97
109
  - lib/rubocop/cop/rails/file_path.rb
98
110
  - lib/rubocop/cop/rails/find_by.rb
111
+ - lib/rubocop/cop/rails/find_by_id.rb
99
112
  - lib/rubocop/cop/rails/find_each.rb
100
113
  - lib/rubocop/cop/rails/has_and_belongs_to_many.rb
101
114
  - lib/rubocop/cop/rails/has_many_or_has_one_dependent.rb
@@ -105,13 +118,21 @@ files:
105
118
  - lib/rubocop/cop/rails/ignored_skip_action_filter_option.rb
106
119
  - lib/rubocop/cop/rails/index_by.rb
107
120
  - lib/rubocop/cop/rails/index_with.rb
121
+ - lib/rubocop/cop/rails/inquiry.rb
108
122
  - lib/rubocop/cop/rails/inverse_of.rb
109
123
  - lib/rubocop/cop/rails/lexically_scoped_action_filter.rb
110
124
  - lib/rubocop/cop/rails/link_to_blank.rb
125
+ - lib/rubocop/cop/rails/mailer_name.rb
126
+ - lib/rubocop/cop/rails/match_route.rb
127
+ - lib/rubocop/cop/rails/negate_include.rb
111
128
  - lib/rubocop/cop/rails/not_null_column.rb
129
+ - lib/rubocop/cop/rails/order_by_id.rb
112
130
  - lib/rubocop/cop/rails/output.rb
113
131
  - lib/rubocop/cop/rails/output_safety.rb
114
132
  - lib/rubocop/cop/rails/pick.rb
133
+ - lib/rubocop/cop/rails/pluck.rb
134
+ - lib/rubocop/cop/rails/pluck_id.rb
135
+ - lib/rubocop/cop/rails/pluck_in_where.rb
115
136
  - lib/rubocop/cop/rails/pluralization_grammar.rb
116
137
  - lib/rubocop/cop/rails/presence.rb
117
138
  - lib/rubocop/cop/rails/present.rb
@@ -123,18 +144,25 @@ files:
123
144
  - lib/rubocop/cop/rails/reflection_class_name.rb
124
145
  - lib/rubocop/cop/rails/refute_methods.rb
125
146
  - lib/rubocop/cop/rails/relative_date_constant.rb
147
+ - lib/rubocop/cop/rails/render_inline.rb
148
+ - lib/rubocop/cop/rails/render_plain_text.rb
126
149
  - lib/rubocop/cop/rails/request_referer.rb
127
150
  - lib/rubocop/cop/rails/reversible_migration.rb
128
151
  - lib/rubocop/cop/rails/safe_navigation.rb
129
152
  - lib/rubocop/cop/rails/safe_navigation_with_blank.rb
130
153
  - lib/rubocop/cop/rails/save_bang.rb
131
154
  - lib/rubocop/cop/rails/scope_args.rb
155
+ - lib/rubocop/cop/rails/short_i18n.rb
132
156
  - lib/rubocop/cop/rails/skips_model_validations.rb
157
+ - lib/rubocop/cop/rails/squished_sql_heredocs.rb
133
158
  - lib/rubocop/cop/rails/time_zone.rb
134
159
  - lib/rubocop/cop/rails/uniq_before_pluck.rb
135
160
  - lib/rubocop/cop/rails/unique_validation_without_index.rb
136
161
  - lib/rubocop/cop/rails/unknown_env.rb
137
162
  - lib/rubocop/cop/rails/validation.rb
163
+ - lib/rubocop/cop/rails/where_equals.rb
164
+ - lib/rubocop/cop/rails/where_exists.rb
165
+ - lib/rubocop/cop/rails/where_not.rb
138
166
  - lib/rubocop/cop/rails_cops.rb
139
167
  - lib/rubocop/rails.rb
140
168
  - lib/rubocop/rails/inject.rb
@@ -148,9 +176,9 @@ metadata:
148
176
  homepage_uri: https://docs.rubocop.org/rubocop-rails/
149
177
  changelog_uri: https://github.com/rubocop-hq/rubocop-rails/blob/master/CHANGELOG.md
150
178
  source_code_uri: https://github.com/rubocop-hq/rubocop-rails/
151
- documentation_uri: https://docs.rubocop.org/rubocop-rails/
179
+ documentation_uri: https://docs.rubocop.org/rubocop-rails/2.9/
152
180
  bug_tracker_uri: https://github.com/rubocop-hq/rubocop-rails/issues
153
- post_install_message:
181
+ post_install_message:
154
182
  rdoc_options: []
155
183
  require_paths:
156
184
  - lib
@@ -165,8 +193,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
165
193
  - !ruby/object:Gem::Version
166
194
  version: '0'
167
195
  requirements: []
168
- rubygems_version: 3.1.3
169
- signing_key:
196
+ rubygems_version: 3.2.0.rc.2
197
+ signing_key:
170
198
  specification_version: 4
171
199
  summary: Automatic Rails code style checking tool.
172
200
  test_files: []