Class: RuboCop::Cop::Rails::Pick
- Inherits:
-
Base
- Object
- Base
- RuboCop::Cop::Rails::Pick
- Extended by:
- AutoCorrector, TargetRailsVersion
- Defined in:
- lib/rubocop/cop/rails/pick.rb
Overview
Enforces the use of ‘pick` over `pluck(…).first`.
Using ‘pluck` followed by `first` creates an intermediate array, which `pick` avoids. When called on an Active Record relation, `pick` adds a limit to the query so that only one value is fetched from the database.
Constant Summary collapse
- MSG =
'Prefer `pick(%<args>s)` over `pluck(%<args>s).first`.'
- RESTRICT_ON_SEND =
%i[first].freeze
Instance Method Summary collapse
Methods included from TargetRailsVersion
minimum_target_rails_version, support_target_rails_version?
Instance Method Details
#on_send(node) ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/rubocop/cop/rails/pick.rb', line 40 def on_send(node) pick_candidate?(node) do receiver = node.receiver receiver_selector = receiver.loc.selector node_selector = node.loc.selector range = receiver_selector.join(node_selector) add_offense(range, message: (receiver)) do |corrector| first_range = receiver.source_range.end.join(node_selector) corrector.remove(first_range) corrector.replace(receiver_selector, 'pick') end end end |