Sha256: 74a1fa889ba3b5ea1c21b05b673c6e79c86c33bce9e40030aced4a51a8ba17d4
Contents?: true
Size: 1.92 KB
Versions: 2
Compression:
Stored size: 1.92 KB
Contents
module Lamby class Handler class << self def call(app, event, context, options = {}) new(app, event, context, options).call.response end end def initialize(app, event, context, options = {}) @app = app @event = event @context = context @options = options @called = false end def response { statusCode: status, headers: headers, body: body }.merge(rack_response) end def status @status end def headers @headers end def set_cookies return @set_cookies if defined?(@set_cookies) @set_cookies = if @headers && @headers['Set-Cookie'] @headers.delete('Set-Cookie').split("\n") end end def body @rbody ||= ''.tap do |rbody| @body.each { |part| rbody << part if part } end end def call return self if @called @status, @headers, @body = call_app set_cookies @called = true self end def base64_encodeable?(hdrs = @headers) hdrs && ( hdrs['Content-Transfer-Encoding'] == 'binary' || content_encoding_compressed?(hdrs) || hdrs['X-Lamby-Base64'] == '1' ) end def body64 Base64.strict_encode64(body) end private def rack @rack ||= case @options[:rack] when :rest, :api Lamby::RackRest.new @event, @context when :alb Lamby::RackAlb.new @event, @context else Lamby::RackHttp.new @event, @context end end def rack_response rack.response(self) end def call_app if Debug.on?(@event) Debug.call @event, @context, rack.env else @app.call rack.env end end def content_encoding_compressed?(hdrs) content_encoding_header = hdrs['Content-Encoding'] || '' content_encoding_header.split(', ').any? { |h| ['br', 'gzip'].include?(h) } end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
lamby-2.6.3 | lib/lamby/handler.rb |
lamby-2.6.2 | lib/lamby/handler.rb |