-
Notifications
You must be signed in to change notification settings - Fork 935
/
date_field.rb
57 lines (50 loc) · 1.63 KB
/
date_field.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# encoding: utf-8
#
# = Date Field
#
# The Date field inherits from StructuredField and handles the Date: header
# field in the email.
#
# Sending date to a mail message will instantiate a Mail::Field object that
# has a DateField as it's field type. This includes all Mail::CommonAddress
# module instance methods.
#
# There must be excatly one Date field in an RFC2822 email.
#
# == Examples:
#
# mail = Mail.new
# mail.date = 'Mon, 24 Nov 1997 14:22:01 -0800'
# mail.date #=> #<DateTime: 211747170121/86400,-1/3,2299161>
# mail.date.to_s #=> 'Mon, 24 Nov 1997 14:22:01 -0800'
# mail[:date] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::DateField:0x180e1c4
# mail['date'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::DateField:0x180e1c4
# mail['Date'] #=> '#<Mail::Field:0x180e5e8 @field=#<Mail::DateField:0x180e1c4
#
require 'mail/fields/common/common_date'
module Mail
class DateField < StructuredField
include Mail::CommonDate
FIELD_NAME = 'date'
CAPITALIZED_FIELD = "Date"
def initialize(value = nil, charset = 'utf-8')
self.charset = charset
if value.blank?
value = ::DateTime.now.strftime('%a, %d %b %Y %H:%M:%S %z')
else
value = strip_field(FIELD_NAME, value)
value.to_s.gsub!(/\(.*?\)/, '')
value = ::DateTime.parse(value.to_s.squeeze(" ")).strftime('%a, %d %b %Y %H:%M:%S %z')
end
super(CAPITALIZED_FIELD, value, charset)
rescue ArgumentError => e
raise e unless "invalid date"==e.message
end
def encoded
do_encode(CAPITALIZED_FIELD)
end
def decoded
do_decode
end
end
end