Class: SOAP::MIMEMessage::Headers

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

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.parse(str) ⇒ Object



46
47
48
# File 'lib/action_web_service/soap/mimemessage.rb', line 46

def self.parse(str)
  new.parse(str)
end

Instance Method Details

#add(key, value) ⇒ Object



93
94
95
96
97
98
99
# File 'lib/action_web_service/soap/mimemessage.rb', line 93

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



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/action_web_service/soap/mimemessage.rb', line 50

def parse(str)
  header_cache = nil
  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



68
69
70
71
72
73
74
75
76
# File 'lib/action_web_service/soap/mimemessage.rb', line 68

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



78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/action_web_service/soap/mimemessage.rb', line 78

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



101
102
103
104
105
# File 'lib/action_web_service/soap/mimemessage.rb', line 101

def to_s
  self.values.collect { |hdr|
	hdr.to_s
  }.join("\r\n")
end