Module: Stark::Rack::ContentNegotiation

Included in:
Stark::Rack, Metadata::Middleware, REST
Defined in:
lib/stark/rack/content_negotiation.rb

Constant Summary collapse

THRIFT_CONTENT_TYPE =
'application/x-thrift'
THRIFT_JSON_CONTENT_TYPE =
'application/vnd.thrift+json'

Instance Method Summary collapse

Instance Method Details

#accept_json?(env) ⇒ Boolean

Returns:

  • (Boolean)


6
7
8
9
# File 'lib/stark/rack/content_negotiation.rb', line 6

def accept_json?(env)
  env['HTTP_ACCEPT'] == THRIFT_JSON_CONTENT_TYPE ||
    env['HTTP_CONTENT_TYPE'] == THRIFT_JSON_CONTENT_TYPE
end

#headers(env) ⇒ Object



11
12
13
14
15
16
17
# File 'lib/stark/rack/content_negotiation.rb', line 11

def headers(env)
  headers = { 'Content-Type' => THRIFT_CONTENT_TYPE }
  if accept_json?(env)
    headers['Content-Type'] = THRIFT_JSON_CONTENT_TYPE
  end
  headers
end

#protocol_factory(env) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/stark/rack/content_negotiation.rb', line 19

def protocol_factory(env)
  if env['stark.protocol.factory']
    env['stark.protocol.factory']
  else
    if accept_json?(env)
      f = Thrift::JsonProtocolFactory.new
      env['stark.protocol'] = :json
    else
      f = Thrift::BinaryProtocolFactory.new
      env['stark.protocol'] = :binary
    end
    env['stark.protocol.factory'] = f
  end
end