Посчитайте, сколько методов в методе?
Так что, если есть два метода:
def foo
method1
method2
end
Как можно проверить, все ли эти "method1/method2" были выполнены в самом методе? Как может подсчитываться количество раз, когда метод вызывается? Код также должен быть внутри method1 или method2, чтобы проверить это.
1 ответ
Возможно, это легко сделать по-другому, но этот способ кажется чистым и модульным.
Создайте прокси-класс с именем method_counter, который удаляет свои собственные методы и определяет missing_method, get_method_counts и конструктор. Вы можете увидеть примеры того, как это сделать, здесь: http://www.binarylogic.com/2009/08/07/how-to-create-a-proxy-class-in-ruby/
Теперь конструктор берет любой другой объект и хранит его внутри. Метод get метода count возвращает хэш метода methodname => count.
Недостающий метод вызывается ruby всякий раз, когда кто-то вызывает метод для прокси-объекта, который не существует... И затем вы должны реализовать его для вызова того же метода для содержащегося в нем объекта (переданного в конструкторе) после обновления хэша счетчика методов.
Эта реализация чиста, потому что вы не коснулись кода целевых объектов, и вызывающему коду нужно будет только изменить 1 строку (конструктор целевого объекта вместо этого создает прокси).