Module: BBLib::Hooks
- Included in:
- LazyClass
- Defined in:
- lib/object/hooks.rb
Instance Method Summary collapse
- #add_after_hook(method, hook) ⇒ Object
- #add_before_hook(method, hook) ⇒ Object
- #after(hook, *methods) ⇒ Object
- #after_hooked_methods ⇒ Object
- #after_hooks ⇒ Object
- #after_hooks_for(name) ⇒ Object
- #before(hook, *methods) ⇒ Object
- #before_hooked_methods ⇒ Object
- #before_hooks ⇒ Object
- #before_hooks_for(name) ⇒ Object
- #method_added(name) ⇒ Object
Instance Method Details
#add_after_hook(method, hook) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/object/hooks.rb', line 57 def add_after_hook method, hook after_hooked_methods[hook] = Array.new unless after_hooked_methods[hook] after_hooked_methods[hook] += [method] original = instance_method(method) define_method(method) do |*args, &block| rtr = original.bind(self).call(*args, &block) method(hook).call rtr end end |
#add_before_hook(method, hook) ⇒ Object
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/object/hooks.rb', line 30 def add_before_hook method, hook before_hooked_methods[hook] = Array.new unless before_hooked_methods[hook] before_hooked_methods[hook] += [method] original = instance_method(method) define_method(method) do |*args, &block| # puts "ARGS: #{args}" method(hook).call original.bind(self).call(*args, &block) end end |
#after(hook, *methods) ⇒ Object
41 42 43 |
# File 'lib/object/hooks.rb', line 41 def after hook, *methods methods.each{ |m| after_hooks[hook] = methods } end |
#after_hooked_methods ⇒ Object
49 50 51 |
# File 'lib/object/hooks.rb', line 49 def after_hooked_methods @after_hooked_methods ||= {} end |
#after_hooks ⇒ Object
45 46 47 |
# File 'lib/object/hooks.rb', line 45 def after_hooks @after_hooks ||= {} end |
#after_hooks_for(name) ⇒ Object
53 54 55 |
# File 'lib/object/hooks.rb', line 53 def after_hooks_for name after_hooks.map{ |n, m| m.include?(name) ? n : nil }.reject(&:nil?) end |
#before(hook, *methods) ⇒ Object
14 15 16 |
# File 'lib/object/hooks.rb', line 14 def before hook, *methods methods.each{ |m| before_hooks[hook] = methods } end |
#before_hooked_methods ⇒ Object
22 23 24 |
# File 'lib/object/hooks.rb', line 22 def before_hooked_methods @before_hooked_methods ||= {} end |
#before_hooks ⇒ Object
18 19 20 |
# File 'lib/object/hooks.rb', line 18 def before_hooks @before_hooks ||= {} end |
#before_hooks_for(name) ⇒ Object
26 27 28 |
# File 'lib/object/hooks.rb', line 26 def before_hooks_for name before_hooks.map{ |n, m| m.include?(name)? n : nil }.reject(&:nil?) end |
#method_added(name) ⇒ Object
3 4 5 6 7 8 9 10 11 12 |
# File 'lib/object/hooks.rb', line 3 def method_added name before_hooks_for(name).each do |hook| next if before_hooked_methods[hook] && before_hooked_methods[hook].include?(name) add_before_hook(name, hook) end after_hooks_for(name).each do |hook| next if after_hooked_methods[hook] && after_hooked_methods[hook].include?(name) add_after_hook(name, hook) end end |