class ContentDisposition

Constants

ATTACHMENT
DEFAULT_TO_ASCII
INLINE
RFC_5987_ESCAPED_CHAR
TRADITIONAL_ESCAPED_CHAR
VERSION

Attributes

to_ascii[RW]
disposition[R]
filename[R]
to_ascii[R]

Public Class Methods

attachment(filename = nil) click to toggle source
# File lib/content_disposition.rb, line 14
def attachment(filename = nil)
  format(disposition: ATTACHMENT, filename: filename)
end
call(**options)
Alias for: format
format(**options) click to toggle source
# File lib/content_disposition.rb, line 22
def format(**options)
  new(**options).to_s
end
Also aliased as: call
inline(filename = nil) click to toggle source
# File lib/content_disposition.rb, line 18
def inline(filename = nil)
  format(disposition: INLINE, filename: filename)
end
new(disposition:, filename:, to_ascii: nil) click to toggle source
# File lib/content_disposition.rb, line 32
def initialize(disposition:, filename:, to_ascii: nil)
  unless [ATTACHMENT, INLINE].include?(disposition.to_s)
    fail ArgumentError, "unknown disposition: #{disposition.inspect}"
  end

  @disposition = disposition
  @filename    = filename
  @to_ascii    = to_ascii || self.class.to_ascii || DEFAULT_TO_ASCII
end

Public Instance Methods

ascii_filename() click to toggle source
# File lib/content_disposition.rb, line 52
def ascii_filename
  'filename="' + percent_escape(to_ascii[filename], TRADITIONAL_ESCAPED_CHAR) + '"'
end
to_s() click to toggle source
# File lib/content_disposition.rb, line 42
def to_s
  if filename
    "#{disposition}; #{ascii_filename}; #{utf8_filename}"
  else
    "#{disposition}"
  end
end
utf8_filename() click to toggle source
# File lib/content_disposition.rb, line 58
def utf8_filename
  "filename*=UTF-8''" + percent_escape(filename, RFC_5987_ESCAPED_CHAR)
end

Private Instance Methods

percent_escape(string, pattern) click to toggle source
# File lib/content_disposition.rb, line 64
def percent_escape(string, pattern)
  string.gsub(pattern) do |char|
    char.bytes.map { |byte| "%%%02X" % byte }.join
  end
end