module Tzu::Hooks

Provides hooks for arbitrary pre- and post- processing within a command

Public Class Methods

included(base) click to toggle source
# File lib/tzu/hooks.rb, line 5
def self.included(base)
  base.class_eval do
    extend ClassMethods
  end
end

Public Instance Methods

with_hooks(*params) { |*params| ... } click to toggle source
# File lib/tzu/hooks.rb, line 40
def with_hooks(*params, &block)
  result = nil
  run_around_hooks do
    run_before_hooks(*params)
    result = yield(*params)
    run_after_hooks(*params)
  end
  result
end

Private Instance Methods

run_after_hooks(params) click to toggle source
# File lib/tzu/hooks.rb, line 62
def run_after_hooks(params)
  run_hooks(self.class.after_hooks, params)
end
run_around_hooks(&block) click to toggle source
# File lib/tzu/hooks.rb, line 52
def run_around_hooks(&block)
  self.class.around_hooks.reverse.inject(block) do |chain, hook|
    proc { run_hook(hook, chain) }
  end.call
end
run_before_hooks(params) click to toggle source
# File lib/tzu/hooks.rb, line 58
def run_before_hooks(params)
  run_hooks(self.class.before_hooks, params)
end
run_hook(hook, args) click to toggle source
# File lib/tzu/hooks.rb, line 70
def run_hook(hook, args)
  hook.is_a?(Symbol) ? send(hook, args) : instance_exec(args, &hook)
end
run_hooks(hooks, params) click to toggle source
# File lib/tzu/hooks.rb, line 66
def run_hooks(hooks, params)
  hooks.each { |hook| run_hook(hook, params) }
end