class RuboCop::Cop::Rails::Presence
This cop checks code that can be written more easily using `Object#presence` defined by Active Support.
@example
# bad a.present? ? a : nil # bad !a.present? ? nil : a # bad a.blank? ? nil : a # bad !a.blank? ? a : nil # good a.presence
@example
# bad a.present? ? a : b # bad !a.present? ? b : a # bad a.blank? ? b : a # bad !a.blank? ? a : b # good a.presence || b
Constants
- MSG
Public Instance Methods
autocorrect(node)
click to toggle source
# File lib/rubocop/cop/rails/presence.rb, line 89 def autocorrect(node) lambda do |corrector| redundant_receiver_and_other(node) do |receiver, other| corrector.replace(node.source_range, replacement(receiver, other)) end redundant_negative_receiver_and_other(node) do |receiver, other| corrector.replace(node.source_range, replacement(receiver, other)) end end end
on_if(node)
click to toggle source
# File lib/rubocop/cop/rails/presence.rb, line 73 def on_if(node) return if ignore_if_node?(node) redundant_receiver_and_other(node) do |receiver, other| unless ignore_other_node?(other) || receiver.nil? add_offense(node, message: message(node, receiver, other)) end end redundant_negative_receiver_and_other(node) do |receiver, other| unless ignore_other_node?(other) || receiver.nil? add_offense(node, message: message(node, receiver, other)) end end end
Private Instance Methods
ignore_if_node?(node)
click to toggle source
# File lib/rubocop/cop/rails/presence.rb, line 103 def ignore_if_node?(node) node.elsif? end
ignore_other_node?(node)
click to toggle source
# File lib/rubocop/cop/rails/presence.rb, line 107 def ignore_other_node?(node) node && (node.if_type? || node.rescue_type? || node.while_type?) end
message(node, receiver, other)
click to toggle source
# File lib/rubocop/cop/rails/presence.rb, line 111 def message(node, receiver, other) format(MSG, prefer: replacement(receiver, other), current: node.source) end
replacement(receiver, other)
click to toggle source
# File lib/rubocop/cop/rails/presence.rb, line 117 def replacement(receiver, other) or_source = other.nil? || other.nil_type? ? '' : " || #{other.source}" "#{receiver.source}.presence" + or_source end