Class: Mail::Field
- Inherits:
-
Object
- Object
- 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::TEXT, Patterns::TOKEN_UNSAFE, Patterns::WSP
Instance Method Summary collapse
- #<=>(other) ⇒ Object
- #field ⇒ Object
- #field=(value) ⇒ Object
-
#initialize(name, value = nil) ⇒ Field
constructor
Accepts a string:.
- #method_missing(name, *args, &block) ⇒ Object
- #name ⇒ Object
- #same(other) ⇒ Object
- #to_s ⇒ Object
- #update(name, value) ⇒ Object
- #value ⇒ Object
- #value=(str) ⇒ Object
Methods included from Patterns
Constructor Details
#initialize(name, value = nil) ⇒ 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'])
68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/mail/field.rb', line 68 def initialize(name, value = nil) case when name =~ /:/ && value.blank? # Field.new("field-name: field data") name, value = split(name) create_field(name, value) when name !~ /:/ && value.blank? # Field.new("field-name") create_field(name, nil) else # Field.new("field-name", "value") create_field(name, value) end return self end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args, &block) ⇒ Object
119 120 121 |
# File 'lib/mail/field.rb', line 119 def method_missing(name, *args, &block) field.send(name, *args, &block) end |
Instance Method Details
#<=>(other) ⇒ Object
113 114 115 116 117 |
# File 'lib/mail/field.rb', line 113 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
85 86 87 |
# File 'lib/mail/field.rb', line 85 def field @field end |
#field=(value) ⇒ Object
81 82 83 |
# File 'lib/mail/field.rb', line 81 def field=(value) @field = value end |
#name ⇒ Object
89 90 91 |
# File 'lib/mail/field.rb', line 89 def name field.name end |
#same(other) ⇒ Object
109 110 111 |
# File 'lib/mail/field.rb', line 109 def same( other ) match_to_s(other.name, field.name) end |
#to_s ⇒ Object
101 102 103 |
# File 'lib/mail/field.rb', line 101 def to_s field.to_s end |
#update(name, value) ⇒ Object
105 106 107 |
# File 'lib/mail/field.rb', line 105 def update(name, value) create_field(name, value) end |
#value ⇒ Object
93 94 95 |
# File 'lib/mail/field.rb', line 93 def value field.value end |
#value=(str) ⇒ Object
97 98 99 |
# File 'lib/mail/field.rb', line 97 def value=(str) create_field(name, str) end |