Я пытаюсь найти способ, которым я могу переопределить метод, сделать что-то, а затем вернуться, не оставляя при этом никаких артефактов.
Я реализовал это, используя mocha, но, очевидно, это не будет летать впроизводственное приложение.Обратите внимание, что новый метод имеет параметры, а старый - нет.
Пример выглядит следующим образом
require 'rubygems'
require 'mocha'
class Example
def to_something
self.stubs(:attribs => other(1))
r = attribs_caller
self.unstub(:attribs)
r
end
def other(int)
{"other" => int }
end
def attribs_caller
attribs
end
def attribs
{"this" => 1 }
end
end
a1 = Example.new
puts a1.attribs_caller #=> this1
puts a1.to_something #=> other1
puts a1.attribs_caller #=> this1