Class: SOAP::MIMEMessage::Headers

Inherits:
Hash
  • Object
show all
Defined in:
lib/soap/mimemessage.rb

Class Method Summary collapse

Instance Method Summary collapse

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_sObject


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