Sha256: e0f53c9472b0a1c6832be42a5a806a20c661b8609677d14be0ad45e8b961a739
Contents?: true
Size: 1.36 KB
Versions: 3
Compression:
Stored size: 1.36 KB
Contents
# frozen_string_literal: true require 'json' require 'stringio' require 'drillbit/responses/invalid_request_body' module Drillbit module Middleware class ParameterParser def initialize(app) @app = app end def call(env) env['QUERY_STRING'] = underscore_query_string(env['QUERY_STRING']) if env['CONTENT_LENGTH'].to_i > 0 && env['CONTENT_TYPE'] =~ /json/ if env['rack.input'] env['rack.input'] = StringIO.new(underscore_request_parameters(env['rack.input'])) elsif env['RACK_INPUT'] env['RACK_INPUT'] = underscore_request_parameters(env['RACK_INPUT']) end end @app.call(env) rescue JSON::ParserError => _error return Responses::InvalidRequestBody.call(env) end private def underscore_request_parameters(request_parameters) data = JSON.load(request_parameters) data = underscore_parameters(data) JSON.dump(data) end def underscore_query_string(query_string) return query_string unless query_string.respond_to? :gsub query_string.gsub(/(?<=\A|&|\?)[^=&]+/) do |match| match.tr('-', '_') end end def underscore_parameters(parameters) return parameters unless parameters.is_a? Hash parameters.each_with_object({}) do |(key, value), hash| value = underscore_parameters(value) if value.is_a? Hash hash[key.tr('-', '_')] = value end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
drillbit-2.3.1 | lib/drillbit/middleware/parameter_parser.rb |
drillbit-2.3.0 | lib/drillbit/middleware/parameter_parser.rb |
drillbit-2.2.2 | lib/drillbit/middleware/parameter_parser.rb |