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