mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
42 lines
1.1 KiB
Ruby
42 lines
1.1 KiB
Ruby
module Puma
|
|
module Utils
|
|
# Performs URI escaping so that you can construct proper
|
|
# query strings faster. Use this rather than the cgi.rb
|
|
# version since it's faster. (Stolen from Camping).
|
|
def self.escape(s)
|
|
s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/n) {
|
|
'%'+$1.unpack('H2'*$1.size).join('%').upcase
|
|
}.tr(' ', '+')
|
|
end
|
|
|
|
|
|
# Unescapes a URI escaped string. (Stolen from Camping).
|
|
def self.unescape(s)
|
|
s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n){
|
|
[$1.delete('%')].pack('H*')
|
|
}
|
|
end
|
|
|
|
# Parses a query string by breaking it up at the '&'
|
|
# and ';' characters. You can also use this to parse
|
|
# cookies by changing the characters used in the second
|
|
# parameter (which defaults to '&;'.
|
|
def self.query_parse(qs, d = '&;')
|
|
params = {}
|
|
(qs||'').split(/[#{d}] */n).inject(params) { |h,p|
|
|
k, v=unescape(p).split('=',2)
|
|
if cur = params[k]
|
|
if cur.class == Array
|
|
params[k] << v
|
|
else
|
|
params[k] = [cur, v]
|
|
end
|
|
else
|
|
params[k] = v
|
|
end
|
|
}
|
|
|
|
return params
|
|
end
|
|
end
|
|
end
|