Rails: lançando objetos como matrizes

Já executei o código Rails como o seguinte várias vezes:

def emails
# force emails into an array if not already in one
if params[:email].nil?
[]
elsif params[:emails].is_a String
[params[:emails]]
else
params[:emails]
end
end

def do_something
emails
.each do |email|
# do something
end
end

O código acima faz o trabalho, mas não é muito limpo.

Pode ser facilmente melhorado com o seguinte:

def emails
Array.wrap(params[:emails])
end

def do_something
emails
.each do |email|
# do something
end
end

A conversão de qualquer coisa em uma matriz retornará uma matriz. Agora não nos importamos mais se uma string
ou uma matriz vem dos parâmetros que abordamos em ambos os casos. É uma
solução mais limpa que também nos economiza algumas linhas. Este padrão é um exemplo de “Não
duplique a funcionalidade de uma biblioteca interna” de nossos guias . Também vale a pena verificar os docs para isso #wrapestá sendo usado aqui vs .Kernel#Array