Module: Rack::Utils
- Defined in:
- lib/ext/rack/utils.rb
Constant Summary collapse
- DEFAULT_SEP =
/[&;] */n
Class Method Summary collapse
- .bytesize(string) ⇒ Object
- .escape(s) ⇒ Object
- .key_space_limit ⇒ Object
- .key_space_limit=(value) ⇒ Object
- .parse_query(qs, d = nil) ⇒ Object
-
.unescape(s) ⇒ Object
Unescapes a URI escaped string.
Class Method Details
.bytesize(string) ⇒ Object
59 60 61 |
# File 'lib/ext/rack/utils.rb', line 59 def self.bytesize(string) string.bytesize end |
.escape(s) ⇒ Object
15 16 17 18 19 |
# File 'lib/ext/rack/utils.rb', line 15 def self.escape(s) s.to_s.gsub(/([^ a-zA-Z0-9_.-]+)/n) { '%'+$1.unpack('H2'*bytesize($1)).join('%').upcase }.tr(' ', '+') end |
.key_space_limit ⇒ Object
9 10 11 |
# File 'lib/ext/rack/utils.rb', line 9 def self.key_space_limit @@key_space_limit end |
.key_space_limit=(value) ⇒ Object
5 6 7 |
# File 'lib/ext/rack/utils.rb', line 5 def self.key_space_limit=(value) @@key_space_limit = value end |
.parse_query(qs, d = nil) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'lib/ext/rack/utils.rb', line 28 def self.parse_query(qs, d = nil) params = {} max_key_space = key_space_limit bytes = 0 (qs || '').split(d ? /[#{d}] */n : DEFAULT_SEP).each do |p| k, v = p.split('=', 2).map { |x| unescape(x) } if k bytes += k.size if bytes > max_key_space raise RangeError, "exceeded available parameter key space" end end 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 end |
.unescape(s) ⇒ Object
Unescapes a URI escaped string. (Stolen from Camping).
22 23 24 25 26 |
# File 'lib/ext/rack/utils.rb', line 22 def self.unescape(s) s.tr('+', ' ').gsub(/((?:%[0-9a-fA-F]{2})+)/n){ [$1.delete('%')].pack('H*') } end |