class Saddle::Middleware::Response::ParseJson

Public: Parse response bodies as JSON.

Constants

CONTENT_TYPE
MIME_TYPE

Public Instance Methods

call(env) click to toggle source
# File lib/saddle/middleware/response/parse_json.rb, line 13
def call(env)
  result = @app.call(env)

  if parse_response?(result)
    result.env[:body] = ::JSON.parse(result.env[:body])
  end
  result
end

Private Instance Methods

has_body?(result) click to toggle source
# File lib/saddle/middleware/response/parse_json.rb, line 29
def has_body?(result)
  result.env[:body] &&
    (!result.env[:body].respond_to?(:to_str) || # must already be in string format
     !result.env[:body].empty?) # or must be non-empty
end
parse_response?(result) click to toggle source
# File lib/saddle/middleware/response/parse_json.rb, line 25
def parse_response?(result)
  has_body?(result) && (response_type(result) == MIME_TYPE)
end
response_type(result) click to toggle source
# File lib/saddle/middleware/response/parse_json.rb, line 35
def response_type(result)
  return nil unless result.headers
  type = result.headers[CONTENT_TYPE].to_s
  type = type.split(';', 2).first if type.index(';')
  type
end