mail_address 1.2.5 → 1.2.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 00b852f21398b48df2bae70d1eecaff6cb1cb854
4
- data.tar.gz: 20386d2df3abc16316bc8f3afcb8cd0fd4e347b4
3
+ metadata.gz: 1aac359fd813893b39d93b4378c7913764a689b2
4
+ data.tar.gz: e2d4344aebabbc322ac97e09a4f7e504311e68ac
5
5
  SHA512:
6
- metadata.gz: f461cfbc103b2262c0b00063cd4436cd4deeb42273c25d88faf8ff4d379954676afaf953588ae00fcf64c6d1997176281002c861029b2e68931d49364e3fc715
7
- data.tar.gz: 3010f823b4f93827beaad03472908b67ae601f2b9a94cc31a0ca4c47cf90019af353273098cb5d810097cad1148b5358d5d031fd760f24bcd29fc02e2a2cf2b6
6
+ metadata.gz: 7eb4f797e2644adb1ac98916cdf8df42ab31b6449c54c530cfc73bbc43f87b5a1d89356ed7eb895f79d86e3eb0c4abbdb546487134637113be9402b4449d4a74
7
+ data.tar.gz: 543d58abd737430b13931dcd2dd404bab9e8abf8fe2128d4acc49849b7ced18a54cf1db5e91b6f1a384180cf32c10e9a1d9aa2c1968aa271926a54311ad3e3d4
data/README.md CHANGED
@@ -2,20 +2,19 @@
2
2
 
3
3
  MailAddress is a port of Mail::Address from Perl.
4
4
 
