diff --git a/CHANGELOG.md b/CHANGELOG.md index ee41ba5e9b..6e036e8717 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,7 @@ * [#338](https://github.com/rubocop-hq/rubocop-rails/issues/338): Fix a false positive for `Rails/IndexBy` and `Rails/IndexWith` when the `each_with_object` hash is used in the transformed key or value. ([@eugeneius][]) * [#351](https://github.com/rubocop-hq/rubocop-rails/pull/351): Add `<>` operator to `Rails/WhereNot` cop. ([@Tietew][]) * [#352](https://github.com/rubocop-hq/rubocop-rails/pull/352): Do not register offense if given a splatted hash. ([@dvandersluis][]) +* [#346](https://github.com/rubocop-hq/rubocop-rails/pull/346): Fix a false positive for `Rails/DynamicFindBy` when any of the arguments are splat argument. ([@koic][]) ## 2.8.0 (2020-09-04) diff --git a/lib/rubocop/cop/rails/dynamic_find_by.rb b/lib/rubocop/cop/rails/dynamic_find_by.rb index 3c2e349b59..e86efd6d26 100644 --- a/lib/rubocop/cop/rails/dynamic_find_by.rb +++ b/lib/rubocop/cop/rails/dynamic_find_by.rb @@ -41,6 +41,7 @@ def on_send(node) method_name = node.method_name static_name = static_method_name(method_name) return unless static_name + return if node.arguments.any?(&:splat_type?) add_offense(node, message: format(MSG, static_name: static_name, diff --git a/spec/rubocop/cop/rails/dynamic_find_by_spec.rb b/spec/rubocop/cop/rails/dynamic_find_by_spec.rb index 7866a49dad..d5655dc582 100644 --- a/spec/rubocop/cop/rails/dynamic_find_by_spec.rb +++ b/spec/rubocop/cop/rails/dynamic_find_by_spec.rb @@ -133,6 +133,14 @@ expect_no_offenses('User.find_by(name: name)') end + it 'accepts splat argument' do + expect_no_offenses('User.find_by_scan(*args)') + end + + it 'accepts any of the arguments are splat argument' do + expect_no_offenses('User.find_by_foo_and_bar(arg, *args)') + end + it 'accepts method in whitelist' do expect_no_offenses(<<~RUBY) User.find_by_sql(["select * from users where name = ?", name])