Carlos Brando

Nome do Jogo

Dica de Ruby: Quem disparou este método?

Recentemente eu precisei desenvolver um módulo de log para o framework no qual estou trabalhando e não sabia como recuperar quem havia disparado o método atual no momento do registro do log.

Depois de pesquisar um pouco encontrei a resposta, um método muito simples no Kernel do Ruby chamado caller que devolve um array com o call stack. O primeiro item do array é quem disparou o método atual. E cada elemento consecutivamente é aquele que disparou o método anterior na fila, e assim se segue até o final da pilha.

Este método pode ser muito útil quando se deseja descobrir a causa de uma exceção em um aplicativo. Veja um exemplo:

1
2
3
4
5
6
7
8
9
10
def metodo_a
    puts caller
end

def metodo_b
    metodo_a
end

metodo_b
# => ["untitled:6:in `metodo_b'", "untitled:9"]

Conforme você pôde ver no exemplo acima, o primeiro item no array informa que o metodo_a foi disparado pelo metodo_b na linha 6 e que o metodo_b foi disparado na linha 9.

O string de retorno sempre seguirá o formato [arquivo]:[linha] ou [arquivo]:[linha]: in [método].

Comments