cf101d64d8
`unscoped` often has an effect broader than intended. For instance: ``` user.dossiers.unscoped.destroy_all ``` will not destroy all the user's dossier, including the hidden ones, but **all the dossiers of all users**. Instead, narrower unscoping should be used: ``` user.dossiers.unscope(where: :hidden).destroy_all ``` (Or even better, use the new `Dossier.with_hidden` scope).
18 lines
402 B
Ruby
18 lines
402 B
Ruby
module RuboCop
|
|
module Cop
|
|
module DS
|
|
class Unscoped < Cop
|
|
MSG = "Avoid using `unscoped`. Instead unscope specific clauses by using `unscope(where: :attribute)`."
|
|
|
|
def_node_matcher :unscoped?, <<-END
|
|
(send _ :unscoped)
|
|
END
|
|
|
|
def on_send(node)
|
|
return unless unscoped?(node)
|
|
add_offense(node)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|