Class: MailParser::HeaderItem

Inherits:
Object
  • Object
show all
Defined in:
lib/mailparser.rb

Overview

Header field

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, raw, opt = {}) ⇒ HeaderItem

Returns a new instance of HeaderItem.

Parameters:

  • name (String)

    header field name

  • raw (String)

    header field value

  • opt (Hash) (defaults to: {})

    options

Options Hash (opt):

  • :decode_mime_header (Boolean) — default: false

    decode MIME header

  • :output_charset (String) — default: nil

    output encoding name

  • :strict (Boolean) — default: false

    raise ParseError exception when message is invalid



60
61
62
63
64
65
# File 'lib/mailparser.rb', line 60

def initialize(name, raw, opt={})
  @name = name
  @raw = raw
  @parsed = nil
  @opt = opt
end

Instance Attribute Details

#rawString (readonly)

Returns raw field value.

Returns:

  • (String)

    raw field value



68
69
70
# File 'lib/mailparser.rb', line 68

def raw
  @raw
end

Instance Method Details

#parseheader field value

Returns parsed header object.

Returns:

  • (header field value)

    parsed header object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
# 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