require "method_watcher/version" module MethodWatcher class << self def included mod mod.instance_variable_set "@_watch_methods", {} mod.singleton_class.class_eval do def watch_methods *methods methods.each do |method| watch_method method end end def watch_method method @_watch_methods[method.to_sym] = self end def method_added method super if @_watch_methods.has_key?(method.to_sym) @_watch_methods[method].method_overriding method end end def method_overriding method warn "method #{self}##{method} is overridden" end def inherited mod super super_watch_methods = (mod.respond_to?(:superclass) && mod.superclass && mod.superclass.instance_variable_get("@_watch_methods")) || {} mod.instance_variable_set "@_watch_methods", super_watch_methods.merge({}) end end end end end