Returning em Ruby on Rails
Quantas vezes você já criou algum método em Ruby que inicializa uma variável, atribui valores a ela e depois a retorna?
Veja o exemplo abaixo:
def some_values values = [] values << "first element" values << "second element" values end some_values # => ["first element", "second element"]
A linha 2 é cria um array vazio, depois são atribuidos valores nas linhas 3 e 4, e finalmente na linha 5 o array é retornado pelo método.
Em Ruby on Rails existe o método returning da classe Object que facilita nossa vida nesses casos:
def some_values
returning values = [] do
values << "first element"
values << "second element"
end
end
some_values # => ["first element", "second element"]
Na linha 2 chamamos o método returning passando a variável que será retornada já atribuindo seu valor inicial. Dentro do bloco, nas linhas 3 e 4, então atribuímos os valores ao array.
Há também esse outro tipo de sintaxe:
def some_values
returning [] do |values|
values << "first element"
values << "second element"
end
end
some_values # => ["first element", "second element"]
Funciona da mesma forma, mas acaba sendo não tão intuitivo como o código anterior.
Veja um trecho de código utilizando o método returning, de um método auxiliar para testes de RSpec retirado de uma aplicação real:
def variants
returning variants = [] do
5.times do |priority| do
variants << Factory.build(:variant, :priority => priority)
end
end
end
E olhe só como é simples a implementação do método returning:
def returning(value) yield(value) value end


Comentários