lib/rubocop/cop/rails/find_by_id.rb in rubocop-rails-2.22.2 vs lib/rubocop/cop/rails/find_by_id.rb in rubocop-rails-2.23.0
- old
+ new
@@ -22,44 +22,43 @@
MSG = 'Use `%<good_method>s` instead of `%<bad_method>s`.'
RESTRICT_ON_SEND = %i[take! find_by_id! find_by!].freeze
def_node_matcher :where_take?, <<~PATTERN
- (send
- $(send _ :where
+ (call
+ $(call _ :where
(hash
(pair (sym :id) $_))) :take!)
PATTERN
def_node_matcher :find_by?, <<~PATTERN
{
- (send _ :find_by_id! $_)
- (send _ :find_by! (hash (pair (sym :id) $_)))
+ (call _ :find_by_id! $_)
+ (call _ :find_by! (hash (pair (sym :id) $_)))
}
PATTERN
def on_send(node)
where_take?(node) do |where, id_value|
range = where_take_offense_range(node, where)
- bad_method = build_where_take_bad_method(id_value)
- register_offense(range, id_value, bad_method)
+ register_offense(range, id_value)
end
find_by?(node) do |id_value|
range = find_by_offense_range(node)
- bad_method = build_find_by_bad_method(node, id_value)
- register_offense(range, id_value, bad_method)
+ register_offense(range, id_value)
end
end
+ alias on_csend on_send
private
- def register_offense(range, id_value, bad_method)
+ def register_offense(range, id_value)
good_method = build_good_method(id_value)
- message = format(MSG, good_method: good_method, bad_method: bad_method)
+ message = format(MSG, good_method: good_method, bad_method: range.source)
add_offense(range, message: message) do |corrector|
corrector.replace(range, good_method)
end
end
@@ -72,22 +71,9 @@
range_between(node.loc.selector.begin_pos, node.source_range.end_pos)
end
def build_good_method(id_value)
"find(#{id_value.source})"
- end
-
- def build_where_take_bad_method(id_value)
- "where(id: #{id_value.source}).take!"
- end
-
- def build_find_by_bad_method(node, id_value)
- case node.method_name
- when :find_by_id!
- "find_by_id!(#{id_value.source})"
- when :find_by!
- "find_by!(id: #{id_value.source})"
- end
end
end
end
end
end