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.