4
4
5
5
module Mail
6
6
class CommonDateField < NamedStructuredField #:nodoc:
7
- def self . singular?
8
- true
9
- end
7
+ class << self
8
+ def singular?
9
+ true
10
+ end
10
11
11
- def self . normalize_datetime ( string )
12
- if Utilities . blank? ( string )
13
- datetime = ::DateTime . now
14
- else
15
- stripped = string . to_s . gsub ( /\( .*?\) / , '' ) . squeeze ( ' ' )
16
- begin
17
- datetime = ::DateTime . parse ( stripped )
18
- rescue ArgumentError => e
19
- raise unless 'invalid date' == e . message
12
+ def normalize_datetime ( string )
13
+ if Utilities . blank? ( string )
14
+ datetime = ::DateTime . now
15
+ else
16
+ stripped = string . to_s . gsub ( /\( .*?\) / , '' ) . squeeze ( ' ' )
17
+ with_invalid_date_time_error_handling do
18
+ datetime = ::DateTime . parse ( stripped )
19
+ end
20
+ end
21
+
22
+ if datetime
23
+ datetime . strftime ( '%a, %d %b %Y %H:%M:%S %z' )
24
+ else
25
+ string
20
26
end
21
27
end
22
28
23
- if datetime
24
- datetime . strftime ( '%a, %d %b %Y %H:%M:%S %z' )
25
- else
26
- string
29
+ def with_invalid_date_time_error_handling ( & block )
30
+ yield
31
+ rescue ArgumentError => e
32
+ raise unless e . message =~ / \A (invalid date| string length \( \d + \) exceeds the limit \d +) \z /
27
33
end
28
34
end
29
35
@@ -33,9 +39,9 @@ def initialize(value = nil, charset = nil)
33
39
34
40
# Returns a date time object of the parsed date
35
41
def date_time
36
- :: DateTime . parse ( " #{ element . date_string } #{ element . time_string } " )
37
- rescue ArgumentError => e
38
- raise e unless e . message == 'invalid date'
42
+ self . class . with_invalid_date_time_error_handling do
43
+ :: DateTime . parse ( " #{ element . date_string } #{ element . time_string } " )
44
+ end
39
45
end
40
46
41
47
def default
0 commit comments