Class: SOAP::MIMEMessage::Headers
Class Method Summary collapse
Instance Method Summary collapse
- #add(key, value) ⇒ Object
- #parse(str) ⇒ Object
- #parse_line(line) ⇒ Object
- #parse_rhs(str) ⇒ Object
- #to_s ⇒ Object
Class Method Details
.parse(str) ⇒ Object
47 48 49 |
# File 'lib/soap/mimemessage.rb', line 47 def self.parse(str) new.parse(str) end |
Instance Method Details
#add(key, value) ⇒ Object
95 96 97 98 99 100 101 |
# File 'lib/soap/mimemessage.rb', line 95 def add(key, value) if key != nil and value != nil header = parse_rhs(value) header.key = key self[key.downcase] = header end end |
#parse(str) ⇒ Object
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/soap/mimemessage.rb', line 51 def parse(str) header_cache = nil str = str.lines if str.respond_to?(:lines) # RubyJedi: compatible with Ruby 1.8.6 and above str.each do |line| case line when /^\A[^\: \t]+:\s*.+$/ parse_line(header_cache) if header_cache header_cache = line.sub(/\r?\n\z/, '') when /^\A\s+(.*)$/ # a continuous line at the beginning line crashes here. header_cache << line else raise RuntimeError.new("unexpected header: #{line.inspect}") end end parse_line(header_cache) if header_cache self end |
#parse_line(line) ⇒ Object
70 71 72 73 74 75 76 77 78 |
# File 'lib/soap/mimemessage.rb', line 70 def parse_line(line) if /^\A([^\: \t]+):\s*(.+)\z/ =~ line header = parse_rhs($2.strip) header.key = $1.strip self[header.key.downcase] = header else raise RuntimeError.new("unexpected header line: #{line.inspect}") end end |
#parse_rhs(str) ⇒ Object
80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/soap/mimemessage.rb', line 80 def parse_rhs(str) a = str.split(/;+\s+/) header = Header.new header.str = str header.root = a.shift a.each do |pair| if pair =~ /(\w+)\s*=\s*"?([^"]+)"?/ header[$1.downcase] = $2 else raise RuntimeError.new("unexpected header component: #{pair.inspect}") end end header end |
#to_s ⇒ Object
103 104 105 106 107 |
# File 'lib/soap/mimemessage.rb', line 103 def to_s self.values.collect { |hdr| hdr.to_s }.join("\r\n") end |