Sha256: 3b37ad9c04d488710c07eeea4aa73dbef1649129a50ca1cf6b3e31c9df6e7ec9
Contents?: true
Size: 673 Bytes
Versions: 3
Compression:
Stored size: 673 Bytes
Contents
#require 'facets/kernel/instance_exec' # TODO: hooks should be an inheritor # module Hook def self.append_features(base) base.extend self end def hooks @hooks ||= Hash.new{ |h,k| h[k] = [] } end 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 end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
mixers-1.2.0 | lib/mixers/hook.rb |
mixers-1.1.0 | lib/mixers/hook.rb |
mixers-1.0.0 | lib/mixers/hook.rb |