5
- [mail](https://github.com/mikel/mail) is a great gem library. But some email addresses are unparsable with it. In perl, [Mail::Address](http://search.cpan.org/~markov/MailTools-2.14/lib/Mail/Address.pod) is a very common library to parse an email address. Mail::Address conviniently can parse even NOT RFC-compliant email addresses such as:
5
+ [mail](https://github.com/mikel/mail) is a great gem library. But some email addresses are unparsable with it. In perl, [Mail::Address](http://search.cpan.org/~markov/MailTools-2.14/lib/Mail/Address.pod) is a very common library to parse email addresses. Mail::Address conviniently can parse even non-RFC-compliant email addresses such as:
6
6
 
7
7
  ```rb
8
8
  # mail gem cannot parse the following addresses
9
9
  Ello [Do Not Reply] <do-not-reply@ello.co> # [, ] are not permitted according to RFC5322
10
10
  大阪 太郎<osaka@example.com> # no whitespace just before `<`
11
11
  ```
12
- But Mail::Address has some bad points (below). These are fixed in MailAddress.
12
+ But Mail::Address(Perl) has some bad points (below). These are fixed in MailAddress.
13
13
 
14
14
  - if no ending parenthesis in name part, cannot parse correctly.
15
15
  - Modifications of name part are too much.
16
16
 
17
- However, MailAddress module cannnot parse whitespace-separated addresses.
18
- Many people could paste email addresses from Excel or the other spreadsheets. To accomplish this, also ported from a parser part of [Google Closure Library](https://github.com/google/closure-library/blob/master/closure/goog/format/emailaddress.js).
17
+ Many people copy and paste email addresses from Excel or the other spreadsheets. In this case, addresses are separated by whitespace(tab or space). To enable to parse this, also ported from a parser part of [Google Closure Library](https://github.com/google/closure-library/blob/master/closure/goog/format/emailaddress.js).
19
18
 
20
19
  ## Installation
21
20
 
@@ -60,9 +59,19 @@ p addrs[1].host # "example.jp"
60
59
  p addrs[1].user # "osaka"
61
60
  p addrs[1].original # "大阪 太郎 <osaka@example.jp>"
62
61
  ```
62
+
63
63
  `address.name` and `address.phrase` are almost same.
64
64
  `address.phrase` keeps outermost double quotes or parentheses.
65
65
 
66
+ ### Parse addresses separated with whitespace
67
+
68
+ ```rb
69
+ require 'mail_address'
70
+
71
+ line = "John Doe <john@example.com> second@example.com, third@example.com" # separated with space and comma
72
+ addrs = MailAddress.parse_simple(line)
73
+ ```
74
+
66
75
  ## Contributing
67
76
 
68
77
  1. Fork it ( https://github.com/[my-github-username]/mail_address/fork )
@@ -85,7 +85,7 @@ module MailAddress
85
85
  while (line != '')
86
86
  tmp = nil
87
87
  if (
88
- line.sub!(/\A("(?:[^"\\]+|\\.)*")(\s*)/, '') || # "..."
88
+ line.match(/"[^"]+"/) && line.sub!(/\A("(?:[^"\\]+|\\.)*")(\s*)/, '') || # "..."
89
89
  line.sub!(/\A(\[(?:[^\]\\]+|\\.)*\])(\s*)/, '') || # [...]
90
90
  line.sub!(/\A([^\s()<>\@,;:\\".\[\]]+)(\s*)/, '') ||
91
91
  line.sub!(/\A([()<>\@,;:\\".\[\]])(\s*)/, '')
@@ -12,7 +12,9 @@ module MailAddress
12
12
  # CHARS_REQUIRE_QUOTES_ = SPECIAL_CHARS + ADDRESS_SEPARATORS_
13
13
  ESCAPED_DOUBLE_QUOTES_ = /\\\"/
14
14
  ESCAPED_BACKSLASHES_ = /\\\\/
15
- LOCAL_PART_REGEXP_STR_ = '[+a-zA-Z0-9_.!#$%&\'*\\/=?^`{|}~-]+'
15
+ QUOTED_REGEX_STR_ = '[+a-zA-Z0-9_.!#$%&\'*\\/=?^`{|}~-]+'
16
+ UNQUOTED_REGEX_STR_ = '"' + QUOTED_REGEX_STR_ + '"'
17
+ LOCAL_PART_REGEXP_STR_ = '(?:' + QUOTED_REGEX_STR_ + '|' + UNQUOTED_REGEX_STR_ + ')'
16
18
  DOMAIN_PART_REGEXP_STR_ = '([a-zA-Z0-9-]+\\.)+[a-zA-Z0-9]{2,63}'
17
19
  EMAIL_ADDRESS_ = Regexp.new('\\A' + LOCAL_PART_REGEXP_STR_ + '@' + DOMAIN_PART_REGEXP_STR_ + '\\z')
18
20
 
@@ -1,3 +1,3 @@
1
1
  module MailAddress
2
- VERSION = "1.2.5"
2
+ VERSION = "1.2.6"
3
3
  end
@@ -11,8 +11,8 @@ describe MailAddress do
11
11
  expect(results[0].format).to eq('johndoe@example.com')
12
12
  expect(results[0].address).to eq('johndoe@example.com')
13
13
  expect(results[0].name).to be_nil
14
- expect(results[0].phrase).to eq("")
15
- expect(results[0].host).to eq("example.com")
14
+ expect(results[0].phrase).to eq('')
15
+ expect(results[0].host).to eq('example.com')
16
16
  expect(results[0].user).to eq('johndoe')
17
17
  expect(results[0].original).to eq(line)
18
18
 
@@ -22,8 +22,8 @@ describe MailAddress do
22
22
  expect(results[0].format).to eq('johndoe@example.com')
23
23
  expect(results[0].address).to eq('johndoe@example.com')
24
24
  expect(results[0].name).to be_nil
25
- expect(results[0].phrase).to eq("")
26
- expect(results[0].host).to eq("example.com")
25
+ expect(results[0].phrase).to eq('')
26
+ expect(results[0].host).to eq('example.com')
27
27
  expect(results[0].user).to eq('johndoe')
28
28
  expect(results[0].original).to eq(line)
29
29
 
@@ -32,9 +32,9 @@ describe MailAddress do
32
32
  results = MailAddress.parse(line)
33
33
  expect(results[0].format).to eq('John Doe <johndoe@example.com>')
34
34
  expect(results[0].address).to eq('johndoe@example.com')
35
- expect(results[0].name).to eq("John Doe")
36
- expect(results[0].phrase).to eq("John Doe")
37
- expect(results[0].host).to eq("example.com")
35
+ expect(results[0].name).to eq('John Doe')
36
+ expect(results[0].phrase).to eq('John Doe')
37
+ expect(results[0].host).to eq('example.com')
38
38
  expect(results[0].user).to eq('johndoe')
39
39
  expect(results[0].original).to eq(line)
40
40
 
@@ -43,9 +43,9 @@ describe MailAddress do
43
43
  results = MailAddress.parse(line)
44
44
  expect(results[0].format).to eq('"ジョン ドゥ" <johndoe@example.com>')
45
45
  expect(results[0].address).to eq('johndoe@example.com')
46
- expect(results[0].name).to eq("ジョン ドゥ")
47
- expect(results[0].phrase).to eq("ジョン ドゥ")
48
- expect(results[0].host).to eq("example.com")
46
+ expect(results[0].name).to eq('ジョン ドゥ')
47
+ expect(results[0].phrase).to eq('ジョン ドゥ')
48
+ expect(results[0].host).to eq('example.com')
49
49
  expect(results[0].user).to eq('johndoe')
50
50
  expect(results[0].original).to eq(line)
51
51
 
@@ -53,9 +53,9 @@ describe MailAddress do
53
53
  results = MailAddress.parse(line)
54
54
  expect(results[0].format).to eq('"Amazon.co.jp アソシエイト・プログラム" <associates@amazon.co.jp>')
55
55
  expect(results[0].address).to eq('associates@amazon.co.jp')
56
- expect(results[0].name).to eq("Amazon.co.jp アソシエイト・プログラム")
57
- expect(results[0].phrase).to eq("Amazon.co.jp アソシエイト・プログラム")
58
- expect(results[0].host).to eq("amazon.co.jp")
56
+ expect(results[0].name).to eq('Amazon.co.jp アソシエイト・プログラム')
57
+ expect(results[0].phrase).to eq('Amazon.co.jp アソシエイト・プログラム')
58
+ expect(results[0].host).to eq('amazon.co.jp')
59
59
  expect(results[0].user).to eq('associates')
60
60
  expect(results[0].original).to eq(line)
61
61
 
@@ -64,9 +64,9 @@ describe MailAddress do
64
64
  results = MailAddress.parse(line)
65
65
  expect(results[0].format).to eq('"Example (Twitterより)" <notify@twitter.com>')
66
66
  expect(results[0].address).to eq('notify@twitter.com')
67
- expect(results[0].name).to eq("Example (Twitterより)")
68
- expect(results[0].phrase).to eq("Example (Twitterより)")
69
- expect(results[0].host).to eq("twitter.com")
67
+ expect(results[0].name).to eq('Example (Twitterより)')
68
+ expect(results[0].phrase).to eq('Example (Twitterより)')
69
+ expect(results[0].host).to eq('twitter.com')
70
70
  expect(results[0].user).to eq('notify')
71
71
  expect(results[0].original).to eq(line)
72
72
 
@@ -75,9 +75,9 @@ describe MailAddress do
75
75
  results = MailAddress.parse(line)
76
76
  expect(results[0].format).to eq('"ジョン ドゥ" <johndoe@example.com>')
77
77
  expect(results[0].address).to eq('johndoe@example.com')
78
- expect(results[0].name).to eq("ジョン ドゥ")
78
+ expect(results[0].name).to eq('ジョン ドゥ')
79
79
  expect(results[0].phrase).to eq('"ジョン ドゥ"')
80
- expect(results[0].host).to eq("example.com")
80
+ expect(results[0].host).to eq('example.com')
81
81
  expect(results[0].user).to eq('johndoe')
82
82
  expect(results[0].original).to eq(line)
83
83
 
@@ -86,9 +86,9 @@ describe MailAddress do
86
86
  results = MailAddress.parse(line)
87
87
  expect(results[0].format).to eq('johndoe@example.com (John Doe)')
88
88
  expect(results[0].address).to eq('johndoe@example.com')
89
- expect(results[0].name).to eq("John Doe")
90
- expect(results[0].phrase).to eq("(John Doe)")
91
- expect(results[0].host).to eq("example.com")
89
+ expect(results[0].name).to eq('John Doe')
90
+ expect(results[0].phrase).to eq('(John Doe)')
91
+ expect(results[0].host).to eq('example.com')
92
92
  expect(results[0].user).to eq('johndoe')
93
93
  expect(results[0].original).to eq(line)
94
94
 
@@ -97,9 +97,9 @@ describe MailAddress do
97
97
  results = MailAddress.parse(line)
98
98
  expect(results[0].format).to eq('johndoe@example.com (John (Mid) Doe)')
99
99
  expect(results[0].address).to eq('johndoe@example.com')
100
- expect(results[0].name).to eq("John (Mid) Doe")
101
- expect(results[0].phrase).to eq("(John (Mid) Doe)")
102
- expect(results[0].host).to eq("example.com")
100
+ expect(results[0].name).to eq('John (Mid) Doe')
101
+ expect(results[0].phrase).to eq('(John (Mid) Doe)')
102
+ expect(results[0].host).to eq('example.com')
103
103
  expect(results[0].user).to eq('johndoe')
104
104
  expect(results[0].original).to eq(line)
105
105
 
@@ -108,9 +108,9 @@ describe MailAddress do
108
108
  results = MailAddress.parse(line)
109
109
  expect(results[0].format).to eq('johndoe@example.com (John@Doe)')
110
110
  expect(results[0].address).to eq('johndoe@example.com')
111
- expect(results[0].name).to eq("John@Doe")
112
- expect(results[0].phrase).to eq("(John@Doe)")
113
- expect(results[0].host).to eq("example.com")
111
+ expect(results[0].name).to eq('John@Doe')
112
+ expect(results[0].phrase).to eq('(John@Doe)')
113
+ expect(results[0].host).to eq('example.com')
114
114
  expect(results[0].user).to eq('johndoe')
115
115
  expect(results[0].original).to eq(line)
116
116
 
@@ -118,9 +118,9 @@ describe MailAddress do
118
118
  results = MailAddress.parse(line)
119
119
  expect(results[0].format).to eq('johndoe@example.com (John, Doe)')
120
120
  expect(results[0].address).to eq('johndoe@example.com')
121
- expect(results[0].name).to eq("John, Doe")
122
- expect(results[0].phrase).to eq("(John, Doe)")
123
- expect(results[0].host).to eq("example.com")
121
+ expect(results[0].name).to eq('John, Doe')
122
+ expect(results[0].phrase).to eq('(John, Doe)')
123
+ expect(results[0].host).to eq('example.com')
124
124
  expect(results[0].user).to eq('johndoe')
125
125
  expect(results[0].original).to eq(line)
126
126
 
@@ -129,9 +129,9 @@ describe MailAddress do
129
129
  results = MailAddress.parse(line)
130
130
  expect(results[0].format).to eq('"John Doe (Extra)" <johndoe@example.com>')
131
131
  expect(results[0].address).to eq('johndoe@example.com')
132
- expect(results[0].name).to eq("John Doe (Extra)")
133
- expect(results[0].phrase).to eq("John Doe (Extra)")
134
- expect(results[0].host).to eq("example.com")
132
+ expect(results[0].name).to eq('John Doe (Extra)')
133
+ expect(results[0].phrase).to eq('John Doe (Extra)')
134
+ expect(results[0].host).to eq('example.com')
135
135
  expect(results[0].user).to eq('johndoe')
136
136
  expect(results[0].original).to eq(line)
137
137
 
@@ -140,9 +140,9 @@ describe MailAddress do
140
140
  results = MailAddress.parse(line)
141
141
  expect(results[0].format).to eq('"John(Doe" <johndoe@example.com>')
142
142
  expect(results[0].address).to eq('johndoe@example.com')
143
- expect(results[0].name).to eq("John(Doe")
144
- expect(results[0].phrase).to eq("John(Doe")
145
- expect(results[0].host).to eq("example.com")
143
+ expect(results[0].name).to eq('John(Doe')
144
+ expect(results[0].phrase).to eq('John(Doe')
145
+ expect(results[0].host).to eq('example.com')
146
146
  expect(results[0].user).to eq('johndoe')
147
147
  expect(results[0].original).to eq(line)
148
148
 
@@ -151,9 +151,9 @@ describe MailAddress do
151
151
  results = MailAddress.parse(line)
152
152
  expect(results[0].format).to eq('"John ( Doe" <johndoe@example.com>')
153
153
  expect(results[0].address).to eq('johndoe@example.com')
154
- expect(results[0].name).to eq("John ( Doe")
155
- expect(results[0].phrase).to eq("John ( Doe")
156
- expect(results[0].host).to eq("example.com")
154
+ expect(results[0].name).to eq('John ( Doe')
155
+ expect(results[0].phrase).to eq('John ( Doe')
156
+ expect(results[0].host).to eq('example.com')
157
157
  expect(results[0].user).to eq('johndoe')
158
158
  expect(results[0].original).to eq(line)
159
159
 
@@ -162,9 +162,9 @@ describe MailAddress do
162
162
  results = MailAddress.parse(line)
163
163
  expect(results[0].format).to eq('"michael@example.jp" <johndoe@example.com>')
164
164
  expect(results[0].address).to eq('johndoe@example.com')
165
- expect(results[0].name).to eq("michael@example.jp")
165
+ expect(results[0].name).to eq('michael@example.jp')
166
166
  expect(results[0].phrase).to eq('"michael@example.jp"')
167
- expect(results[0].host).to eq("example.com")
167
+ expect(results[0].host).to eq('example.com')
168
168
  expect(results[0].user).to eq('johndoe')
169
169
  expect(results[0].original).to eq(line)
170
170
  end
@@ -177,76 +177,177 @@ describe MailAddress do
177
177
  expect(results[0].address).to eq("john@example.com")
178
178
  expect(results[0].name).to eq("John 'M' Doe")
179
179
  expect(results[0].phrase).to eq("John 'M' Doe")
180
- expect(results[0].host).to eq("example.com")
181
- expect(results[0].user).to eq("john")
180
+ expect(results[0].host).to eq('example.com')
181
+ expect(results[0].user).to eq('john')
182
182
  expect(results[0].original).to eq("John 'M' Doe <john@example.com>")
183
183
 
184
184
  # Perl module Mail::Address returns '大阪 太郎 <osaka@example.jp>' (no double quote)
185
185
  # because regular expression \w matches even multibyte characters.
186
- expect(results[1].format).to eq("\"大阪 太郎\" <osaka@example.jp>")
187
- expect(results[1].address).to eq("osaka@example.jp")
188
- expect(results[1].name).to eq("大阪 太郎")
189
- expect(results[1].phrase).to eq("大阪 太郎")
190
- expect(results[1].host).to eq("example.jp")
191
- expect(results[1].user).to eq("osaka")
186
+ expect(results[1].format).to eq('"大阪 太郎" <osaka@example.jp>')
187
+ expect(results[1].address).to eq('osaka@example.jp')
188
+ expect(results[1].name).to eq('大阪 太郎')
189
+ expect(results[1].phrase).to eq('大阪 太郎')
190
+ expect(results[1].host).to eq('example.jp')
191
+ expect(results[1].user).to eq('osaka')
192
192
  expect(results[1].original).to eq('大阪 太郎 <osaka@example.jp>')
193
193
 
194
- expect(results[2].format).to eq("localpartonly")
194
+ expect(results[2].format).to eq('localpartonly')
195
195
  expect(results[2].address).to be_nil
196
- expect(results[2].name).to eq("localpartonly")
197
- expect(results[2].phrase).to eq("localpartonly")
196
+ expect(results[2].name).to eq('localpartonly')
197
+ expect(results[2].phrase).to eq('localpartonly')
198
198
  expect(results[2].host).to be_nil
199
- expect(results[2].user).to eq("")
200
- expect(results[2].original).to eq("localpartonly")
199
+ expect(results[2].user).to eq('')
200
+ expect(results[2].original).to eq('localpartonly')
201
201
  end
202
202
 
203
203
  it "normal case (rfc-violated(RFC822) but commonly used in AU/DoCoMo)" do
204
204
  # dot before @
205
- line = 'John Doe <johndoe.@example.com>'
205
+ line = 'johndoe.@example.com' # no double quotes
206
+ results = MailAddress.parse(line)
207
+
208
+ expect(results[0].format).to eq('johndoe.@example.com')
209
+ expect(results[0].address).to eq('johndoe.@example.com')
210
+ expect(results[0].name).to be_nil
211
+ expect(results[0].phrase).to eq('')
212
+ expect(results[0].host).to eq('example.com')
213
+ expect(results[0].user).to eq('johndoe.')
214
+ expect(results[0].original).to eq(line)
215
+
216
+ line = '"johndoe."@example.com' # enclosed with double quotes
217
+ results = MailAddress.parse(line)
218
+
219
+ expect(results[0].format).to eq('"johndoe."@example.com')
220
+ expect(results[0].address).to eq('"johndoe."@example.com')
221
+ expect(results[0].name).to be_nil
222
+ expect(results[0].phrase).to eq('')
223
+ expect(results[0].host).to eq('example.com')
224
+ expect(results[0].user).to eq('"johndoe."')
225
+ expect(results[0].original).to eq(line)
226
+
227
+ line = 'John Doe <johndoe.@example.com>' # no double quotes
206
228
  results = MailAddress.parse(line)
207
229
 
208
230
  expect(results[0].format).to eq('John Doe <johndoe.@example.com>')
209
231
  expect(results[0].address).to eq('johndoe.@example.com')
210
- expect(results[0].name).to eq("John Doe")
211
- expect(results[0].phrase).to eq("John Doe")
212
- expect(results[0].host).to eq("example.com")
232
+ expect(results[0].name).to eq('John Doe')
233
+ expect(results[0].phrase).to eq('John Doe')
234
+ expect(results[0].host).to eq('example.com')
213
235
  expect(results[0].user).to eq('johndoe.')
214
236
  expect(results[0].original).to eq(line)
215
237
 
238
+ line = 'John Doe <"johndoe."@example.com>' # enclosed with double quotes
239
+ results = MailAddress.parse(line)
240
+
241
+ expect(results[0].format).to eq('John Doe <"johndoe."@example.com>')
242
+ expect(results[0].address).to eq('"johndoe."@example.com')
243
+ expect(results[0].name).to eq('John Doe')
244
+ expect(results[0].phrase).to eq('John Doe')
245
+ expect(results[0].host).to eq('example.com')
246
+ expect(results[0].user).to eq('"johndoe."')
247
+ expect(results[0].original).to eq(line)
248
+
216
249
  # contains '..'
217
- line = 'John Doe <john..doe@example.com>'
250
+ line = 'john..doe@example.com' # enclosed with double quotes
251
+ results = MailAddress.parse(line)
252
+
253
+ expect(results[0].format).to eq('john..doe@example.com')
254
+ expect(results[0].address).to eq('john..doe@example.com')
255
+ expect(results[0].name).to be_nil
256
+ expect(results[0].phrase).to eq('')
257
+ expect(results[0].host).to eq('example.com')
258
+ expect(results[0].user).to eq('john..doe')
259
+ expect(results[0].original).to eq(line)
260
+
261
+ line = '"john..doe"@example.com' # enclosed with double quotes
262
+ results = MailAddress.parse(line)
263
+
264
+ expect(results[0].format).to eq('"john..doe"@example.com')
265
+ expect(results[0].address).to eq('"john..doe"@example.com')
266
+ expect(results[0].name).to be_nil
267
+ expect(results[0].phrase).to eq('')
268
+ expect(results[0].host).to eq('example.com')
269
+ expect(results[0].user).to eq('"john..doe"')
270
+ expect(results[0].original).to eq(line)
271
+
272
+ line = 'John Doe <john..doe@example.com>' # no double quotes
218
273
  results = MailAddress.parse(line)
219
274
 
220
275
  expect(results[0].format).to eq('John Doe <john..doe@example.com>')
221
276
  expect(results[0].address).to eq('john..doe@example.com')
222
- expect(results[0].name).to eq("John Doe")
223
- expect(results[0].phrase).to eq("John Doe")
224
- expect(results[0].host).to eq("example.com")
277
+ expect(results[0].name).to eq('John Doe')
278
+ expect(results[0].phrase).to eq('John Doe')
279
+ expect(results[0].host).to eq('example.com')
225
280
  expect(results[0].user).to eq('john..doe')
226
281
  expect(results[0].original).to eq(line)
282
+
283
+ line = 'John Doe <"john..doe"@example.com>' # enclosed with double quotes
284
+ results = MailAddress.parse(line)
285
+
286
+ expect(results[0].format).to eq('John Doe <"john..doe"@example.com>')
287
+ expect(results[0].address).to eq('"john..doe"@example.com')
288
+ expect(results[0].name).to eq('John Doe')
289
+ expect(results[0].phrase).to eq('John Doe')
290
+ expect(results[0].host).to eq('example.com')
291
+ expect(results[0].user).to eq('"john..doe"')
292
+ expect(results[0].original).to eq(line)
293
+ end
294
+
295
+ it "Unclosed double quotes" do
296
+ line = '"john..doe@example.com'
297
+ results = MailAddress.parse(line)
298
+ expect(results[0].format).to eq('"john..doe@example.com')
299
+ expect(results[0].address).to be_nil
300
+ expect(results[0].name).to eq('john..doe@example.com') ## IRREGULAR PATTERN
301
+ expect(results[0].phrase).to eq('"john..doe@example.com') ## IRREGULAR PATTERN
302
+ expect(results[0].host).to be_nil
303
+ expect(results[0].user).to eq("")
304
+ expect(results[0].original).to eq(line)
305
+
306
+ line = 'john..doe"@example.com'
307
+ results = MailAddress.parse(line)
308
+ expect(results[0].format).to eq('john..doe"@example.com')
309
+ expect(results[0].address).to be_nil
310
+ expect(results[0].name).to eq('john..doe"@example.com') ## IRREGULAR PATTERN
311
+ expect(results[0].phrase).to eq('john..doe"@example.com') ## IRREGULAR PATTERN
312
+ expect(results[0].host).to be_nil
313
+ expect(results[0].user).to eq("")
314
+ expect(results[0].original).to eq(line)
315
+
316
+ #
317
+ # it takes about 1 minutes in v1.4.5
318
+ #
319
+ line = '"ooooooooooooooooo@docomo.ne.jp'
320
+ results = MailAddress.parse(line)
321
+ expect(results[0].format).to eq('"ooooooooooooooooo@docomo.ne.jp')
322
+ expect(results[0].address).to be_nil
323
+ expect(results[0].name).to eq('ooooooooooooooooo@docomo.ne.jp') ## IRREGULAR PATTERN
324
+ expect(results[0].phrase).to eq('"ooooooooooooooooo@docomo.ne.jp') ## IRREGULAR PATTERN
325
+ expect(results[0].host).to be_nil
326
+ expect(results[0].user).to eq("")
327
+ expect(results[0].original).to eq(line)
227
328
  end
228
329
 
229
330
  it "unparsable with mail gem (includes non-permitted char'[')" do
230
331
  line = "Ello [Do Not Reply] <do-not-reply@ello.co>"
231
332
  results = MailAddress.parse(line)
232
- expect(results[0].format).to eq("\"Ello [Do Not Reply]\" <do-not-reply@ello.co>")
233
- expect(results[0].address).to eq("do-not-reply@ello.co")
234
- expect(results[0].name).to eq("Ello")
235
- expect(results[0].phrase).to eq("Ello [Do Not Reply]")
236
- expect(results[0].host).to eq("ello.co")
237
- expect(results[0].user).to eq("do-not-reply")
333
+ expect(results[0].format).to eq('"Ello [Do Not Reply]" <do-not-reply@ello.co>')
334
+ expect(results[0].address).to eq('do-not-reply@ello.co')
335
+ expect(results[0].name).to eq('Ello')
336
+ expect(results[0].phrase).to eq('Ello [Do Not Reply]')
337
+ expect(results[0].host).to eq('ello.co')
338
+ expect(results[0].user).to eq('do-not-reply')
238
339
  expect(results[0].original).to eq(line)
239
340
  end
240
341
 
241
342
  it "unparsable with mail gem (no whitespace before <)" do
242
343
  line = "大阪 太郎<osaka@example.jp>"
243
344
  results = MailAddress.parse(line)
244
- expect(results[0].format).to eq("\"大阪 太郎\" <osaka@example.jp>")
245
- expect(results[0].address).to eq("osaka@example.jp")
246
- expect(results[0].name).to eq("大阪 太郎")
247
- expect(results[0].phrase).to eq("大阪 太郎")
248
- expect(results[0].host).to eq("example.jp")
249
- expect(results[0].user).to eq("osaka")
345
+ expect(results[0].format).to eq('"大阪 太郎" <osaka@example.jp>')
346
+ expect(results[0].address).to eq('osaka@example.jp')
347
+ expect(results[0].name).to eq('大阪 太郎')
348
+ expect(results[0].phrase).to eq('大阪 太郎')
349
+ expect(results[0].host).to eq('example.jp')
350
+ expect(results[0].user).to eq('osaka')
250
351
  expect(results[0].original).to eq(line)
251
352
  end
252
353
 
@@ -254,39 +355,39 @@ describe MailAddress do
254
355
  # if local part only, do not treat as an email address
255
356
  line = "localpartonly"
256
357
  results = MailAddress.parse(line)
257
- expect(results[0].format).to eq("localpartonly")
358
+ expect(results[0].format).to eq('localpartonly')
258
359
  expect(results[0].address).to be_nil
259
- expect(results[0].name).to eq("localpartonly")
260
- expect(results[0].phrase).to eq("localpartonly")
360
+ expect(results[0].name).to eq('localpartonly')
361
+ expect(results[0].phrase).to eq('localpartonly')
261
362
  expect(results[0].host).to be_nil
262
- expect(results[0].user).to eq("")
363
+ expect(results[0].user).to eq('')
263
364
  expect(results[0].original).to eq(line)
264
365
  end
265
366
 
266
367
  it "includes invalid addresses only among valid addresses " do
267
368
  line = "aaaa, xyz@example.com, bbbb"
268
369
  results = MailAddress.parse(line)
269
- expect(results[0].format).to eq("aaaa")
370
+ expect(results[0].format).to eq('aaaa')
270
371
  expect(results[0].address).to be_nil
271
- expect(results[0].name).to eq("aaaa")
272
- expect(results[0].phrase).to eq("aaaa")
372
+ expect(results[0].name).to eq('aaaa')
373
+ expect(results[0].phrase).to eq('aaaa')
273
374
  expect(results[0].host).to be_nil
274
- expect(results[0].user).to eq("")
275
- expect(results[0].original).to eq("aaaa")
276
- expect(results[1].format).to eq("xyz@example.com")
277
- expect(results[1].address).to eq("xyz@example.com")
375
+ expect(results[0].user).to eq('')
376
+ expect(results[0].original).to eq('aaaa')
377
+ expect(results[1].format).to eq('xyz@example.com')
378
+ expect(results[1].address).to eq('xyz@example.com')
278
379
  expect(results[1].name).to be_nil
279
- expect(results[1].phrase).to eq("")
280
- expect(results[1].host).to eq("example.com")
281
- expect(results[1].user).to eq("xyz")
282
- expect(results[1].original).to eq("xyz@example.com")
283
- expect(results[2].format).to eq("bbbb")
380
+ expect(results[1].phrase).to eq('')
381
+ expect(results[1].host).to eq('example.com')
382
+ expect(results[1].user).to eq('xyz')
383
+ expect(results[1].original).to eq('xyz@example.com')
384
+ expect(results[2].format).to eq('bbbb')
284
385
  expect(results[2].address).to be_nil
285
- expect(results[2].name).to eq("bbbb")
286
- expect(results[2].phrase).to eq("bbbb")
386
+ expect(results[2].name).to eq('bbbb')
387
+ expect(results[2].phrase).to eq('bbbb')
287
388
  expect(results[2].host).to be_nil
288
- expect(results[2].user).to eq("")
289
- expect(results[2].original).to eq("bbbb")
389
+ expect(results[2].user).to eq('')
390
+ expect(results[2].original).to eq('bbbb')
290
391
  end
291
392
 
292
393
  it "a lot of types of undisclosed recipients" do
@@ -307,7 +408,7 @@ describe MailAddress do
307
408
  expect(results[0].name).to eq(line)
308
409
  expect(results[0].phrase).to eq(line)
309
410
  expect(results[0].host).to be_nil
310
- expect(results[0].user).to eq("")
411
+ expect(results[0].user).to eq('')
311
412
  expect(results[0].original).to eq(line)
312
413
  end
313
414
 
@@ -323,7 +424,7 @@ describe MailAddress do
323
424
  expect(results[0].name).to eq(line)
324
425
  expect(results[0].phrase).to eq(line)
325
426
  expect(results[0].host).to be_nil
326
- expect(results[0].user).to eq("")
427
+ expect(results[0].user).to eq('')
327
428
  expect(results[0].original).to eq(line)
328
429
  end
329
430
 
@@ -342,12 +443,12 @@ describe MailAddress do
342
443
  it "specify mime-encoded address" do
343
444
  line = "=?ISO-2022-JP?B?GyRCQmc6ZRsoQiAbJEJCQE86GyhC?= <osaka@example.jp>"
344
445
  results = MailAddress.parse(line)
345
- expect(results[0].format).to eq("=?ISO-2022-JP?B?GyRCQmc6ZRsoQiAbJEJCQE86GyhC?= <osaka@example.jp>")
346
- expect(results[0].address).to eq("osaka@example.jp")
446
+ expect(results[0].format).to eq('=?ISO-2022-JP?B?GyRCQmc6ZRsoQiAbJEJCQE86GyhC?= <osaka@example.jp>')
447
+ expect(results[0].address).to eq('osaka@example.jp')
347
448
  expect(results[0].name).to be_nil
348
- expect(results[0].phrase).to eq("=?ISO-2022-JP?B?GyRCQmc6ZRsoQiAbJEJCQE86GyhC?=")
349
- expect(results[0].host).to eq("example.jp")
350
- expect(results[0].user).to eq("osaka")
449
+ expect(results[0].phrase).to eq('=?ISO-2022-JP?B?GyRCQmc6ZRsoQiAbJEJCQE86GyhC?=')
450
+ expect(results[0].host).to eq('example.jp')
451
+ expect(results[0].user).to eq('osaka')
351
452
  expect(results[0].original).to eq(line)
352
453
  end
353
454
 
@@ -365,7 +466,7 @@ describe MailAddress do
365
466
  expect(results[0].name).to eq(line.strip)
366
467
  expect(results[0].phrase).to eq(line)
367
468
  expect(results[0].host).to be_nil
368
- expect(results[0].user).to eq("")
469
+ expect(results[0].user).to eq('')
369
470
  expect(results[0].original).to eq(line)
370
471
  end
371
472
  end
@@ -426,7 +527,7 @@ describe MailAddress do
426
527
  expect(results[0].address).to eq('john_doe@example.com')
427
528
  expect(results[0].name).to be_nil
428
529
  expect(results[0].phrase).to eq('')
429
- expect(results[0].host).to eq("example.com")
530
+ expect(results[0].host).to eq('example.com')
430
531
  expect(results[0].user).to eq('john_doe')
431
532
  expect(results[0].original).to eq(line)
432
533
 
@@ -436,7 +537,7 @@ describe MailAddress do
436
537
  expect(results[0].address).to eq('john.doe@example.com')
437
538
  expect(results[0].name).to be_nil
438
539
  expect(results[0].phrase).to eq('')
439
- expect(results[0].host).to eq("example.com")
540
+ expect(results[0].host).to eq('example.com')
440
541
  expect(results[0].user).to eq('john.doe')
441
542
  expect(results[0].original).to eq(line)
442
543
  end
@@ -455,7 +556,7 @@ describe MailAddress do
455
556
  line = 'john <john@example.com> (last' # lack of right parenthesis
456
557
  expect {
457
558
  results = MailAddress.parse(line)
458
- }.to raise_error(StandardError, "cannot find end paren")
559
+ }.to raise_error(StandardError, 'cannot find end paren')
459
560
  end
460
561
 
461
562
  it "unbelievable but existed address" do
@@ -616,8 +717,8 @@ describe MailAddress do
616
717
  # p "#{i} #{test_src}"
617
718
  result = MailAddress.parse(test_src)[0]
618
719
 
619
- result_format = result.format || ""
620
- result_name = result.name || ""
720
+ result_format = result.format || ''
721
+ result_name = result.name || ''
621
722
 
622
723
  expect(result_name).to eq(exp_name)
623
724
  expect(result_format).to eq(exp_format)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mail_address
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.5
4
+ version: 1.2.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kizashi Nagata
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-16 00:00:00.000000000 Z
11
+ date: 2015-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -116,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
116
116
  version: '0'
117
117
  requirements: []
118
118
  rubyforge_project:
119
- rubygems_version: 2.4.1
119
+ rubygems_version: 2.4.5
120
120
  signing_key:
121
121
  specification_version: 4
122
122
  summary: Simple Mail Address Parser