class RackOnLambda::Adapters::RestApi
Attributes
context[R]
event[R]
Public Class Methods
new(context:, event:)
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 8 def initialize(context:, event:) @context = context @event = event.deep_stringify_keys end
Public Instance Methods
env()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 13 def env @env ||= default_env.merge(env_request_metadata) .merge(env_headers) .merge(env_params) .merge(env_body) end
response(status, headers, body)
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 20 def response(status, headers, body) Responses::RestApiResponse.new(status, headers, body).as_json end
Private Instance Methods
default_env()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 26 def default_env { 'SCRIPT_NAME' => '', 'rack.version' => Rack::VERSION, 'rack.errors' => $stderr, 'rack.multithread' => true, 'rack.multiprocess' => true, 'rack.run_once' => false } end
env_body()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 37 def env_body result = event['body'] || '' result = Base64.decode64(result) if event['isBase64Encoded'] { 'rack.input' => StringIO.new(result).set_encoding(Encoding::BINARY), 'CONTENT_LENGTH' => result.bytesize.to_s } end
env_headers()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 47 def env_headers result = {} http_headers.each_pair do |header, value| key = key_for_header(header) result[key] = value.to_s end result end
env_params()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 56 def env_params { 'QUERY_STRING' => query_string } end
env_request_metadata()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 62 def env_request_metadata { 'REQUEST_METHOD' => event['httpMethod'], 'PATH_INFO' => path_info, 'SERVER_NAME' => server_name, 'SERVER_PORT' => server_port.to_s, 'rack.url_scheme' => url_scheme } end
http_headers()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 72 def http_headers event['headers'] || {} end
key_for_header(header)
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 76 def key_for_header(header) key = header.upcase.tr('-', '_') case key when 'CONTENT_LENGTH', 'CONTENT_TYPE' then key else "HTTP_#{key}" end end
path_info()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 84 def path_info event['path'] || '' end
query_string()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 88 def query_string return @query_string if defined?(@query_string) query = Query.new event['multiValueQueryStringParameters']&.each_pair do |key, value| query.add(key, value) end @query_string = query.to_s end
server_name()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 98 def server_name http_headers['Host'] || 'localhost' end
server_port()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 102 def server_port http_headers['X-Forwarded-Port'] || 443 end
url_scheme()
click to toggle source
# File lib/rack_on_lambda/adapters/rest_api.rb, line 106 def url_scheme http_headers['CloudFront-Forwarded-Proto'] || http_headers['X-Forwarded-Proto'] || 'https' end