730e2efdc80b4813c16b394fbb39afd935bda449
[feedcatcher.git] / vendor / rails / actionpack / lib / action_controller / vendor / rack-1.0 / rack / auth / digest / params.rb
1 module Rack
2 module Auth
3 module Digest
4 class Params < Hash
5
6 def self.parse(str)
7 split_header_value(str).inject(new) do |header, param|
8 k, v = param.split('=', 2)
9 header[k] = dequote(v)
10 header
11 end
12 end
13
14 def self.dequote(str) # From WEBrick::HTTPUtils
15 ret = (/\A"(.*)"\Z/ =~ str) ? $1 : str.dup
16 ret.gsub!(/\\(.)/, "\\1")
17 ret
18 end
19
20 def self.split_header_value(str)
21 str.scan( /(\w+\=(?:"[^\"]+"|[^,]+))/n ).collect{ |v| v[0] }
22 end
23
24 def initialize
25 super
26
27 yield self if block_given?
28 end
29
30 def [](k)
31 super k.to_s
32 end
33
34 def []=(k, v)
35 super k.to_s, v.to_s
36 end
37
38 UNQUOTED = ['qop', 'nc', 'stale']
39
40 def to_s
41 inject([]) do |parts, (k, v)|
42 parts << "#{k}=" + (UNQUOTED.include?(k) ? v.to_s : quote(v))
43 parts
44 end.join(', ')
45 end
46
47 def quote(str) # From WEBrick::HTTPUtils
48 '"' << str.gsub(/[\\\"]/o, "\\\1") << '"'
49 end
50
51 end
52 end
53 end
54 end
55