Създайте клас Spy
, чийто конструктор приема като аргумент инстанция на
какъвто и да е клас и видимо се държи като въпросната инстанция – отговаря на
същите методи, като подадената инстанция, когато тези методи бъдат извикани
връщат същите стойности, каквито биха върнали, ако бяха извикани директно върху
инстанцията и тъй нататък. Разликата е, че инстанциите на Spy
имат метод
Spy#calls
, който връща масив от имената на всички извикани върху него методи,
на които съответства метод в подадената инстанция.
Ако подадената инстанция не отговаря на желания метод, или пък той не е
public
метод, то трябва да се хвърли изключение Spy::Error
, което да е
наследник на NoMethodError
Пример:
s = Spy.new 'Spy'
s.length # => 3
s.calls # => [:length]
s.unknown_method # хвърля Spy::Error