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
|