class Backburner::Hooks
Public Class Methods
around_hook_events(hookable, event, *args, &block)
click to toggle source
Triggers all method hooks that match given around event type. Used for 'around' hooks that stack over the original task cumulatively onto one another.
The final block will be the one that actually invokes the original task after calling all other around blocks.
@example
around_hook_events(hookable, :around_perform) { hookable.perform }
# File lib/backburner/hooks.rb, line 25 def around_hook_events(hookable, event, *args, &block) raise "Please pass a block to hook events!" unless block_given? around_hooks = find_hook_events(hookable, event).reverse aggregate_filter = Proc.new { |&blk| blk.call } around_hooks.each do |ah| prior_around_filter = aggregate_filter aggregate_filter = Proc.new do |&blk| hookable.method(ah).call(*args) do prior_around_filter.call(&blk) end end end aggregate_filter.call(&block) end
invoke_hook_events(hookable, event, *args)
click to toggle source
Triggers all method hooks that match the given event type with specified arguments.
@example
invoke_hook_events(hookable, :before_enqueue, 'some', 'args') invoke_hook_events(hookable, :after_perform, 5)
# File lib/backburner/hooks.rb, line 10 def invoke_hook_events(hookable, event, *args) res = find_hook_events(hookable, event).map { |e| hookable.send(e, *args) } return false if res.any? { |result| result == false } res end
Protected Class Methods
find_hook_events(hookable, event)
click to toggle source
Returns all methods that match given hook type
@example
find_hook_events(:before_enqueue) # => ['before_enqueue_foo', 'before_enqueue_bar']
# File lib/backburner/hooks.rb, line 48 def find_hook_events(hookable, event) (hookable.methods - Object.methods).grep(/^#{event}/).sort end