class Mail::Field
Provides a single class to call to create a new structured or unstructured field. Works out per RFC what field of field it is being given and returns the correct field of class back on new.
Per RFC 2822¶ ↑
2.2. Header Fields Header fields are lines composed of a field name, followed by a colon (":"), followed by a field body, and terminated by CRLF. A field name MUST be composed of printable US-ASCII characters (i.e., characters that have values between 33 and 126, inclusive), except colon. A field body may be composed of any US-ASCII characters, except for CR and LF. However, a field body may contain CRLF when used in header "folding" and "unfolding" as described in section 2.2.3. All field bodies MUST conform to the syntax described in sections 3 and 4 of this standard.
Constants
- FIELDS_MAP
- FIELD_ORDER
- FIELD_ORDER_LOOKUP
- KNOWN_FIELDS
- STRUCTURED_FIELDS
Public Class Methods
new(name, value = nil, charset = 'utf-8')
click to toggle source
Accepts a string:
Field.new("field-name: field data")
Or name, value pair:
Field.new("field-name", "value")
Or a name by itself:
Field.new("field-name")
Note, does not want a terminating carriage return. Returns self appropriately parsed. If value is not a string, then it will be passed through as is, for example, content-type field can accept an array with the type and a hash of parameters:
Field.new('content-type', ['text', 'plain', {:charset => 'UTF-8'}])
# File lib/mail/field.rb, line 110 def initialize(name, value = nil, charset = 'utf-8') case when name =~ /:/ # Field.new("field-name: field data") charset = value unless value.blank? name, value = split(name) create_field(name, value, charset) when name !~ /:/ && value.blank? # Field.new("field-name") create_field(name, nil, charset) else # Field.new("field-name", "value") create_field(name, value, charset) end return self end
Public Instance Methods
<=>( other )
click to toggle source
# File lib/mail/field.rb, line 158 def <=>( other ) self.field_order_id <=> other.field_order_id end
field()
click to toggle source
# File lib/mail/field.rb, line 128 def field @field end
field=(value)
click to toggle source
# File lib/mail/field.rb, line 124 def field=(value) @field = value end
field_order_id()
click to toggle source
# File lib/mail/field.rb, line 162 def field_order_id @field_order_id ||= (FIELD_ORDER_LOOKUP[self.name.to_s.downcase] || 100) end
method_missing(name, *args, &block)
click to toggle source
# File lib/mail/field.rb, line 166 def method_missing(name, *args, &block) field.send(name, *args, &block) end
name()
click to toggle source
# File lib/mail/field.rb, line 132 def name field.name end
same( other )
click to toggle source
# File lib/mail/field.rb, line 152 def same( other ) match_to_s(other.name, field.name) end
Also aliased as: ==
to_s()
click to toggle source
# File lib/mail/field.rb, line 144 def to_s field.to_s end
update(name, value)
click to toggle source
# File lib/mail/field.rb, line 148 def update(name, value) create_field(name, value, charset) end
value()
click to toggle source
# File lib/mail/field.rb, line 136 def value field.value end
value=(val)
click to toggle source
# File lib/mail/field.rb, line 140 def value=(val) create_field(name, val, charset) end
Private Instance Methods
create_field(name, value, charset)
click to toggle source
# File lib/mail/field.rb, line 190 def create_field(name, value, charset) begin self.field = new_field(name, value, charset) rescue Mail::Field::ParseError => e self.field = Mail::UnstructuredField.new(name, value) self.field.errors << [name, value, e] self.field end end
new_field(name, value, charset)
click to toggle source
# File lib/mail/field.rb, line 200 def new_field(name, value, charset) lower_case_name = name.to_s.downcase if field_klass = FIELDS_MAP[lower_case_name] field_klass.new(value, charset) else OptionalField.new(name, value, charset) end end
split(raw_field)
click to toggle source
# File lib/mail/field.rb, line 183 def split(raw_field) match_data = raw_field.mb_chars.match(FIELD_SPLIT) [match_data[1].to_s.mb_chars.strip, match_data[2].to_s.mb_chars.strip] rescue STDERR.puts "WARNING: Could not parse (and so ignoring) '#{raw_field}'" end