class FauxLambda

Constants

Call
VERSION

Public Class Methods

new(options) click to toggle source
# File lib/faux_lambda.rb, line 11
def initialize(options)
  @bind = options[:bind] || '127.0.0.1'
  @port = options[:port] || 9123
end

Public Instance Methods

handle(&block) click to toggle source
# File lib/faux_lambda.rb, line 16
def handle(&block)
  Rack::Handler::WEBrick.run(
    lambda do |env|
      _, version, _, function_name, _ = env['REQUEST_PATH'].split('/')
      raise "Unknown version #{version}" unless version == '2015-03-31'
      qs = Rack::Utils.parse_nested_query(env["QUERY_STRING"])
      qualifier = qs["Qualifier"]
      payload = env['rack.input'].read

      call = Call.new(function_name, qualifier, payload)
      begin
        reply = block.call(call)
        if reply.nil?
          status_code = '404'
          reply = 'Not found'
        elsif reply == :fail
          status_code = '400'
          reply = 'Failed'
        else
          status_code = '200'
        end
        log(function_name, qualifier, payload, status_code, reply)
      rescue => e
        reply = ''
        log(function_name, qualifier, payload, '200', e)
      end

      headers = {'Content-Type' => 'application/octet-stream'}
      [status_code, headers, [reply]]
    end,
    Host: @bind,
    Port: @port,
    Logger: WEBrick::Log.new($stderr, WEBrick::Log::ERROR),
    AccessLog: [['/dev/null', WEBrick::AccessLog::COMMON_LOG_FORMAT]]
  )
end

Private Instance Methods

log(function_name, qualifier, payload, status_code, reply) click to toggle source
# File lib/faux_lambda.rb, line 55
def log(function_name, qualifier, payload, status_code, reply)
  qualifier ||= "$LATEST"
  puts "#{function_name}:#{qualifier} called with '#{payload}', replying #{status_code}: '#{reply}'"
end