Sha256: 1989617920e55451460e602853fae5a28eacdf55f907f1546a792f44d7ff824b
Contents?: true
Size: 1.23 KB
Versions: 5
Compression:
Stored size: 1.23 KB
Contents
module Rubydora # Provides class level methods for handling # callback methods that alter object instances module Callbacks # add callback framework to base class # @param [Class] base def self.included(base) base.extend ExtendableClassMethods end # hooks support module ExtendableClassMethods # creates the @hooks container ("hooks" are blocks or procs). # returns an array def hooks @hooks ||= {} end # register callback procs # @param [Array<Symbol>] hook name def register_callback(*attrs) attrs.each do |method_name| next if methods.include? method_name.to_s instance_eval " def #{method_name}(&blk) self.hooks[:#{method_name}] ||= [] self.hooks[:#{method_name}] << blk end def clear_#{method_name}_blocks! self.hooks[:#{method_name}] = [] end " class_eval " def call_#{method_name} self.class.hooks[:#{method_name}] ||= [] self.class.hooks[:#{method_name}].each do |h| instance_eval &h end end " end end end end end
Version data entries
5 entries across 5 versions & 1 rubygems