module Hooks
Public Instance Methods
_baa_hooks()
click to toggle source
# File lib/baa.rb, line 3 def _baa_hooks @_baa_hooks ||= { before: [], after: [], around: [] } end
_baa_old_name(name)
click to toggle source
# File lib/baa.rb, line 70 def _baa_old_name(name) "_baa_#{name}".to_sym end
_baa_rename_method(name)
click to toggle source
# 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) { || ... }
click to toggle source
# 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) { || ... }
click to toggle source
# 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) { || ... }
click to toggle source
# 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