class Lamby::RackAlb

Public Instance Methods

alb?() click to toggle source
# File lib/lamby/rack_alb.rb, line 4
def alb?
  true
end
multi_value?() click to toggle source
# File lib/lamby/rack_alb.rb, line 8
def multi_value?
  event.key? 'multiValueHeaders'
end
response(handler) click to toggle source
# File lib/lamby/rack_alb.rb, line 12
def response(handler)
  hhdrs = handler.headers
  multivalue_headers = hhdrs.transform_values { |v| Array.wrap(v) } if multi_value?
  status_description = "#{handler.status} #{::Rack::Utils::HTTP_STATUS_CODES[handler.status]}"
  base64_encode = hhdrs['Content-Transfer-Encoding'] == 'binary' || hhdrs['X-Lamby-Base64'] == '1'
  body = Base64.strict_encode64(handler.body) if base64_encode
  { multiValueHeaders: multivalue_headers,
    statusDescription: status_description,
    isBase64Encoded: base64_encode,
    body: body }.compact
end

Private Instance Methods

env_base() click to toggle source
# File lib/lamby/rack_alb.rb, line 26
def env_base
  { ::Rack::REQUEST_METHOD => event['httpMethod'],
    ::Rack::SCRIPT_NAME => '',
    ::Rack::PATH_INFO => event['path'] || '',
    ::Rack::QUERY_STRING => query_string,
    ::Rack::SERVER_NAME => headers['host'],
    ::Rack::SERVER_PORT => headers['x-forwarded-port'],
    ::Rack::SERVER_PROTOCOL => 'HTTP/1.1',
    ::Rack::RACK_VERSION => ::Rack::VERSION,
    ::Rack::RACK_URL_SCHEME => headers['x-forwarded-proto'],
    ::Rack::RACK_INPUT => StringIO.new(body || ''),
    ::Rack::RACK_ERRORS => $stderr,
    ::Rack::RACK_MULTITHREAD => false,
    ::Rack::RACK_MULTIPROCESS => false,
    ::Rack::RACK_RUNONCE => false,
    LAMBDA_EVENT => event,
    LAMBDA_CONTEXT => context
  }.tap do |env|
    ct = content_type
    cl = content_length
    env['CONTENT_TYPE'] = ct if ct
    env['CONTENT_LENGTH'] = cl if cl
  end
end
headers() click to toggle source
Calls superclass method Lamby::Rack#headers
# File lib/lamby/rack_alb.rb, line 51
def headers
  @headers ||= multi_value? ? headers_multi : super
end
headers_multi() click to toggle source
# File lib/lamby/rack_alb.rb, line 55
def headers_multi
  (event['multiValueHeaders'] || {}).transform_values do |v|
    v.is_a?(Array) ? v.first : v
  end
end
query_string() click to toggle source
Calls superclass method Lamby::Rack#query_string
# File lib/lamby/rack_alb.rb, line 61
def query_string
  @query_string ||= multi_value? ? query_string_multi : super
end
query_string_multi() click to toggle source
# File lib/lamby/rack_alb.rb, line 65
def query_string_multi
  query = event['multiValueQueryStringParameters'] || {}
  string = query.map do |key, value|
    value.map{ |v| "#{key}=#{v}" }.join('&')
  end.flatten.join('&')
end