Rastreie o código-fonte com o método Kernel #

# TL;DR
puts method_find
= [].method(:find)
# => #<Method: Array(Enumerable)#find>

if RUBY_VERSION =~ /^1.8/
[method_find.__line__, method_find.__line__]
else
method_find
.source_location
end

# On to our featured presentation. :)
#
# Ruby's dynamic nature gives you a myraid of ways to
# construct your objects.
# Sometimes this can bite you and put you in a situation
# where it's tricky to track down where a method
# is defined.
#
# We can easily solve this with Kernel#method.

module Bar
def say
'hello'
end
end

class Foo
include
Bar
end

method_say
= Foo.new.method(:say)
puts method_say
# => #<Method: Foo(Bar)#say>

# What is really nifty is that we can ask the method object
# which file it was defined in as well as on which line.

if RUBY_VERSION =~ /^1.8/
puts method_say
.__file__
puts method_say
.__line__
else
puts method_say
.source_location
end

# This is also very useful when deciphering if the method
# is defined in the ruby core classes or in
# a library/framework.

# class Cat <ActiveRecord::Base
# end
# puts Cat.method(:find)
# => #<Method: Cat(Table doesn't exist)(ActiveRecord::Base).find>

puts
[].method(:find)
# => #<Method: Array(Enumerable)#find>