Class: SOAP::MIMEMessage

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

Defined Under Namespace

Classes: Header, Headers, MIMEMessageError, Part

Constant Summary collapse

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
# File 'lib/soap/mimemessage.rb', line 148

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

Instance Attribute Details

#headersObject (readonly)

Returns the value of attribute headers


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

def headers
  @headers
end

#partsObject (readonly)

Returns the value of attribute parts


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

def parts
  @parts
end

Class Method Details

.parse(head, str) ⇒ Object


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

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

Instance Method Details

#add_attachment(attach) ⇒ Object


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

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


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

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


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

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

#closeObject


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

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

#content_strObject


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

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)

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

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

#headers_strObject


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

def headers_str
  @headers.to_s
end

#parse(head, str) ⇒ Object


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

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


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

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


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

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