Calling the original instance method after overriding in Ruby
Say, there is a class:
class Base
def test
"original result"
end
end
And a descendant that overrides base class method:
class Descendant < Base
def test
"overridden result"
end
end
How to call Base#test in the Descendant instance context, outside from the Descendant#test? In other words, how woud you access super for some secific instance method outside from the override?
There is a way:
class Descendant < Base
def test
"overridden result"
end
def original_test
super_test = Base.instance_method(:test).bind(self)
super_test.call
end
end
Descendant#original_test will call the Base#test:
Descendant.new.original_test
# => "original result"
Same approach works for module methods: ImportedModule.instance_method(:method_name).bind(self).call
Somewhat related: