class Kaffe::Base

Attributes

env[R]
params[R]
request[R]
response[R]

Public Class Methods

call(env) click to toggle source
# File lib/kaffe/base.rb, line 71
def call(env); instance.call(env) end
instance() click to toggle source
# File lib/kaffe/base.rb, line 72
def instance; @instance ||= new end
middleware() click to toggle source
# File lib/kaffe/base.rb, line 73
def middleware; @middleware ||= [] end
new(app=nil) click to toggle source
# File lib/kaffe/base.rb, line 16
def initialize(app=nil)
  @app = app
  @templates = {}
end
new(*args) click to toggle source
Calls superclass method
# File lib/kaffe/base.rb, line 64
def new(*args)
  builder = Rack::Builder.new
  middleware.each {|m, args, block| builder.use(m,*args,&block) }
  builder.run super
  builder.to_app
end
use(m, *args, &block) click to toggle source
# File lib/kaffe/base.rb, line 75
def use(m, *args, &block)
  middleware << [m, args, block]
end

Public Instance Methods

call(env) click to toggle source
# File lib/kaffe/base.rb, line 21
def call(env)
  @env = env
  @request = Rack::Request.new(env)
  @response = Rack::Response.new
  run! {
    # handle if errors were sent from route
      env['kaffe.error'] = catch(:error) {
        route!
        action!
      }
      error!
  }

  if @app
    @app.call(@response.finish)
  else
    @response.finish
  end
end
run!(&block) click to toggle source
# File lib/kaffe/base.rb, line 41
def run! &block
  begin
    res = catch(:success) { block.call }
    case res
      when String
        @response.body = [res]
      when Array
        @response.status = res[0]
        res[1].each {|h, v| @response.headers[h] = v }
        @response.body = res[2]
      else
        puts "Should not be here"
        @response.status = 500
    end
  rescue # Something gone wrong and havent been handeled.
    puts "WARN: Define your error handlers!!!"
    @response.status = env['kaffe.error'].first
    @response.body = [env['kaffe.error'].last]
  end
end