class MailParser::HeaderItem

Header field

Attributes

raw[R]

@return [String] raw field value

Public Class Methods

new(name, raw, opt={}) click to toggle source

@param [String] name header field name @param [String] raw header field value @param [Hash] opt options @option opt [Boolean] :decode_mime_header (false) decode MIME header @option opt [String] :output_charset (nil) output encoding name @option opt [Boolean] :strict (false) raise ParseError exception when message is invalid

# File lib/mailparser.rb, line 60
def initialize(name, raw, opt={})
  @name = name
  @raw = raw
  @parsed = nil
  @opt = opt
end

Public Instance Methods

parse() click to toggle source

@return [header field value] parsed header object

# File lib/mailparser.rb, line 71
def parse()
  return @parsed if @parsed
  if HEADER_PARSER.key? @name then
    begin
      @parsed = HEADER_PARSER[@name].parse(@name, @raw, @opt)
    rescue ParseError
      raise if @opt[:strict]
      @parsed = Loose.parse(@name, @raw, @opt)
    end
  else
    r = @raw.chomp.gsub(/\r?\n/, '').gsub(/\t/, ' ')
    if @opt[:decode_mime_header] then
      @parsed = RFC2047.decode(r, @opt)
    elsif @opt[:output_charset]
      @parsed = @opt[:charset_converter].call(@opt[:output_charset], @opt[:output_charset], r)
    else
      @parsed = r
    end
  end
  if @parsed
    class <<@parsed
      attr_accessor :raw
    end
    @parsed.raw = @raw
  end

  # Content-Type, Content-Disposition parameter for RFC2231
  if ["content-type", "content-disposition"].include? @name
    new = RFC2231.parse_param @parsed.params, @opt
    @parsed.params.replace new
  end

  return @parsed
end