Module: Mail::Jenc::RFC2231Encoder

Defined in:
lib/mail/jenc/encoder.rb

Class Method Summary collapse

Class Method Details

.encode(name, options = {}) ⇒ Object



17
18
19
# File 'lib/mail/jenc/encoder.rb', line 17

def encode(name, options = {})
  encode_to_hash(name, options).map { |k, v| "#{k}=#{v}" }.join(";\r\n\s")
end

.encode_to_hash(name, key: 'filename', charset: 'utf-8') ⇒ Object



21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/mail/jenc/encoder.rb', line 21

def encode_to_hash(name, key: 'filename', charset: 'utf-8')
  hexes = name.unpack('H*')[0].scan(/.{2}/).map { |hex| "%#{hex.upcase}" }

  first_hex_num = hex_num(charset.size + key.size + 3)
  if hexes.size <= first_hex_num
    params = { "#{key}*" => "#{charset.downcase}''#{hexes.join}" }
  else
    params = { "#{key}*0*" => "#{charset.downcase}''#{hexes.shift(first_hex_num).join}" }
    slices = hexes.each_slice(hex_num(key.size + 3))
    slices.each_with_index do |sliced, i|
      kc = "#{key}*#{i+1}*"
      params[kc] = sliced.join
    end
  end

  params
end