Class: Mail::Ruby18

Inherits:
Object
  • Object
show all
Defined in:
lib/mail/version_specific/ruby_1_8.rb

Class Method Summary collapse

Class Method Details

.b_value_decode(str) ⇒ Object



47
48
49
50
51
52
53
54
# File 'lib/mail/version_specific/ruby_1_8.rb', line 47

def Ruby18.b_value_decode(str)
  match = str.match(/\=\?(.+)?\?[Bb]\?(.+)?\?\=/m)
  if match
    encoding = match[1]
    str = Ruby18.decode_base64(match[2])
  end
  str
end

.b_value_encode(str, encoding) ⇒ Object

Raises:

  • (ArgumentError)


40
41
42
43
44
45
# File 'lib/mail/version_specific/ruby_1_8.rb', line 40

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), encoding]
end

.decode_base64(str) ⇒ Object



24
25
26
# File 'lib/mail/version_specific/ruby_1_8.rb', line 24

def Ruby18.decode_base64(str)
  Base64.decode64(str)
end

.encode_base64(str) ⇒ Object



28
29
30
# File 'lib/mail/version_specific/ruby_1_8.rb', line 28

def Ruby18.encode_base64(str)
  Base64.encode64(str)
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



9
10
11
12
13
14
15
16
# File 'lib/mail/version_specific/ruby_1_8.rb', line 9

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



36
37
38
# File 'lib/mail/version_specific/ruby_1_8.rb', line 36

def Ruby18.get_constant(klass, string)
  klass.const_get( string )
end

.has_constant?(klass, string) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
# File 'lib/mail/version_specific/ruby_1_8.rb', line 32

def Ruby18.has_constant?(klass, string)
  klass.constants.include?( string )
end

.param_decode(str, encoding) ⇒ Object



72
73
74
# File 'lib/mail/version_specific/ruby_1_8.rb', line 72

def Ruby18.param_decode(str, encoding)
  URI.unescape(str)
end

.param_encode(str) ⇒ Object



76
77
78
79
80
# File 'lib/mail/version_specific/ruby_1_8.rb', line 76

def Ruby18.param_encode(str)
  encoding = $KCODE.to_s.downcase
  language = Mail::Configuration.instance.param_encode_language
  "#{encoding}'#{language}'#{URI.escape(str)}"
end

.paren(str) ⇒ Object



18
19
20
21
22
# File 'lib/mail/version_specific/ruby_1_8.rb', line 18

def Ruby18.paren( str )
  str = $1 if str =~ /^\((.*)?\)$/
  str = escape_paren( str )
  '(' + str + ')'
end

.q_value_decode(str) ⇒ Object



63
64
65
66
67
68
69
70
# File 'lib/mail/version_specific/ruby_1_8.rb', line 63

def Ruby18.q_value_decode(str)
  match = str.match(/\=\?(.+)?\?[Qq]\?(.+)?\?\=/m)
  if match
    encoding = match[1]
    str = Encodings::QuotedPrintable.decode(match[2])
  end
  str
end

.q_value_encode(str, encoding) ⇒ Object

Raises:

  • (ArgumentError)


56
57
58
59
60
61
# File 'lib/mail/version_specific/ruby_1_8.rb', line 56

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