Class: Mail::Ruby18
- Inherits:
-
Object
- Object
- Mail::Ruby18
- Defined in:
- lib/mail/version_specific/ruby_1_8.rb
Class Method Summary collapse
- .b_value_decode(str) ⇒ Object
- .b_value_encode(str, encoding) ⇒ Object
- .bracket(str) ⇒ Object
- .decode_base64(str) ⇒ Object
- .decode_utf7(str) ⇒ Object
- .encode_base64(str) ⇒ Object
- .escape_bracket(str) ⇒ Object
-
.escape_paren(str) ⇒ Object
Escapes any parenthesis in a string that are unescaped.
- .get_constant(klass, string) ⇒ Object
- .has_constant?(klass, string) ⇒ Boolean
- .param_decode(str, encoding) ⇒ Object
- .param_encode(str) ⇒ Object
- .paren(str) ⇒ Object
- .q_value_decode(str) ⇒ Object
- .q_value_encode(str, encoding) ⇒ Object
- .string_byteslice(str, *args) ⇒ Object
- .transcode_charset(str, from_encoding, to_encoding = 'UTF-8') ⇒ Object
Class Method Details
.b_value_decode(str) ⇒ Object
90 91 92 93 94 95 96 97 98 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 90 def Ruby18.b_value_decode(str) match = str.match(/\=\?(.+)?\?[Bb]\?(.*)\?\=/m) if match encoding = match[1] str = Ruby18.decode_base64(match[2]) str = transcode_charset(str, encoding) end str end |
.b_value_encode(str, encoding) ⇒ Object
83 84 85 86 87 88 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 83 def Ruby18.b_value_encode(str, encoding) # Ruby 1.8 requires an encoding to work raise ArgumentError, "Must supply an encoding" if encoding.nil? encoding = encoding.to_s.upcase.gsub('_', '-') [Encodings::Base64.encode(str), normalize_iconv_charset_encoding(encoding)] end |
.bracket(str) ⇒ Object
37 38 39 40 41 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 37 def Ruby18.bracket( str ) str = $1 if str =~ /^\<(.*)?\>$/ str = escape_bracket( str ) '<' + str + '>' end |
.decode_base64(str) ⇒ Object
43 44 45 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 43 def Ruby18.decode_base64(str) Base64.decode64(str) if str end |
.decode_utf7(str) ⇒ Object
79 80 81 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 79 def Ruby18.decode_utf7(str) Net::IMAP.decode_utf7(str) end |
.encode_base64(str) ⇒ Object
47 48 49 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 47 def Ruby18.encode_base64(str) Base64.encode64(str) end |
.escape_bracket(str) ⇒ Object
28 29 30 31 32 33 34 35 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 28 def Ruby18.escape_bracket( str ) re = /\\\>/ str = str.gsub(re) { |s| '>'} re = /\\\</ str = str.gsub(re) { |s| '<'} re = /([\<\>])/ # Only match unescaped parens str.gsub(re) { |s| '\\' + s } end |
.escape_paren(str) ⇒ Object
Escapes any parenthesis in a string that are unescaped. This can’t use the Ruby 1.9.1 regexp feature of negative look behind so we have to do two replacement, first unescape everything, then re-escape it
13 14 15 16 17 18 19 20 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 13 def Ruby18.escape_paren( str ) re = /\\\)/ str = str.gsub(re) { |s| ')'} re = /\\\(/ str = str.gsub(re) { |s| '('} re = /([\(\)])/ # Only match unescaped parens str.gsub(re) { |s| '\\' + s } end |
.get_constant(klass, string) ⇒ Object
55 56 57 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 55 def Ruby18.get_constant(klass, string) klass.const_get( string ) end |
.has_constant?(klass, string) ⇒ Boolean
51 52 53 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 51 def Ruby18.has_constant?(klass, string) klass.constants.include?( string ) end |
.param_decode(str, encoding) ⇒ Object
120 121 122 123 124 125 126 127 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 120 def Ruby18.param_decode(str, encoding) str = URI.unescape(str) if encoding transcode_charset(str, encoding) else str end end |
.param_encode(str) ⇒ Object
129 130 131 132 133 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 129 def Ruby18.param_encode(str) encoding = $KCODE.to_s.downcase language = Configuration.instance.param_encode_language "#{encoding}'#{language}'#{URI.escape(str)}" end |
.paren(str) ⇒ Object
22 23 24 25 26 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 22 def Ruby18.paren( str ) str = $1 if str =~ /^\((.*)?\)$/ str = escape_paren( str ) '(' + str + ')' end |
.q_value_decode(str) ⇒ Object
107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 107 def Ruby18.q_value_decode(str) match = str.match(/\=\?(.+)?\?[Qq]\?(.*)\?\=/m) if match encoding = match[1] string = match[2].gsub(/_/, '=20') # Remove trailing = if it exists in a Q encoding string = string.sub(/\=$/, '') str = Encodings::QuotedPrintable.decode(string) str = transcode_charset(str, encoding) end str end |
.q_value_encode(str, encoding) ⇒ Object
100 101 102 103 104 105 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 100 def Ruby18.q_value_encode(str, encoding) # Ruby 1.8 requires an encoding to work raise ArgumentError, "Must supply an encoding" if encoding.nil? encoding = encoding.to_s.upcase.gsub('_', '-') [Encodings::QuotedPrintable.encode(str), encoding] end |
.string_byteslice(str, *args) ⇒ Object
135 136 137 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 135 def Ruby18.string_byteslice(str, *args) str.slice(*args) end |
.transcode_charset(str, from_encoding, to_encoding = 'UTF-8') ⇒ Object
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/mail/version_specific/ruby_1_8.rb', line 59 def Ruby18.transcode_charset(str, from_encoding, to_encoding = 'UTF-8') case from_encoding when /utf-?7/i decode_utf7(str) else retried = false begin Iconv.conv("#{normalize_iconv_charset_encoding(to_encoding)}//IGNORE", normalize_iconv_charset_encoding(from_encoding), str) rescue Iconv::InvalidEncoding if retried raise else from_encoding = 'ASCII' retried = true retry end end end end |