Ответ 1
Посмотрите класс OperatorMatcher.
Все сводится к Ruby, что позволяет вам не учитывать периоды и круглые скобки. На самом деле вы пишете:
target.should.send(:==, 5)
То есть, отправьте сообщение should
объекту target
, затем отправьте сообщение ==
на все should
.
Метод should
- обезьяна, заправленная в Kernel
, поэтому ее можно получить любым объектом. Matcher
, возвращаемый should
, содержит actual
, который в этом случае равен target
.
Matcher
реализует метод ==
, который выполняет сравнение с expected
, которое в этом случае является числом 5. Пример вырезания, который вы можете попробовать самостоятельно:
module Kernel
def should
Matcher.new(self)
end
end
class Matcher
def initialize(actual)
@actual = actual
end
def == expected
if @actual == expected
puts "Hurrah!"
else
puts "Booo!"
end
end
end
target = 4
target.should == 5
=> Booo!
target = 5
target.should == 5
=> Hurrah!