class Catalyst::Runner

Attributes

actions[R]
history[R]

Public Class Methods

new(actions) click to toggle source
# File lib/catalyst/runner.rb, line 5
def initialize(actions)
  @history = []
  @actions = actions.map {|act| setup_action(act) }
end

Public Instance Methods

call(env={}) click to toggle source
# File lib/catalyst/runner.rb, line 10
def call(env={})
  return if actions.empty?

  begin
    action = history.unshift(@actions.shift).first
    action.call(env)
  rescue Exception => e
    env["catalyst.error"] = e
    raise
  end
end
setup_action(action) click to toggle source
# File lib/catalyst/runner.rb, line 22
def setup_action(action)
  klass, args, block = action
  
  if klass.is_a?(Class)
    klass.new(*[self, args].flatten.compact, &block)
  elsif klass.respond_to?(:call)
    lambda do |env|
      klass.call(*[env, self].flatten.compact)
    end
  else
    raise
  end
end