Sha256: b89fcb25469db249c891832ef413db694ff844ffcff8ff319c4e1872df3c674f

Contents?: true

Size: 1.51 KB

Versions: 3

Compression:

Stored size: 1.51 KB

Contents

require 'deas/exceptions'
require 'deas/sinatra_runner'

module Deas

  class HandlerProxy

    attr_reader :handler_class_name, :handler_class

    def initialize(handler_class_name)
      @handler_class_name = handler_class_name
    end

    def validate!
      raise NotImplementedError
    end

    def run(server_data, sinatra_call)
      runner = SinatraRunner.new(self.handler_class, {
        :sinatra_call    => sinatra_call,
        :request         => sinatra_call.request,
        :response        => sinatra_call.response,
        :session         => sinatra_call.session,
        :params          => sinatra_call.params,
        :logger          => server_data.logger,
        :router          => server_data.router,
        :template_source => server_data.template_source
      })

      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.handler_class'] = self.handler_class
        env['deas.handler']       = runner.handler
        env['deas.params']        = runner.params

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

      runner.run
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
deas-0.38.0 lib/deas/handler_proxy.rb
deas-0.37.1 lib/deas/handler_proxy.rb
deas-0.37.0 lib/deas/handler_proxy.rb