Class: Mail::Field
- Includes:
- Comparable, Patterns
- Defined in:
- lib/mail/field.rb
Overview
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.
Defined Under Namespace
Classes: FieldError, ParseError, SyntaxError
Constant Summary collapse
- STRUCTURED_FIELDS =
%w[ bcc cc content-description content-disposition content-id content-location content-transfer-encoding content-type date from in-reply-to keywords message-id mime-version received references reply-to resent-bcc resent-cc resent-date resent-from resent-message-id resent-sender resent-to return-path sender to ]
- KNOWN_FIELDS =
STRUCTURED_FIELDS + ['comments', 'subject']
- FIELD_ORDER =
%w[ return-path received resent-date resent-from resent-sender resent-to resent-cc resent-bcc resent-message-id date from sender reply-to to cc bcc message-id in-reply-to references subject comments keywords mime-version content-type content-transfer-encoding content-location content-disposition content-description ]
Constants included from Patterns
Patterns::ATOM_UNSAFE, Patterns::CONTROL_CHAR, Patterns::CRLF, Patterns::FIELD_BODY, Patterns::FIELD_LINE, Patterns::FIELD_NAME, Patterns::FWS, Patterns::HEADER_LINE, Patterns::PHRASE_UNSAFE, Patterns::QP_SAFE, Patterns::QP_UNSAFE, Patterns::TEXT, Patterns::TOKEN_UNSAFE, Patterns::WSP
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #field ⇒ Object
- #field=(value) ⇒ Object
-
#initialize(name, value = nil, charset = 'utf-8') ⇒ Field
constructor
Accepts a string:.
- #method_missing(name, *args, &block) ⇒ Object
- #name ⇒ Object
- #same(other) ⇒ Object (also: #==)
- #to_s ⇒ Object
- #update(name, value) ⇒ Object
- #value ⇒ Object
- #value=(val) ⇒ Object
Constructor Details
#initialize(name, value = nil, charset = 'utf-8') ⇒ Field
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', => 'UTF-8'])
78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/mail/field.rb', line 78 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 |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
132 133 134 |
# File 'lib/mail/field.rb', line 132 def method_missing(name, *args, &block) field.send(name, *args, &block) end |
Instance Method Details
#<=>(other) ⇒ Object
126 127 128 129 130 |
# File 'lib/mail/field.rb', line 126 def <=>( other ) self_order = FIELD_ORDER.rindex(self.name.to_s.downcase) || 100 other_order = FIELD_ORDER.rindex(other.name.to_s.downcase) || 100 self_order <=> other_order end |
#field ⇒ Object
96 97 98 |
# File 'lib/mail/field.rb', line 96 def field @field end |
#field=(value) ⇒ Object
92 93 94 |
# File 'lib/mail/field.rb', line 92 def field=(value) @field = value end |
#name ⇒ Object
100 101 102 |
# File 'lib/mail/field.rb', line 100 def name field.name end |
#same(other) ⇒ Object Also known as: ==
120 121 122 |
# File 'lib/mail/field.rb', line 120 def same( other ) match_to_s(other.name, field.name) end |
#to_s ⇒ Object
112 113 114 |
# File 'lib/mail/field.rb', line 112 def to_s field.to_s end |
#update(name, value) ⇒ Object
116 117 118 |
# File 'lib/mail/field.rb', line 116 def update(name, value) create_field(name, value, charset) end |
#value ⇒ Object
104 105 106 |
# File 'lib/mail/field.rb', line 104 def value field.value end |
#value=(val) ⇒ Object
108 109 110 |
# File 'lib/mail/field.rb', line 108 def value=(val) create_field(name, val, charset) end |