Module: MethodWatcher

Defined in:
lib/method_watcher.rb,
lib/method_watcher/version.rb

Constant Summary collapse

VERSION =
"0.0.1"

Class Method Summary collapse

Class Method Details

.included(mod) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/method_watcher.rb', line 5

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