class Rack::QueryParser
Constants
- COMMON_SEP
- DEFAULT_SEP
- ParamsTooDeepError
-
ParamsTooDeepErroris the old name for the error that is raised when params are recursively nested over the specified limit. Make it the same as asQueryLimitError, so that code that rescuesParamsTooDeepErrorerror to handle bad query strings also now handles other limits.
Attributes
Public Class Methods
# File lib/rack/query_parser.rb, line 36 def self.make_default(param_depth_limit, **options) new(Params, param_depth_limit, **options) end
Source
# File lib/rack/query_parser.rb, line 62 def initialize(params_class, param_depth_limit, bytesize_limit: BYTESIZE_LIMIT, params_limit: PARAMS_LIMIT) @params_class = params_class @param_depth_limit = param_depth_limit @bytesize_limit = bytesize_limit @params_limit = params_limit end
Public Instance Methods
Source
# File lib/rack/query_parser.rb, line 196 def make_params @params_class.new end
# File lib/rack/query_parser.rb, line 200 def new_depth_limit(param_depth_limit) self.class.new @params_class, param_depth_limit end
# File lib/rack/query_parser.rb, line 124 def normalize_params(params, name, v, _depth=nil) _normalize_params(params, name, v, 0) end
normalize_params recursively expands parameters into structural types. If the structural types represented by two different parameter names are in conflict, a ParameterTypeError is raised. The depth argument is deprecated and should no longer be used, it is kept for backwards compatibility with earlier versions of rack.
# File lib/rack/query_parser.rb, line 109 def parse_nested_query(qs, separator = nil) params = make_params each_query_pair(qs, separator) do |k, v| _normalize_params(params, k, v, 0) end return params.to_h end
parse_nested_query expands a query string into structural types. Supported types are Arrays, Hashes and basic value types. It is possible to supply query strings with parameters of conflicting types, in this case a ParameterTypeError is raised. Users are encouraged to return a 400 in this case.
# File lib/rack/query_parser.rb, line 73 def parse_query(qs, separator = nil, &unescaper) params = make_params each_query_pair(qs, separator, unescaper) do |k, v| if cur = params[k] if cur.class == Array params[k] << v else params[k] = [cur, v] end else params[k] = v end end return params.to_h end
Stolen from Mongrel, with some small modifications: Parses a query string by breaking it up at the ‘&’. You can also use this to parse cookies by changing the characters used in the second parameter (which defaults to ‘&’).
# File lib/rack/query_parser.rb, line 94 def parse_query_pairs(qs, separator = nil) pairs = [] each_query_pair(qs, separator) do |k, v| pairs << [k, v] end pairs end
Parses a query string by breaking it up at the ‘&’, returning all key-value pairs as an array of [key, value] arrays. Unlike parse_query, this preserves all duplicate keys rather than collapsing them.