module Hook

TODO: hooks should be an inheritor

Public Class Methods

append_features(base) click to toggle source
# File lib/mixers/hook.rb, line 7
def self.append_features(base)
  base.extend self
end

Public Instance Methods

hook(name) click to toggle source
# File lib/mixers/hook.rb, line 15
def hook(name)
  name = name.to_sym

  (class << self; self; end).class_eval %{
    def #{name}(meth=nil, &blk)
      hooks[:#{name}] << (meth || blk)
    end
  }

  module_eval %{
    def #{name}(*args)
      self.class.hooks[:#{name}].each do |blk|
        if Proc === blk
          instance_exec(:#{name}, *args, &blk)
        else
          __send__(blk, :#{name}, *args)
        end
      end
    end
  }
end
hooks() click to toggle source
# File lib/mixers/hook.rb, line 11
def hooks
  @hooks ||= Hash.new{ |h,k| h[k] = [] }
end