class Gateway

Constants

DUMMY_AWS_EVENT

Public Instance Methods

build_route(r, verb, fragments) click to toggle source
# File lib/modulator/gateway/gateway.rb, line 67
def build_route(r, verb, fragments)
  # end of path, tail is gone: [] -> nil
  return unless fragments

  # execute when all fragments are processed
  execute_lambda(r, verb) and return if fragments.empty?

  # traverse fragments
  fragment = fragments.first
  tail = fragments[1..-1] || []

  # dynamic fragment
  if fragment.start_with?(':')
    r.on String do |value|
      fragment = fragment[1..-1]
      @path_params[fragment] = value
      build_route(r, verb, tail)
      r.pass # continue loop
    end

  # static fragment
  else
    r.on fragment do
      build_route(r, verb, tail)
      r.pass # continue loop
    end
  end
end
execute_lambda(r, verb) click to toggle source
# File lib/modulator/gateway/gateway.rb, line 96
def execute_lambda(r, verb)
  r.send(verb.downcase) do
    puts "Path params: #{@path_params}"

    # build aws event
    aws_event = DUMMY_AWS_EVENT.merge(
      'pathParameters' => @path_params,
      'queryStringParameters' => {},
      'headers' => @headers,
      'body' => request.params.to_json
    )

    # build aws context
    aws_context = {}

    # execute lambda
    result = Dir.chdir(opts[:app_dir] || '.') do
      AwsLambdaHandler.call(event: aws_event, context: aws_context)
    end

    # render
    response.status = result[:statusCode]
    result[:body]
  end
end