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 #wrap
está sendo usado aqui vs .Kernel#Array