eprothro
10/25/2017 - 2:42 PM

Temporarily override ruby object method

You can temporarily override (not overwrite) a ruby method for an object by defining a method on the object metaclass.

class Foo

  def bar
    :object_method
  end
end

f = Foo.new
f.bar
# => :object_method

def f.bar
  :object_metaclass_method
end

f.bar
# => :object_metaclass_method

class << f
  remove_method(:bar)
end

f.bar
# => :object_method