Skip to content

Commit 4c1b7d7

Browse files
authored
Merge pull request #1341 from Earlopain/where-equals-database-qualifier
[Fix #1340] Fix a false positive for `Rails/WhereEquals` when qualifying the database name
2 parents da11209 + 5c975e5 commit 4c1b7d7

File tree

7 files changed

+37
-3
lines changed

7 files changed

+37
-3
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
* [#1340](https://github.com/rubocop/rubocop-rails/issues/1340): Fix a false positive for `Rails/WhereEquals`, `Rails/WhereNot`, and `Rails/WhereRange` when qualifying the database name. ([@earlopain][])

lib/rubocop/cop/rails/where_equals.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ def offense_range(node)
7474
range_between(node.loc.selector.begin_pos, node.source_range.end_pos)
7575
end
7676

77+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
7778
def extract_column_and_value(template_node, value_node)
7879
value =
7980
case template_node.value
@@ -90,8 +91,12 @@ def extract_column_and_value(template_node, value_node)
9091
return
9192
end
9293

93-
[Regexp.last_match(1), value]
94+
column_qualifier = Regexp.last_match(1)
95+
return if column_qualifier.count('.') > 1
96+
97+
[column_qualifier, value]
9498
end
99+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
95100

96101
def build_good_method(method_name, column, value)
97102
if column.include?('.')

lib/rubocop/cop/rails/where_not.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ def offense_range(node)
6868
range_between(node.loc.selector.begin_pos, node.source_range.end_pos)
6969
end
7070

71+
# rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
7172
def extract_column_and_value(template_node, value_node)
7273
value =
7374
case template_node.value
@@ -84,8 +85,12 @@ def extract_column_and_value(template_node, value_node)
8485
return
8586
end
8687

87-
[Regexp.last_match(1), value]
88+
column_qualifier = Regexp.last_match(1)
89+
return if column_qualifier.count('.') > 1
90+
91+
[column_qualifier, value]
8892
end
93+
# rubocop:enable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength
8994

9095
def build_good_method(dot, column, value)
9196
dot ||= '.'

lib/rubocop/cop/rails/where_range.rb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,8 @@ def extract_column_and_value(template_node, values_node)
140140
rhs = pair2.value
141141
end
142142
end
143+
else
144+
return
143145
end
144146

145147
if lhs
@@ -150,7 +152,10 @@ def extract_column_and_value(template_node, values_node)
150152
rhs_source = parentheses_needed?(rhs) ? "(#{rhs.source})" : rhs.source
151153
end
152154

153-
[Regexp.last_match(1), "#{lhs_source}#{operator}#{rhs_source}"] if operator
155+
column_qualifier = Regexp.last_match(1)
156+
return if column_qualifier.count('.') > 1
157+
158+
[column_qualifier, "#{lhs_source}#{operator}#{rhs_source}"] if operator
154159
end
155160
# rubocop:enable Metrics
156161

spec/rubocop/cop/rails/where_equals_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -217,4 +217,10 @@
217217
users.not('name = ?', 'Gabe')
218218
RUBY
219219
end
220+
221+
it 'does not register an offense when qualifying the database' do
222+
expect_no_offenses(<<~RUBY)
223+
User.where('database.users.name = ?', 'Gabe')
224+
RUBY
225+
end
220226
end

spec/rubocop/cop/rails/where_not_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -275,4 +275,10 @@
275275
User.where('name <> ? AND age <> ?', 'john', 19)
276276
RUBY
277277
end
278+
279+
it 'does not register an offense when qualifying the database' do
280+
expect_no_offenses(<<~RUBY)
281+
User.where('database.users.name != ?', 'Gabe')
282+
RUBY
283+
end
278284
end

spec/rubocop/cop/rails/where_range_spec.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,12 @@
221221
Model.where(column: ...value)
222222
RUBY
223223
end
224+
225+
it 'does not register an offense when qualifying the database' do
226+
expect_no_offenses(<<~RUBY)
227+
Model.where('database.table.column >= ?', value)
228+
RUBY
229+
end
224230
end
225231
end
226232
end

0 commit comments

Comments
 (0)