21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
# File 'lib/callmeback.rb', line 21
def callback_binding
self.class.callmeback_methods.each do |callback_prefix, callback_array|
callback_array.each do |callback_hash|
callback_hash.each do |callback_key, callbacks|
callbacks = [callbacks].flatten
if callback_key.is_a?(Regexp)
binded_methods = methods.select{|m| m =~ callback_key}
else
binded_methods = [callback_key].flatten
end
binded_methods.each do |binded|
callbacks.each do |callback|
binded_suffix = "method_#{self.class.callmeback_method_index}"
self.class.callmeback_method_index += 1
prefixed_wrapped_binded = "callmeback_wrapped_#{binded_suffix}"
prefixed_unwrapped_binded = "callmeback_unwrapped_#{binded_suffix}"
class_eval do
define_method prefixed_wrapped_binded do
class_eval do
define_callbacks prefixed_wrapped_binded
set_callback prefixed_wrapped_binded, callback_prefix, callback
end
run_callbacks prefixed_wrapped_binded do
send prefixed_unwrapped_binded
end
end
alias_method prefixed_unwrapped_binded, binded
alias_method binded, prefixed_wrapped_binded
end
end
end
end
end
end
end
|