main_type()
click to toggle source
# File lib/mail/fields/content_type_field.rb, line 51
51: def main_type
52: @main_type ||= element.main_type
53: end
# File lib/mail/fields/content_type_field.rb, line 81
81: def ContentTypeField.generate_boundary
82: "--==_mimepart_#{Mail.random_tag}"
83: end
# File lib/mail/fields/content_type_field.rb, line 10
10: def initialize(value = nil, charset = 'utf-8')
11: self.charset = charset
12: if value.class == Array
13: @main_type = value[0]
14: @sub_type = value[1]
15: @parameters = ParameterHash.new.merge!(value.last)
16: else
17: @main_type = nil
18: @sub_type = nil
19: @parameters = nil
20: value = strip_field(FIELD_NAME, value)
21: end
22: super(CAPITALIZED_FIELD, value, charset)
23: self.parse
24: self
25: end
# File lib/mail/fields/content_type_field.rb, line 43
43: def attempt_to_clean
44: # Sanitize the value, handle special cases
45: @element ||= Mail::ContentTypeElement.new(sanatize(value))
46: rescue
47: # All else fails, just get the MIME media type
48: @element ||= Mail::ContentTypeElement.new(get_mime_type(value))
49: end
# File lib/mail/fields/content_type_field.rb, line 119
119: def decoded
120: if parameters.length > 0
121: p = "; #{parameters.decoded}"
122: else
123: p = ""
124: end
125: "#{content_type}" + p
126: end
# File lib/mail/fields/content_type_field.rb, line 63
63: def default
64: decoded
65: end
# File lib/mail/fields/content_type_field.rb, line 35
35: def element
36: begin
37: @element ||= Mail::ContentTypeElement.new(value)
38: rescue
39: attempt_to_clean
40: end
41: end
TODO: Fix this up
# File lib/mail/fields/content_type_field.rb, line 110
110: def encoded
111: if parameters.length > 0
112: p = ";\r\n\s#{parameters.encoded}\r\n"
113: else
114: p = ""
115: end
116: "#{CAPITALIZED_FIELD}: #{content_type}" + p
117: end
# File lib/mail/fields/content_type_field.rb, line 97
97: def filename
98: case
99: when parameters['filename']
100: @filename = parameters['filename']
101: when parameters['name']
102: @filename = parameters['name']
103: else
104: @filename = nil
105: end
106: @filename
107: end
# File lib/mail/fields/content_type_field.rb, line 51
51: def main_type
52: @main_type ||= element.main_type
53: end
# File lib/mail/fields/content_type_field.rb, line 69
69: def parameters
70: unless @parameters
71: @parameters = ParameterHash.new
72: element.parameters.each { |p| @parameters.merge!(p) }
73: end
74: @parameters
75: end
# File lib/mail/fields/content_type_field.rb, line 27
27: def parse(val = value)
28: unless val.blank?
29: self.value = val
30: @element = nil
31: element
32: end
33: end
# File lib/mail/fields/content_type_field.rb, line 59
59: def string
60: "#{main_type}/#{sub_type}"
61: end
# File lib/mail/fields/content_type_field.rb, line 93
93: def stringify(params)
94: params.map { |k,v| "#{k}=#{Encodings.param_encode(v)}" }.join("; ")
95: end
# File lib/mail/fields/content_type_field.rb, line 176
176: def get_mime_type( val )
177: case
178: when val =~ /^([\w\d\-_]+)\/([\w\d\-_]+);.+$/
179: "#{$1}/#{$2}"
180: else
181: 'text/plain'
182: end
183: end
# File lib/mail/fields/content_type_field.rb, line 130
130: def method_missing(name, *args, &block)
131: if name.to_s =~ /([\w_]+)=/
132: self.parameters[$1] = args.first
133: @value = "#{content_type}; #{stringify(parameters)}"
134: else
135: super
136: end
137: end
Various special cases from random emails found that I am not going to change the parser for
# File lib/mail/fields/content_type_field.rb, line 141
141: def sanatize( val )
142: case
143: when val.chomp =~ /^\s*([\w\d\-_]+)\/([\w\d\-_]+)\s*;;+(.*)$/
144: # Handles 'text/plain;; format="flowed"' (double semi colon)
145: "#{$1}/#{$2}; #{$3}"
146: when val.chomp =~ /^\s*([\w\d\-_]+)\/([\w\d\-_]+)\s*;(ISO[\w\d\-_]+)$/
147: # Microsoft helper:
148: # Handles 'type/subtype;ISO-8559-1'
149: "#{$1}/#{$2}; charset=#{quote_atom($3)}"
150: when val.chomp =~ /^text;?$/
151: # Handles 'text;' and 'text'
152: "text/plain;"
153: when val.chomp =~ /^(\w+);\s(.*)$/
154: # Handles 'text; <parameters>'
155: "text/plain; #{$2}"
156: when val =~ /([\w\d\-_]+\/[\w\d\-_]+);\scharset="charset="(\w+)""/
157: # Handles text/html; charset="charset="GB2312""
158: "#{$1}; charset=#{quote_atom($2)}"
159: when val =~ /([\w\d\-_]+\/[\w\d\-_]+);\s+(.*)/
160: type = $1
161: # Handles misquoted param values
162: # e.g: application/octet-stream; name=archiveshelp1[1].htm
163: # and: audio/x-midi;\r\n\sname=Part .exe
164: params = $2.to_s.split(/\s+/)
165: params = params.map { |i| i.to_s.chomp.strip }
166: params = params.map { |i| i.split(/\s*\=\s*/) }
167: params = params.map { |i| "#{i[0]}=#{dquote(i[1].to_s)}" }.join('; ')
168: "#{type}; #{params}"
169: when val =~ /^\s*$/
170: 'text/plain'
171: else
172: ''
173: end
174: end
Disabled; run with --debug to generate this.
Generated with the Darkfish Rdoc Generator 1.1.6.