Module: Hooks
- Defined in:
- lib/baa.rb
Constant Summary collapse
- @@_baa_hooks =
{before: [], after: [], around: []}
Instance Method Summary collapse
- #_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_old_name(name) ⇒ Object
58 59 60 |
# File 'lib/baa.rb', line 58 def _baa_old_name(name) "_baa_#{name}".to_sym end |
#_baa_rename_method(name) ⇒ Object
53 54 55 56 |
# File 'lib/baa.rb', line 53 def _baa_rename_method(name) raise "Method (:#{name}) already has hooks applied\n#{@@_baa_hooks}" if @@_baa_hooks.values.flatten.include? name alias_method self._baa_old_name(name), name end |
#after(*names) ⇒ Object
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/baa.rb', line 20 def after(*names) names.each do |name| self._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
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/baa.rb', line 36 def around(*names, pre_method_name) names.each do |name| self._baa_rename_method(name) define_method(name) do |*args, &block| self.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
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# File 'lib/baa.rb', line 4 def before(*names) names.each do |name| self._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 |