Sha256: ec413b92c9e8d8ab482db031c55c26c93522df6f9bcd9cbe20286a77d8270452

Contents?: true

Size: 1.54 KB

Versions: 4

Compression:

Stored size: 1.54 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

    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 api?
      false
    end

    def alb?
      false
    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 ||= event['queryStringParameters'].try(:to_query)
    end

    def base64_encoded?
      event['isBase64Encoded']
    end

    def request_id
      context.aws_request_id
    end

  end
end

Version data entries

4 entries across 4 versions & 2 rubygems

Version Path
lamby-no-rails-1.0.3 lib/lamby/rack.rb
lamby-1.0.2 lib/lamby/rack.rb
lamby-1.0.1 lib/lamby/rack.rb
lamby-1.0.0 lib/lamby/rack.rb