class RuboCop::Cop::Rails::Presence

a.presence || b
# good
!a.blank? ? a : b
# bad
a.blank? ? b : a
# bad
!a.present? ? b : a
# bad
a.present? ? a : b
# bad
@example
a.presence
# good
!a.blank? ? a : nil
# bad
a.blank? ? nil : a
# bad
!a.present? ? nil : a
# bad
a.present? ? a : nil
# bad
@example
`Object#presence` defined by Active Support.
This cop checks code that can be written more easily using

def autocorrect(node)

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

def ignore_if_node?(node)

def ignore_if_node?(node)
  node.elsif?
end

def ignore_other_node?(node)

def ignore_other_node?(node)
  node && (node.if_type? || node.rescue_type? || node.while_type?)
end

def message(node, receiver, other)

def message(node, receiver, other)
  format(MSG,
         prefer: replacement(receiver, other),
         current: node.source)
end

def on_if(node)

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

def replacement(receiver, other)

def replacement(receiver, other)
  or_source = other.nil? || other.nil_type? ? '' : " || #{other.source}"
  "#{receiver.source}.presence" + or_source
end