module Hooks

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