Newer Rails projects come with a gem that allows you to access .method(:foo).source
. Added a corresponding section to a fitting card
Changes
- +## Access the `Method` object
- Dead simple: Get the method object and ask for its owner:
-"foo".method(:upcase)- => #<Method: String#upcase> -"foo".method(:upcase).owner- => String- +```rb
- +"foo".method(:upcase)
- +# => #<Method: String#upcase>
- +
- +"foo".method(:upcase).owner
- +# => String
- +```
- +
- +## Look up a method's source location
- +
- Ruby 1.9 adds a method `Method#source_location` that returns file and line number where that method is defined.
-class Example; def method() end end- => nil-Example.new.method(:method).source_location- => ["(irb)", 11] --"foo".method(:upcase).source_location- => nil # String#upcase is a native method that's defined in C--Rumor has it in Ruby 1.8 there is a gem `ruby18_source_location` that does something similar.- +```rb
- +class Example; def method() end; end
- +# => nil
- +
- +Example.new.method(:method).source_location
- +# => ["(irb)", 11]
- +
- +"foo".method(:upcase).source_location
- +# => nil # String#upcase is a native method that's defined in C
- +```
- +
- +## Look up a method's source code
- +
- +If your Gemfile comes with [method_source](https://rubygems.org/gems/method_source) (a dependency of Rails 7+), you can can use inspect the source code directly using the `Method#source` method:
- +
- +```rb
- +puts User.new.method(:name).source
- +
- +# =>
- +# def name
- +# "#{first_name} #{last_name}".strip
- +# end
- +```
- ---
- ## Also see
- + [Using Ruby's Method objects for inspecting methods](https://makandracards.com/makandra/610159-using-the-ruby-s-class-method-for-inspecting-and-debugging-methods)
- + [How to examine an unknown Ruby object](https://makandracards.com/makandra/55983-how-to-examine-an-unknown-ruby-object)
Posted by Michael Leimstädtner to makandra dev (2024-10-25 13:37)