Sha256: 216fe990c96147278d6f19e1c38b745475a5004aae07a57fb07a3097eadada50

Contents?: true

Size: 964 Bytes

Versions: 17

Compression:

Stored size: 964 Bytes

Contents

class Rack::App::Endpoint::Catcher

  def initialize(app, endpoint_properties)
    @app = app
    @endpoint_properties = endpoint_properties
  end

  def call(env)
    handle_rack_response do
      handle_response_body(env) do
        @app.call(env)
      end
    end
  end

  protected

  def handle_rack_response
    catch(:rack_response) { return yield }.finish
  end

  def handle_response_body(env)
    body = catch(:response_body) { return yield }
    request_handler = env[Rack::App::Constants::ENV::HANDLER]
    set_response_body(request_handler, body)
    throw :rack_response, request_handler.response
  end

  EXTNAME = ::Rack::App::Constants::ENV::EXTNAME

  def set_response_body(handler, response_body)
    extname = handler.request.env[EXTNAME]
    handler.response.headers.merge!(@endpoint_properties.serializer.response_headers_for(extname))
    handler.response.write(@endpoint_properties.serializer.serialize(extname, response_body))
  end

end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
rack-app-7.5.2 lib/rack/app/endpoint/catcher.rb
rack-app-7.5.1 lib/rack/app/endpoint/catcher.rb
rack-app-7.5.0 lib/rack/app/endpoint/catcher.rb
rack-app-7.4.0 lib/rack/app/endpoint/catcher.rb
rack-app-7.3.2 lib/rack/app/endpoint/catcher.rb
rack-app-7.3.1 lib/rack/app/endpoint/catcher.rb
rack-app-7.3.0 lib/rack/app/endpoint/catcher.rb
rack-app-7.2.2 lib/rack/app/endpoint/catcher.rb
rack-app-7.2.1 lib/rack/app/endpoint/catcher.rb
rack-app-7.2.0 lib/rack/app/endpoint/catcher.rb
rack-app-7.1.0 lib/rack/app/endpoint/catcher.rb
rack-app-7.0.0 lib/rack/app/endpoint/catcher.rb
rack-app-6.8.0 lib/rack/app/endpoint/catcher.rb
rack-app-6.7.1 lib/rack/app/endpoint/catcher.rb
rack-app-6.7.0 lib/rack/app/endpoint/catcher.rb
rack-app-6.6.0 lib/rack/app/endpoint/catcher.rb
rack-app-6.5.0 lib/rack/app/endpoint/catcher.rb