Class: HT2P::Header
- Inherits:
-
Hash
- Object
- Hash
- HT2P::Header
- Defined in:
- lib/ht2p/header.rb
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.load(io) ⇒ Object
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/ht2p/header.rb', line 2 def self.load(io) code = nil header = self.new key = nil while line = io.gets line.chop! line.empty? && break if md = %r!HTTP[\w\./]+\s+(\d+)!.match(line) code = md[1].to_i elsif md = /(.+?):\s*(.*)/.match(line) key, val = md[1].downcase, md[2] if header.key? key header.add key, val else header[key] = val end elsif md = /\s+(.*)/.match(line) header.append key, md[1] end end [code, header] end |
Instance Method Details
#add(key, val) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 |
# File 'lib/ht2p/header.rb', line 28 def add(key, val) if key? key if self[key].is_a? Array self[key] << val else self[key] = [self[key], val] end else self[key] = [val] end end |
#append(key, val) ⇒ Object
40 41 42 43 44 45 46 |
# File 'lib/ht2p/header.rb', line 40 def append(key, val) if self[key].is_a? Array self[key].last << val else self[key] << val end end |
#format(method, uri) ⇒ Object
62 63 64 65 66 67 68 |
# File 'lib/ht2p/header.rb', line 62 def format(method, uri) "%s %s%s HTTP/1.1\r\n" % [ method.to_s.upcase, uri.path, uri.query && "?#{uri.query}" ] << "Host: #{uri.host}\r\n" << to_s << "\r\n" end |
#to_s ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/ht2p/header.rb', line 48 def to_s inject('') do |ret, (key, val)| if val.is_a? Array val.each do |v| ret << "#{key}: #{v}\r\n" end else ret << "#{key}: #{val}\r\n" end ret end end |