class Stark::Rack::Metadata::Middleware

Public Class Methods

new(app, metadata) click to toggle source
# File lib/stark/rack/metadata.rb, line 17
def initialize(app, metadata)
  @app = app
  @handler = Handler.new metadata
  @processor = Processor.new @handler
end

Public Instance Methods

call(env) click to toggle source
# File lib/stark/rack/metadata.rb, line 23
def call(env)
  env['rack.input'] = RewindableInput.new(env['rack.input'])
  status, hdr, body = @app.call env

  if status == 404
    env['rack.input'].rewind

    out       = StringIO.new
    transport = Thrift::IOStreamTransport.new env['rack.input'], out
    protocol  = protocol_factory(env).get_protocol transport

    if @processor.process(protocol, protocol)
      return [200, headers(env), [out.string]]
    end
  end

  [status, hdr, body]
end