Class: Maze::Servlets::ReflectiveServlet
- Inherits:
-
BaseServlet
- Object
- WEBrick::HTTPServlet::AbstractServlet
- BaseServlet
- Maze::Servlets::ReflectiveServlet
- Defined in:
- lib/maze/servlets/reflective_servlet.rb
Overview
Receives HTTP requests and responds according to the parameters given, which are:
-
delay_ms - milliseconds to wait before responding
-
status - HTTP response code
For GET requests these are expected to passed as GET parameters, for POST requests they are expected to be given as JSON fields.
Instance Method Summary collapse
-
#do_GET(request, response) ⇒ Object
Accepts a GET request to provide a reflective response to.
-
#do_OPTIONS(request, response) ⇒ Object
Logs and returns a set of valid headers for this servlet.
-
#do_POST(request, response) ⇒ Object
Accepts a POST request to provide a reflective response to.
- #reflect(response, delay_ms, status) ⇒ Object
Instance Method Details
#do_GET(request, response) ⇒ Object
Accepts a GET request to provide a reflective response to.
17 18 19 20 21 |
# File 'lib/maze/servlets/reflective_servlet.rb', line 17 def do_GET(request, response) delay_ms = request.query['delay_ms'] status = request.query['status'] reflect response, delay_ms, status end |
#do_OPTIONS(request, response) ⇒ Object
Logs and returns a set of valid headers for this servlet.
63 64 65 66 67 |
# File 'lib/maze/servlets/reflective_servlet.rb', line 63 def do_OPTIONS(request, response) super response.header['Access-Control-Allow-Methods'] = 'GET, POST, OPTIONS' end |
#do_POST(request, response) ⇒ Object
Accepts a POST request to provide a reflective response to.
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
# File 'lib/maze/servlets/reflective_servlet.rb', line 27 def do_POST(request, response) content_type = request['Content-Type'] # For JSON, pull the instructions from the body. Otherwise, take them from the query string. if content_type == 'application/json' body = JSON.parse(request.body) delay_ms = body['delay_ms'] status = body['status'] else query = Rack::Utils.parse_nested_query(request.query_string) delay_ms = query['delay_ms'] status = query['status'] end reflect response, delay_ms, status rescue JSON::ParserError => e msg = "Unable to parse request as JSON: #{e.}" $logger.error msg response.status = 418 rescue StandardError => e $logger.error "Invalid request: #{e.}" response.status = 500 end |
#reflect(response, delay_ms, status) ⇒ Object
52 53 54 55 56 57 |
# File 'lib/maze/servlets/reflective_servlet.rb', line 52 def reflect(response, delay_ms, status) sleep delay_ms.to_i / 1000 unless delay_ms.nil? response.status = status || 200 response.header['Access-Control-Allow-Origin'] = '*' response.body = "Returned status #{status} after waiting #{delay_ms} ms" end |