Sha256: 25a4424b06cf474b7a5b1e16df59372e532b7c60c0b3553c2d424ba6c0bf2669

Contents?: true

Size: 1.84 KB

Versions: 3

Compression:

Stored size: 1.84 KB

Contents

module Lamby
  class Rack

    include SamHelpers

    LAMBDA_EVENT = 'lambda.event'.freeze
    LAMBDA_CONTEXT = 'lambda.context'.freeze
    HTTP_X_REQUESTID = 'HTTP_X_REQUEST_ID'.freeze
    HTTP_COOKIE = 'HTTP_COOKIE'.freeze

    attr_reader :event, :context

    def initialize(event, context)
      @event = event
      @context = context
    end

    def env
      @env ||= env_base.merge!(env_headers)
    end

    def response(_handler)
      {}
    end

    def multi_value?
      false
    end

    private

    def env_base
      raise NotImplementedError
    end

    def env_headers
      headers.transform_keys do |key|
        "HTTP_#{key.to_s.upcase.tr '-', '_'}"
      end.tap do |hdrs|
        hdrs[HTTP_X_REQUESTID] = request_id
      end
    end

    def content_type
      headers.delete('Content-Type') || headers.delete('content-type') || headers.delete('CONTENT_TYPE')
    end

    def content_length
      bytesize = body.bytesize.to_s if body
      headers.delete('Content-Length') || headers.delete('content-length') || headers.delete('CONTENT_LENGTH') || bytesize
    end

    def body
      @body ||= if event['body'] && base64_encoded?
        Base64.decode64 event['body']
      else
        event['body']
      end
    end

    def headers
      @headers ||= event['headers'] || {}
    end

    def query_string
      @query_string ||= if event.key?('rawQueryString')
        event['rawQueryString']
      elsif event.key?('multiValueQueryStringParameters')
        query = event['multiValueQueryStringParameters'] || {}
        query.map do |key, value|
          value.map{ |v| "#{key}=#{v}" }.join('&')
        end.flatten.join('&')
      else
        event['queryStringParameters'].try(:to_query)
      end
    end

    def base64_encoded?
      event['isBase64Encoded']
    end

    def request_id
      context.aws_request_id
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
lamby-2.1.0 lib/lamby/rack.rb
lamby-2.0.1 lib/lamby/rack.rb
lamby-2.0.0 lib/lamby/rack.rb