Class: Gateway

Inherits:
Roda show all
Defined in:
lib/modulator/gateway/gateway.rb

Constant Summary collapse

DUMMY_AWS_EVENT =
Utils.load_json my_dir.parent.join('gateway_event.json')

Instance Method Summary collapse

Instance Method Details

#build_route(r, verb, fragments) ⇒ Object



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
# 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) ⇒ Object



96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# 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