Valores intermediários de saída em Ruby

Às vezes, com uma longa cadeia de chamadas de método como esta:

user.photos.collect(&:title).sort.uniq

Pode ser útil ao depurar código para gerar um dos valores intermediários. Isso pode ser feito usando #tap:

user.photos.tap { |photos| puts photos.inspect }.collect(&:title).sort.uniq

#tap irá render e devolver o remetente, permitindo que você inspecione um valor dentro da cadeia sem interrompê-lo.

Para tornar isso mais conveniente no console, adicione o seguinte ao arquivo ~/.irbrc:

class Object
def o
require
'pp' unless defined?(pp)
pp
self
self
end
end

Isso permitirá que você inspecione facilmente os elementos, inserindo .oem qualquer lugar da corrente:

user.photos.o.collect(&:title).sort.uniq