class Drillbit::Middleware::ParameterParser
Public Class Methods
new(app)
click to toggle source
# File lib/drillbit/middleware/parameter_parser.rb, line 11 def initialize(app) @app = app end
Public Instance Methods
call(env)
click to toggle source
# File lib/drillbit/middleware/parameter_parser.rb, line 15 def call(env) env['QUERY_STRING'] = underscore_query_string(env['QUERY_STRING']) if env['CONTENT_LENGTH'].to_i.positive? && env['CONTENT_TYPE'] =~ /json/ if env['rack.input'] underscored_input = underscore_request_parameters(env['rack.input']) env['rack.input'] = StringIO.new(underscored_input) env['CONTENT_LENGTH'] = underscored_input.bytesize elsif env['RACK_INPUT'] env['RACK_INPUT'] = underscore_request_parameters(env['RACK_INPUT']) env['CONTENT_LENGTH'] = env['RACK_INPUT'].bytesize end end @app.call(env) rescue JSON::ParserError => _error return Responses::InvalidRequestBody.call(env) end
Private Instance Methods
underscore_parameters(parameters)
click to toggle source
# File lib/drillbit/middleware/parameter_parser.rb, line 59 def underscore_parameters(parameters) return parameters unless parameters.is_a? Hash parameters.each_with_object({}) do |(key, value), hash| value = case value when Hash underscore_parameters(value) when Array value.map do |item| underscore_parameters(item) end else value end hash[Drillbit::Utilities::String.underscore(key)] = value end end
underscore_query_string(query_string)
click to toggle source
# File lib/drillbit/middleware/parameter_parser.rb, line 48 def underscore_query_string(query_string) return query_string unless query_string.respond_to? :gsub query_string.gsub(/(?<=\A|&|\?)[^=&]+/) do |match| unescaped = CGI.unescape(match) underscored = Drillbit::Utilities::String.underscore(unescaped) CGI.escape(underscored) end end
underscore_request_parameters(request_parameters)
click to toggle source
# File lib/drillbit/middleware/parameter_parser.rb, line 36 def underscore_request_parameters(request_parameters) request_parameter_string = if request_parameters.respond_to?(:read) request_parameters.read else request_parameters.to_s end data = JSON.parse(request_parameter_string) data = underscore_parameters(data) JSON.dump(data) end