lib/watchdocs/rails/middleware.rb in watchdocs-rails-0.1.4 vs lib/watchdocs/rails/middleware.rb in watchdocs-rails-0.2.0
- old
+ new
@@ -33,22 +33,22 @@
def catch_request(env)
@report[:request] = {
method: env['REQUEST_METHOD'],
url: env['PATH_INFO'],
- query_string_params: CGI.parse(env['QUERY_STRING']),
- body: parse_body(env['rack.input'].read),
+ query_string_params: Rack::Utils.parse_nested_query(env['QUERY_STRING']),
+ body: parse_request_body(env['rack.input'].read),
headers: request_headers(env)
}
end
def catch_response(response)
status, headers, body = *response
@report[:response] = {
status: status,
headers: headers.to_hash.upcased_keys,
- body: parse_body(body_string(body))
+ body: parse_response_body(body_string(body))
}
end
def match_endpoint_pattern
@report[:endpoint] = begin
@@ -80,14 +80,26 @@
body_string = ''
body.each { |line| body_string += line }
body_string
end
- def parse_body(body)
+ def parse_response_body(body)
return if body.empty?
JSON.parse(body).filter_data
rescue JSON::ParserError
'Invalid JSON'
+ end
+
+ def parse_request_body(body)
+ return if body.empty?
+ JSON.parse(body).filter_data
+ rescue JSON::ParserError
+ begin
+ Rack::Utils.parse_nested_query(body)
+ .filter_data
+ rescue StandardError
+ 'Request body format not supported'
+ end
end
end
end
end