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_NAME_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 115 def initialize(name, value = nil, charset = 'utf-8') case when name.index(COLON) # Field.new("field-name: field data") @charset = Utilities.blank?(value) ? charset : value @name = name[FIELD_PREFIX] @raw_value = name @value = nil when Utilities.blank?(value) # Field.new("field-name") @name = name @value = nil @raw_value = nil @charset = charset else # Field.new("field-name", "value") @name = name @value = value @raw_value = nil @charset = charset end @name = FIELD_NAME_MAP[@name.to_s.downcase] || @name end
Public Instance Methods
<=>( other )
click to toggle source
# File lib/mail/field.rb, line 185 def <=>( other ) self.field_order_id <=> other.field_order_id end
==( other )
click to toggle source
# File lib/mail/field.rb, line 176 def ==( other ) return false unless other.kind_of?(self.class) match_to_s(other.name, self.name) && match_to_s(other.value, self.value) end
field()
click to toggle source
# File lib/mail/field.rb, line 140 def field _, @value = split(@raw_value) if @raw_value && !@value @field ||= create_field(@name, @value, @charset) end
field=(value)
click to toggle source
# File lib/mail/field.rb, line 136 def field=(value) @field = value end
field_order_id()
click to toggle source
# File lib/mail/field.rb, line 189 def field_order_id @field_order_id ||= (FIELD_ORDER_LOOKUP[self.name.to_s.downcase] || 100) end
inspect()
click to toggle source
# File lib/mail/field.rb, line 161 def inspect "#<#{self.class.name} 0x#{(object_id * 2).to_s(16)} #{instance_variables.map do |ivar| "#{ivar}=#{instance_variable_get(ivar).inspect}" end.join(" ")}>" end
method_missing(name, *args, &block)
click to toggle source
# File lib/mail/field.rb, line 193 def method_missing(name, *args, &block) field.send(name, *args, &block) end
name()
click to toggle source
# File lib/mail/field.rb, line 145 def name @name end
respond_to?(method_name, include_private = false)
click to toggle source
Calls superclass method
# File lib/mail/field.rb, line 202 def respond_to?(method_name, include_private = false) field.respond_to?(method_name, include_private) || super end
respond_to_missing?(method_name, include_private)
click to toggle source
Calls superclass method
# File lib/mail/field.rb, line 198 def respond_to_missing?(method_name, include_private) field.respond_to?(method_name, include_private) || super end
responsible_for?( val )
click to toggle source
# File lib/mail/field.rb, line 181 def responsible_for?( val ) name.to_s.casecmp(val.to_s) == 0 end
same( other )
click to toggle source
# File lib/mail/field.rb, line 171 def same( other ) return false unless other.kind_of?(self.class) match_to_s(other.name, self.name) end
to_s()
click to toggle source
# File lib/mail/field.rb, line 157 def to_s field.to_s end
update(name, value)
click to toggle source
# File lib/mail/field.rb, line 167 def update(name, value) @field = create_field(name, value, @charset) end
value()
click to toggle source
# File lib/mail/field.rb, line 149 def value field.value end
value=(val)
click to toggle source
# File lib/mail/field.rb, line 153 def value=(val) @field = create_field(name, val, @charset) end