Вероятно, это легко сделать другим способом, но этот способ кажется чистым и модульным.
Создайте прокси-класс с именем 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 строка (конструктор целевого объекта для создания прокси).