Parent

Class Index [+]

Quicksearch

Mail::AttachmentsList

Public Class Methods

new(parts_list) click to toggle source
    # File lib/mail/attachments_list.rb, line 4
 4:     def initialize(parts_list)
 5:       @parts_list = parts_list
 6:       @content_disposition_type = 'attachment'
 7:       parts_list.map { |p|
 8:         if p.content_type == "message/rfc822"
 9:           Mail.new(p.body).attachments
10:         elsif p.parts.empty?
11:           p if p.attachment?
12:         else
13:           p.attachments
14:         end
15:       }.flatten.compact.each { |a| self << a }
16:       self
17:     end

Public Instance Methods

[](index_value) click to toggle source

Returns the attachment by filename or at index.

mail.attachments = File.read(‘test.png’) mail.attachments = File.read(‘test.jpg’)

mail.attachments.filename #=> ‘test.png’ mail.attachments[1].filename #=> ‘test.jpg‘

    # File lib/mail/attachments_list.rb, line 31
31:     def [](index_value)
32:       if index_value.is_a?(Fixnum)
33:         self.fetch(index_value)
34:       else
35:         self.select { |a| a.filename == index_value }.first
36:       end
37:     end
[]=(name, value) click to toggle source
    # File lib/mail/attachments_list.rb, line 39
39:     def []=(name, value)
40:       default_values = { :content_type => "#{set_mime_type(name)}; filename=\"#{name}\"",
41:                          :content_transfer_encoding => "#{guess_encoding}",
42:                          :content_disposition => "#{@content_disposition_type}; filename=\"#{name}\"" }
43: 
44:       if value.is_a?(Hash)
45: 
46:         default_values[:body] = value.delete(:content) if value[:content]
47: 
48:         default_values[:body] = value.delete(:data) if value[:data]
49: 
50:         encoding = value.delete(:transfer_encoding) || value.delete(:encoding)
51:         if encoding
52:           if Mail::Encodings.defined? encoding
53:             default_values[:content_transfer_encoding] = encoding
54:           else
55:             raise "Do not know how to handle Content Transfer Encoding #{encoding}, please choose either quoted-printable or base64"
56:           end
57:         end
58: 
59:         if value[:mime_type]
60:           default_values[:content_type] = value.delete(:mime_type)
61:           @mime_type = MIME::Types[default_values[:content_type]].first
62:           default_values[:content_transfer_encoding] = guess_encoding
63:         end
64: 
65:         hash = default_values.merge(value)
66:       else
67:         default_values[:body] = value
68:         hash = default_values
69:       end
70: 
71:       if hash[:body].respond_to? :force_encoding and hash[:body].respond_to? :valid_encoding?
72:         if not hash[:body].valid_encoding? and default_values[:content_transfer_encoding].downcase == "binary"
73:           hash[:body].force_encoding("BINARY")
74:         end
75:       end
76:       
77:       attachment = Part.new(hash)
78:       attachment.add_content_id(hash[:content_id])
79: 
80:       @parts_list << attachment
81:     end
guess_encoding() click to toggle source

Uses the mime type to try and guess the encoding, if it is a binary type, or unknown, then we set it to binary, otherwise as set to plain text

    # File lib/mail/attachments_list.rb, line 85
85:     def guess_encoding
86:       if @mime_type && !@mime_type.binary?
87:         "7bit"
88:       else
89:         "binary"
90:       end
91:     end
inline() click to toggle source
    # File lib/mail/attachments_list.rb, line 19
19:     def inline
20:       @content_disposition_type = 'inline'
21:       self
22:     end
set_mime_type(filename) click to toggle source
     # File lib/mail/attachments_list.rb, line 93
 93:     def set_mime_type(filename)
 94:       # Have to do this because MIME::Types is not Ruby 1.9 safe yet
 95:       if RUBY_VERSION >= '1.9'
 96:         new_file = String.new(filename).force_encoding(Encoding::BINARY)
 97:         ext = new_file.split('.'.force_encoding(Encoding::BINARY)).last
 98:         filename = "file.#{ext}".force_encoding('US-ASCII')
 99:       end
100:       @mime_type = MIME::Types.type_for(filename).first
101:     end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.