Recentemente, tivemos um problema em que, após uma série de confirmações, um processo de back-end não foi executado. Agora, éramos bons meninos e meninas e corríamos rake test
após cada check-in, mas, devido a algumas esquisitices no carregamento da biblioteca do Rails, isso só ocorreu quando o rodamos diretamente do Mongrel no modo de produção.
Eu rastreei o bug e isso ocorreu devido a uma nova gema do Rails sobrescrevendo um método na classe String de uma maneira que interrompeu um uso restrito no código Rails em tempo de execução.
Enfim, para encurtar a história, existe uma maneira, em tempo de execução, de perguntar a Ruby onde um método foi definido? Algo assim whereami( :foo )
retorna /path/to/some/file.rb line #45
? Nesse caso, me dizer que ele foi definido na classe String seria inútil, porque estava sobrecarregado por alguma biblioteca.
Eu não posso garantir que a fonte esteja no meu projeto, portanto, aguardar 'def foo'
não necessariamente me dará o que eu preciso, para não mencionar se tenho muitos def foo
, às vezes não sei até o tempo de execução qual deles posso estar usando.