Dica de Ruby: Quem disparou este método?

21 de setembro de 2009  |  Ruby  | 

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 def metodo_a
    2   puts caller
    3 end
    4
    5 def metodo_b
    6   metodo_a
    7 end
    8
    9 metodo_b
   10
   11 # => ["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].


2 Comentários


  1. Rodrigo Kochenburger

    Lembrando também que se você faz o rescue de uma exceção, a própria exceção possui o método backtrace.

    begin
      # do something
    rescue => e
      p e.backtrace
    end

Trackbacks

  1. Tweets that mention Nome do Jogo » Blog Archive » Dica de Ruby: Quem disparou este método? -- Topsy.com

Deixe um comentário