Module: Hooks
- Defined in:
- lib/baa.rb
Overview
Hooks
Instance Method Summary collapse
- #_baa_hooks ⇒ Object
- #_baa_old_name(name) ⇒ Object
- #_baa_rename_method(name) ⇒ Object
- #after(*names) ⇒ Object
- #around(*names, pre_method_name) ⇒ Object
- #before(*names) ⇒ Object
Instance Method Details
#_baa_hooks ⇒ Object
3 4 5 6 7 8 9 |
# File 'lib/baa.rb', line 3 def _baa_hooks @_baa_hooks ||= { before: [], after: [], around: [] } end |
#_baa_old_name(name) ⇒ Object
70 71 72 |
# File 'lib/baa.rb', line 70 def _baa_old_name(name) "_baa_#{name}".to_sym end |
#_baa_rename_method(name) ⇒ Object
63 64 65 66 67 68 |
# File 'lib/baa.rb', line 63 def _baa_rename_method(name) if _baa_hooks.values.flatten.include? name fail HookExistsError, "Method (:#{name}) already has hooks applied\n#{_baa_hooks}" end alias_method _baa_old_name(name), name end |
#after(*names) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
# File 'lib/baa.rb', line 27 def after(*names) names.each do |name| _baa_rename_method(name) define_method(name) do |*args, &block| if args.any? send(self.class._baa_old_name(name), args, &block) else send(self.class._baa_old_name(name), &block) end yield end _baa_hooks[:after] << name end _baa_hooks end |
#around(*names, pre_method_name) ⇒ Object
43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/baa.rb', line 43 def around(*names, pre_method_name) names.each do |name| _baa_rename_method(name) define_method(name) do |*args, &block| send(pre_method_name) if args.any? send(self.class._baa_old_name(name), args, &block) else send(self.class._baa_old_name(name), &block) end yield end _baa_hooks[:around] << name end _baa_hooks end |
#before(*names) ⇒ Object
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/baa.rb', line 11 def before(*names) names.each do |name| _baa_rename_method(name) define_method(name) do |*args, &block| yield if args.any? send(self.class._baa_old_name(name), args, &block) else send(self.class._baa_old_name(name), &block) end end _baa_hooks[:before] << name end _baa_hooks end |