Posted over 4 years ago. Visible to the public. Repeats.

How Ruby method lookup works

When you call a method on an object, Ruby looks for the implementation of that method. It looks in the following places and uses the first implementation it finds:

  1. Methods from the object's singleton class (an unnamed class that only exists for that object)
  2. Methods from prepended modules (Ruby 2.0+ feature)
  3. Methods from the object's class
  4. Methods from included modules
  5. Methods from the class hierarchy (superclass and its ancestors)

Example

Let's say we have the following class hierarchy:

Copy
class Superclass def action puts "Superclass" end end module IncludedModule def action puts "Included module" super end end module PrependedModule def action puts "Prepended module" super end end module SingletonModule def action puts "Singleton class" super end end class Klass < Superclass include IncludedModule prepend PrependedModule def action puts "Klass" super end end

… and we call a method like this:

Copy
instance = Klass.new instance.extend(SingletonModule) instance.action

Then we get an output as expected:

Copy
Singleton class Prepended module Klass Included module Superclass

By refactoring problematic code and creating automated tests, makandra can vastly improve the maintainability of your Rails application.

Owner of this card:

Avatar
Henning Koch
Last edit:
about 1 year ago
by Michael Leimstädtner
Keywords:
look-up, implementation, override, overwrite
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Henning Koch to makandra dev
This website uses cookies to improve usability and analyze traffic.
Accept or learn more