class RackOnLambda::Adapters::Responses::RestApiResponse

Attributes

body[R]
headers[R]
status[R]

Public Class Methods

new(status, headers, body) click to toggle source
# File lib/rack_on_lambda/adapters/responses/rest_api_response.rb, line 7
def initialize(status, headers, body)
  @status = status
  @headers = headers
  @body = stringify_body(body)
end

Public Instance Methods

as_json(_options = {}) click to toggle source
# File lib/rack_on_lambda/adapters/responses/rest_api_response.rb, line 13
def as_json(_options = {})
  {
    'statusCode' => status,
    'headers' => headers,
    'isBase64Encoded' => base64_encoded?,
    'body' => body
  }
end

Private Instance Methods

base64_encoded?() click to toggle source
# File lib/rack_on_lambda/adapters/responses/rest_api_response.rb, line 26
def base64_encoded?
  return @base64_encoded if defined?(@base64_encoded)

  encoding = canonical_headers.fetch('content-transfer-encoding', '')
  @base64_encoded = encoding.casecmp('binary').zero?
end
canonical_headers() click to toggle source
# File lib/rack_on_lambda/adapters/responses/rest_api_response.rb, line 33
def canonical_headers
  @canonical_headers ||= headers.transform_keys do |key|
    key.to_s.downcase
  end
end
stringify_body(body) click to toggle source
# File lib/rack_on_lambda/adapters/responses/rest_api_response.rb, line 39
def stringify_body(body)
  result = ''
  body.each { |chunk| result += chunk.to_s }

  base64_encoded? ? Base64.strict_encode64(result) : result
end