Class: SOAP::MIMEMessage

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

Defined Under Namespace

Classes: Header, Headers, MIMEMessageError, Part

Constant Summary

MultipartContentType =
'multipart/\w+'

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeMIMEMessage

Returns a new instance of MIMEMessage



148
149
150
151
152
153
# File 'lib/soap/mimemessage.rb', line 148

def initialize
  @parts = []
  @headers = Headers.new
  @root = nil
  @boundary = nil
end

Instance Attribute Details

#headersObject (readonly)

Returns the value of attribute headers



159
160
161
# File 'lib/soap/mimemessage.rb', line 159

def headers
  @headers
end

#partsObject (readonly)

Returns the value of attribute parts



159
160
161
# File 'lib/soap/mimemessage.rb', line 159

def parts
  @parts
end

Class Method Details

.parse(head, str) ⇒ Object



155
156
157
# File 'lib/soap/mimemessage.rb', line 155

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

Instance Method Details

#add_attachment(attach) ⇒ Object



209
210
211
212
213
214
215
# File 'lib/soap/mimemessage.rb', line 209

def add_attachment(attach)
  part = Part.new
  part.headers.add("Content-Type", attach.contenttype)
  part.headers.add("Content-ID", attach.mime_contentid)
  part.body = attach.content
  @parts.unshift(part)
end

#add_part(content) ⇒ Object



200
201
202
203
204
205
206
207
# File 'lib/soap/mimemessage.rb', line 200

def add_part(content)
  part = Part.new
  part.headers.add("Content-Type",
    "text/xml; charset=" + XSD::Charset.xml_encoding_label)
  part.headers.add("Content-ID", Attachment.contentid(part))
  part.body = content
  @parts.unshift(part)
end

#boundaryObject



193
194
195
196
197
198
# File 'lib/soap/mimemessage.rb', line 193

def boundary
  if @boundary == nil
    @boundary = "----=Part_" + __id__.to_s + rand.to_s
  end
  @boundary
end

#closeObject



161
162
163
164
165
166
# File 'lib/soap/mimemessage.rb', line 161

def close
  @headers.add(
    "Content-Type",
    "multipart/related; type=\"text/xml\"; boundary=\"#{boundary}\"; start=\"#{@parts[0].contentid}\""
  )
end

#content_strObject



225
226
227
228
229
230
231
232
233
# File 'lib/soap/mimemessage.rb', line 225

def content_str
  str = ''
  @parts.each do |prt|
    str << "--" + boundary + "\r\n"
    str << prt.to_s + "\r\n"
  end
  str << '--' + boundary + "--\r\n"
  str
end

#has_parts?Boolean

Returns:

  • (Boolean)


217
218
219
# File 'lib/soap/mimemessage.rb', line 217

def has_parts?
  (@parts.length > 0)
end

#headers_strObject



221
222
223
# File 'lib/soap/mimemessage.rb', line 221

def headers_str
  @headers.to_s
end

#parse(head, str) ⇒ Object



168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# File 'lib/soap/mimemessage.rb', line 168

def parse(head, str)
  @headers = Headers.parse(head + "\r\n" + "From: jfh\r\n")
  boundary = @headers['content-type']['boundary']
  if boundary != nil
    parts = str.split(/--#{Regexp.quote(boundary)}\s*(?:\r\n|--\r\n)/)
    part = parts.shift	# preamble must be ignored.
    @parts = parts.collect { |part| Part.parse(part) }
  else
    @parts = [Part.parse(str)]
  end
  if @parts.length < 1
    raise MIMEMessageError.new("This message contains no valid parts!")
  end
  self
end

#rootObject



184
185
186
187
188
189
190
191
# File 'lib/soap/mimemessage.rb', line 184

def root
  if @root == nil
    start = @headers['content-type']['start']
    @root = (start && @parts.find { |prt| prt.contentid == start }) ||
	@parts[0]
  end
  @root
end

#to_sObject



235
236
237
# File 'lib/soap/mimemessage.rb', line 235

def to_s
  str = headers_str + "\r\n\r\n" + conent_str
end