110 palavras

TIL: descobrindo onde um método foi definido

, em Ruby, TIL

Num código cheio de metaprogramação, achar onde um método foi definido pode levar um tempo. O source_location responde direto, com o arquivo e a linha:

Movie.instance_method(:rating).source_location
# => ["/app/models/movie.rb", 210]

Movie.method(:top_rated).source_location
# => ["/app/models/movie.rb", 21]

O primeiro é para métodos de instância e o segundo para métodos de classe. Se você já tem um objeto na mão, movie.method(:rating).source_location também funciona.

Para ver o código em vez da posição, existe o source:

puts Movie.instance_method(:rating).source
# def rating
#   read_attribute(:rating)
# end

O source não faz parte do Ruby: vem da gem method_source, que o Pry já traz. Se ela não estiver no seu projeto, adicione ao grupo de desenvolvimento do Gemfile.