metaprogramming/get_source.rb
tests/_examples/metaprogramming/get_source.rb in the metorex repository.
# get_source - retrieve a Method object for a named method
class Dog
def speak
"Woof!"
end
def fetch(item)
"Fetching #{item}!"
end
end
dog = Dog.new
# get_source returns a Method object for user-defined methods
m = dog.get_source(:speak)
puts m.name
m2 = dog.get_source(:fetch)
puts m2.name
# get_source returns nil for undefined methods
result = dog.get_source(:nonexistent)
puts result.nil?
# get_source works with string names too
m3 = dog.get_source("speak")
puts m3.name
# get_source works on class objects themselves
class Cat
def purr
"Purr..."
end
end
m4 = Cat.new.get_source(:purr)
puts m4.name
# get_source with inherited methods
class Kitten < Cat
end
k = Kitten.new
m5 = k.get_source(:purr)
puts m5.name
Output:
speak
fetch
true
speak
purr
purr