Strings vazias e operadores ternários

Em Ruby, uma string vazia não avalia como false. Portanto, se você escreveu algo como:

class User
def greeting
"Hey #{self.first_name || 'you'}"
end
end

Você acabaria com “Ei” mesmo quando estivesse first_namevazio, o que, claro, é aceitável, mas não tão bom quanto “Ei, você”.

Depois de pesquisar return receiver if true, finalmente encontrei uma extensão que Ruby On Rails fornece na classe Object, chamada #presence. Dos documentos:

Retorna o receptor se estiver presente, caso contrário retorna nulo.

O que o torna extremamente útil para o nosso exemplo acima, e agora você pode escrever:

class User
def greeting
"Hey #{self.first_name.presence || 'you'}"
end
end

Muito bom mesmo.