Я бы рекомендовал не использовать caller_method
в этом случае. Скорее создайте класс, чьи методы возвращают self
- таким образом они будут цепочечными:
module Expectation
attr_accessor :caller_method
def expect(arg)
self.caller_method = "expect"
self
end
def to
caller_method
end
end
include Expectation
expect("foo").to
# => "expect"
Очевидно, что это только отправная точка, и на самом деле это еще не делает никаких сравнений / проверок. Но, надеюсь, вы можете понять эту схему. Ключевым моментом является возвращение self
для создания цепочки API и сохранение внутреннего состояния с использованием чего-то вроде attr_accessor