require 'webrick' require 'json' require 'net/http' require 'uri' require 'base64' require_relative '__NOW_HANDLER_FILE' module NowHandler thread = Thread.new do server = WEBrick::HTTPServer.new :Port => 3000 if Object.const_defined?('Handler') puts 'Handler called' server.mount '/', Handler else server.mount_proc '/' do |req, res| res.body <<-NOW Welcome to Ruby on Now 2.0!!!! Now write proper Ruby functions that will be evaluated NOW end end trap('INT') { server.stop } server.start end def self.now_handler(event:, context:) # thread.join puts "event: #{event}" payload = JSON.parse event['body'] path = payload['path'] headers = payload['headers'] http_method = payload['method'] body = if payload['isBase64Encoded'] Base64.decode64 payload['body'] else payload['body'] end uri = URI("http://0.0.0.0:3000#{path}") response = {} begin res = Net::HTTP.start uri.host, uri.port do |http| req = Kernel.const_get("Net::HTTP::#{http_method.capitalize}").new(uri) req.body = body || '' headers.each {|k,v| req[k] = v} http.request req end response = { statusCode: res.code, headers: res.each_capitalized, body: res.body } rescue Exception => e response = { statusCode: 500, body: e } end response end end