module Hooks::ClassMethods

Public Instance Methods

callbacks_for_hook(name) click to toggle source

Returns the callbacks for name. Handy if you want to run the callbacks yourself, say when they should be executed in another context.

Example:

def initialize
  self.class.callbacks_for_hook(:after_eight).each do |callback|
    instance_exec(self, &callback)
  end

would run callbacks in the object instance context, passing self as block parameter.

# File lib/middleman-core/vendor/hooks-0.2.0/lib/hooks.rb, line 69
def callbacks_for_hook(name)
  send("_#{name}_callbacks")
end
define_hook(name) click to toggle source
# File lib/middleman-core/vendor/hooks-0.2.0/lib/hooks.rb, line 27
def define_hook(name)
  accessor_name = "_#{name}_callbacks"

  setup_hook_accessors(accessor_name)
  define_hook_writer(name, accessor_name)
end
run_hook(name, *args) click to toggle source

Like Hooks#run_hook but for the class. Note that :callbacks must be class methods.

Example:

class Cat

after_eight :grab_a_beer

def self.grab_a_beer(*) # and so on...

where Cat.run_hook :after_eight will call the class method grab_a_beer.

# File lib/middleman-core/vendor/hooks-0.2.0/lib/hooks.rb, line 44
def run_hook(name, *args)
  run_hook_for(name, self, *args)
end
run_hook_for(name, scope, *args) click to toggle source
# File lib/middleman-core/vendor/hooks-0.2.0/lib/hooks.rb, line 48
def run_hook_for(name, scope, *args)
  callbacks_for_hook(name).each do |callback|
    if callback.kind_of? Symbol
      scope.send(callback, *args)
    else
      scope.instance_exec(*args, &callback)
    end
  end
end

Private Instance Methods

define_hook_writer(hook, accessor_name) click to toggle source
# File lib/middleman-core/vendor/hooks-0.2.0/lib/hooks.rb, line 75
    def define_hook_writer(hook, accessor_name)
      self.send(:define_method, hook.to_sym) do |&block|
        if self.class.respond_to?(hook)
          self.class.send(hook.to_sym, &block)
        end
      end

      instance_eval <<-RUBY_EVAL, __FILE__, __LINE__ + 1
        def #{hook}(method=nil, &block)
          #{accessor_name} << (block || method)
        end
      RUBY_EVAL
    end
setup_hook_accessors(accessor_name) click to toggle source
# File lib/middleman-core/vendor/hooks-0.2.0/lib/hooks.rb, line 89
def setup_hook_accessors(accessor_name)
  inheritable_attr(accessor_name)
  send("#{accessor_name}=", [])  # initialize ivar.
end