class Deas::HandlerProxy

Attributes

handler_class[R]
handler_class_name[R]

Public Class Methods

new(handler_class_name) click to toggle source
# File lib/deas/handler_proxy.rb, line 10
def initialize(handler_class_name)
  @handler_class_name = handler_class_name
end

Public Instance Methods

run(server_data, request_data) click to toggle source
# File lib/deas/handler_proxy.rb, line 18
def run(server_data, request_data)
  # captures are not part of Deas' intended behavior and route matching -
  # they are a side-effect of using Sinatra.  remove them so they won't
  # be relied upon in Deas apps.  Remove all of this when Sinatra is removed.
  request_data.params.delete(:captures)
  request_data.params.delete('captures')

  # splats that Sinatra provides aren't used by Deas - they are a
  # side-effect of using Sinatra.  remove them so they won't be relied upon
  # in Deas apps.  Remove all of this when Sinatra is removed.
  request_data.params.delete(:splat)
  request_data.params.delete('splat')

  runner = DeasRunner.new(self.handler_class, {
    :logger          => server_data.logger,
    :router          => server_data.router,
    :template_source => server_data.template_source,
    :request         => request_data.request,
    :route_path      => request_data.route_path,
    :params          => request_data.params
  })

  runner.request.env.tap do |env|
    # make runner data available to Rack (ie middlewares)
    # this is specifically needed by the Logging middleware
    # this is also needed by the Sinatra error handlers so they can provide
    # error context.  This may change when we eventually remove Sinatra.
    env['deas.route_path']    = runner.route_path
    env['deas.handler_class'] = self.handler_class
    env['deas.handler']       = runner.handler
    env['deas.params']        = runner.params
    env['deas.splat']         = runner.splat

    # this handles the verbose logging (it is a no-op if summary logging)
    env['deas.logging'].call "  Route:   #{runner.route_path.inspect}"
    env['deas.logging'].call "  Handler: #{self.handler_class.name}"
    env['deas.logging'].call "  Params:  #{runner.params.inspect}"
    env['deas.logging'].call "  Splat:   #{runner.splat.inspect}" if !runner.splat.nil?
  end

  runner.run
end
validate!() click to toggle source
# File lib/deas/handler_proxy.rb, line 14
def validate!
  raise NotImplementedError
end