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