mail_address 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ad0921e631ebcc827050a1a1c2572df665eca7f3
4
- data.tar.gz: 398cf4fe10f1bebc20231b2cbb4d8dcca60a1dc5
3
+ metadata.gz: 02e966fc9f6878a8d0954ca5e658db596e581d15
4
+ data.tar.gz: 108c96f94e4b19c9aee8c61ec52c4fe6cf896d5f
5
5
  SHA512:
6
- metadata.gz: 9b6da43a7b73f7df6d262188cdff389a7f077fe4c03707bf180d07aed408bb967ac05f21f8b9e9b9a9d341e7b6893659e2f7f2d323f7fc28648c49c44a32fb66
7
- data.tar.gz: 56f4ee85472296c2e8fb48bd1fdd8a895462b4a629533faeebf3b274b9a5b600305c412dc38b940ef54cba2301decd8638a852f00dff595f91401f7faa2a1b52
6
+ metadata.gz: 477bdb94a6eba5ac3a302ae590bf4b926e0dd8f236c0d5cedf57112a5ccea8f058d6e391eff50000a317baba7f5c332eabe0606defab8d4cb333c9ff85268eed
7
+ data.tar.gz: ca4c41bed4759fc726fe72bae286c897d5fd97f52fd6fe71abde8843864121ea047f82d13609b2527de9d8a359b190c2948f71c88f6f957c5f6fd79ed06e7cef
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # MailAddress [![Build Status](https://travis-ci.org/kizashi1122/mail_address.svg)](https://travis-ci.org/kizashi1122/mail_address) [![Coverage Status](https://coveralls.io/repos/kizashi1122/mail_address/badge.png)](https://coveralls.io/r/kizashi1122/mail_address)
2
2
 
3
3
  MailAddress is a simple email address parser.
4
- This library is implemented based on Perl Module Mail::Address.
4
+ This library is implemented based on Perl Module Mail::Address and added some improvements.
5
5
 
6
6
  [mail](https://github.com/mikel/mail) is a great gem library. But some email addresses (mostly are violated RFC) are unparsable with mail gem which is strictly RFC compliant. In perl, [Mail::Address](http://search.cpan.org/~markov/MailTools-2.14/lib/Mail/Address.pod) is a very common library to parse email address. Mail::Address conviniently can parse even RFC-violated email addresses such as:
7
7
 
@@ -11,7 +11,11 @@ Ello [Do Not Reply] <do-not-reply@ello.co> # [, ] are not permitted according to
11
11
  大阪 太郎<osaka@example.com> # no whitespace just before <
12
12
  ```
13
13
 
14
- So I straightforwardly converted Perl module Mail::Address to Ruby gem.
14
+ So I straightforwardly converted Perl module Mail::Address to Ruby gem. Then I reviced it because original Mail::Address also has some bad points. For example:
15
+
16
+ - if no ending parenthesis in name part, cannot parse correctly.
17
+ - Modifications of name part are too much.
18
+
15
19
 
16
20
  ## Installation
17
21
 
@@ -32,6 +36,7 @@ Or install it yourself as:
32
36
  ## Usage
33
37
 
34
38
  It's almost the same as Mail::Address(Perl).
39
+ But in this module, removed `comment` property from address class in version v1.0.0. Most people don't reallize comment I think.
35
40
 
36
41
  ```rb
37
42
  require 'mail_address'
@@ -39,22 +44,24 @@ require 'mail_address'
39
44
  line = "John 'M' Doe <john@example.com> (this is a comment), 大阪 太郎 <osaka@example.jp>"
40
45
  addrs = MailAddress.parse(line)
41
46
 
42
- p addrs[0].format # "John 'M' Doe <john@example.com> (this is a comment)"
47
+ p addrs[0].format # "\"John 'M' Doe (this is a comment)\" <john@example.com>"
43
48
  p addrs[0].address # "john@example.com"
44
- p addrs[0].name # "John 'M' Doe"
45
- p addrs[0].comment # "(this is a comment)"
46
- p addrs[0].phrase # "John 'M' Doe"
49
+ p addrs[0].name # "John 'M' Doe (this is a comment)"
50
+ p addrs[0].phrase # "John 'M' Doe (this is a comment)"
47
51
  p addrs[0].host # "example.com"
48
52
  p addrs[0].user # "john"
53
+ p addrs[0].original # "John 'M' Doe <john@example.com> (this is a comment)"
49
54
 
50
55
  p addrs[1].format # "\"大阪 太郎\" <osaka@example.jp>"
51
56
  p addrs[1].address # "osaka@example.jp"
52
57
  p addrs[1].name # "大阪 太郎"
53
- p addrs[1].comment # ""
54
58
  p addrs[1].phrase # "大阪 太郎"
55
59
  p addrs[1].host # "example.jp"
56
60
  p addrs[1].user # "osaka"
61
+ p addrs[1].original # "大阪 太郎 <osaka@example.jp>"
57
62
  ```
63
+ `address.name` and `address.phrase` are almost same.
64
+ `address.phrase` keeps outermost double quotes or parentheses.
58
65
 
59
66
  ## Contributing
60
67
 
@@ -2,16 +2,19 @@ module MailAddress
2
2
 
3
3
  class Address
4
4
 
5
- def initialize(phrase, address)
5
+ def initialize(phrase, address_, original)
6
6
  @phrase = phrase
7
- @address = address
7
+ @address = address_
8
+ @original = original
8
9
  end
9
- attr_accessor :phrase, :address
10
+ attr_accessor :phrase, :original
10
11
 
11
12
  ATEXT = '[\-\w !#$%&\'*+/=?^`{|}~]'
12
13
 
13
14
  def format
14
15
  addr = []
16
+ return @original if address.nil?
17
+
15
18
  if !@phrase.nil? && @phrase.length > 0 then
16
19
  if @phrase.match(/\A\(/) && @phrase.match(/\)\z/)
17
20
  addr.push(@address) if !@address.nil? && @address.length > 0
@@ -52,14 +55,23 @@ module MailAddress
52
55
  name.length > 0 ? name : nil
53
56
  end
54
57
 
58
+ def address
59
+ # double check
60
+ if @address.nil? || @original.include?(@address)
61
+ @address
62
+ else
63
+ nil # wrongly constructed address
64
+ end
65
+ end
66
+
55
67
  def host
56
- addr = @address || '';
68
+ addr = address || '';
57
69
  i = addr.rindex('@')
58
70
  i.nil? ? nil : addr[i + 1 .. -1]
59
71
  end
60
72
 
61
73
  def user
62
- addr = @address || '';
74
+ addr = address || '';
63
75
  i = addr.rindex('@')
64
76
  i.nil? ? addr : addr[0 ... i]
65
77
  end
@@ -7,15 +7,16 @@ module MailAddress
7
7
 
8
8
  # undisclosed-recipient
9
9
  if line.match(/undisclosed[ \-]recipients?: ?;?/i)
10
- return [ MailAddress::Address.new(line, nil) ]
10
+ return [ MailAddress::Address.new(line, nil, line) ]
11
11
  end
12
12
 
13
13
  # obviously invalid email address
14
14
  unless line.match(/[a-z0-9\.\-"_\+]@/i)
15
- return [ MailAddress::Address.new(line, nil) ]
15
+ return [ MailAddress::Address.new(line, nil, line) ]
16
16
  end
17
17
 
18
18
  phrase, address, objs = [], [], []
19
+ original = ''
19
20
  depth, idx, end_paren_idx = 0, 0, 0
20
21
 
21
22
  tokens = _tokenize lines
@@ -24,13 +25,14 @@ module MailAddress
24
25
 
25
26
  for idx in 0 ... len do
26
27
 
28
+ token = tokens[idx]
29
+ substr = token[0, 1]
30
+ original << token
31
+
27
32
  if (end_paren_idx > 0 && end_paren_idx >= idx)
28
33
  next
29
34
  end
30
35
 
31
- token = tokens[idx]
32
- substr = token[0, 1]
33
-
34
36
  if (substr == '(' && !address.empty?) then
35
37
  end_paren_idx = _find_next_paren(idx, tokens, len)
36
38
  raise "cannot find end paren" if end_paren_idx == -1 # end paren must exists after address
@@ -42,11 +44,15 @@ module MailAddress
42
44
  depth -= 1 if depth > 0
43
45
  elsif (substr == ',' || substr == ';') then
44
46
  raise "Unmatched '<>' in line" if depth > 0
45
- o = _complete(phrase, address)
47
+
48
+ original.sub!(/[,;]\s*\z/, '')
49
+
50
+ o = _complete(phrase, address, original)
46
51
 
47
52
  objs.push(o) if o
48
53
  depth = 0
49
54
  end_paren_idx = 0
55
+ original = ''
50
56
  _next = _find_next idx+1, tokens, len
51
57
  elsif (depth > 0) then
52
58
  token.strip!
@@ -110,9 +116,9 @@ module MailAddress
110
116
  -1
111
117
  end
112
118
 
113
- def self._complete (phrase, address)
119
+ def self._complete (phrase, address, original)
114
120
  phrase.length > 0 || address.length > 0 or return nil
115
- new_address = MailAddress::Address.new(phrase.join('').strip, address.join(''))
121
+ new_address = MailAddress::Address.new(phrase.join('').strip, address.join(''), original)
116
122
  phrase.clear; address.clear
117
123
  new_address
118
124
  end
@@ -1,3 +1,3 @@
1
1
  module MailAddress
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -14,6 +14,7 @@ describe MailAddress do
14
14
  expect(results[0].phrase).to eq("")
15
15
  expect(results[0].host).to eq("example.com")
16
16
  expect(results[0].user).to eq('johndoe')
17
+ expect(results[0].original).to eq(line)
17
18
 
18
19
  # <address> only
19
20
  line = '<johndoe@example.com>'
@@ -24,6 +25,7 @@ describe MailAddress do
24
25
  expect(results[0].phrase).to eq("")
25
26
  expect(results[0].host).to eq("example.com")
26
27
  expect(results[0].user).to eq('johndoe')
28
+ expect(results[0].original).to eq(line)
27
29
 
28
30
  # name + <address> (single byte only)
29
31
  line = 'John Doe <johndoe@example.com>'
@@ -34,6 +36,7 @@ describe MailAddress do
34
36
  expect(results[0].phrase).to eq("John Doe")
35
37
  expect(results[0].host).to eq("example.com")
36
38
  expect(results[0].user).to eq('johndoe')
39
+ expect(results[0].original).to eq(line)
37
40
 
38
41
  # name + <address> (multi byte)
39
42
  line = 'ジョン ドゥ <johndoe@example.com>'
@@ -44,6 +47,7 @@ describe MailAddress do
44
47
  expect(results[0].phrase).to eq("ジョン ドゥ")
45
48
  expect(results[0].host).to eq("example.com")
46
49
  expect(results[0].user).to eq('johndoe')
50
+ expect(results[0].original).to eq(line)
47
51
 
48
52
  line = 'Amazon.co.jp アソシエイト・プログラム <associates@amazon.co.jp>'
49
53
  results = MailAddress.parse(line)
@@ -53,6 +57,7 @@ describe MailAddress do
53
57
  expect(results[0].phrase).to eq("Amazon.co.jp アソシエイト・プログラム")
54
58
  expect(results[0].host).to eq("amazon.co.jp")
55
59
  expect(results[0].user).to eq('associates')
60
+ expect(results[0].original).to eq(line)
56
61
 
57
62
  # name (includes parens) + <address>
58
63
  line = 'Example (Twitterより) <notify@twitter.com>'
@@ -63,6 +68,7 @@ describe MailAddress do
63
68
  expect(results[0].phrase).to eq("Example (Twitterより)")
64
69
  expect(results[0].host).to eq("twitter.com")
65
70
  expect(results[0].user).to eq('notify')
71
+ expect(results[0].original).to eq(line)
66
72
 
67
73
  # name + <address> (multi byte) name is quoted
68
74
  line = '"ジョン ドゥ" <johndoe@example.com>'
@@ -73,6 +79,7 @@ describe MailAddress do
73
79
  expect(results[0].phrase).to eq('"ジョン ドゥ"')
74
80
  expect(results[0].host).to eq("example.com")
75
81
  expect(results[0].user).to eq('johndoe')
82
+ expect(results[0].original).to eq(line)
76
83
 
77
84
  # address + (note)
78
85
  line = 'johndoe@example.com (John Doe)'
@@ -83,6 +90,7 @@ describe MailAddress do
83
90
  expect(results[0].phrase).to eq("(John Doe)")
84
91
  expect(results[0].host).to eq("example.com")
85
92
  expect(results[0].user).to eq('johndoe')
93
+ expect(results[0].original).to eq(line)
86
94
 
87
95
  # address + (note) # nested paren
88
96
  line = 'johndoe@example.com (John (Mid) Doe)'
@@ -93,6 +101,7 @@ describe MailAddress do
93
101
  expect(results[0].phrase).to eq("(John (Mid) Doe)")
94
102
  expect(results[0].host).to eq("example.com")
95
103
  expect(results[0].user).to eq('johndoe')
104
+ expect(results[0].original).to eq(line)
96
105
 
97
106
  # address + (note) # note has special char
98
107
  line = 'johndoe@example.com (John@Doe)'
@@ -103,6 +112,7 @@ describe MailAddress do
103
112
  expect(results[0].phrase).to eq("(John@Doe)")
104
113
  expect(results[0].host).to eq("example.com")
105
114
  expect(results[0].user).to eq('johndoe')
115
+ expect(results[0].original).to eq(line)
106
116
 
107
117
  line = 'johndoe@example.com (John, Doe)'
108
118
  results = MailAddress.parse(line)
@@ -112,6 +122,7 @@ describe MailAddress do
112
122
  expect(results[0].phrase).to eq("(John, Doe)")
113
123
  expect(results[0].host).to eq("example.com")
114
124
  expect(results[0].user).to eq('johndoe')
125
+ expect(results[0].original).to eq(line)
115
126
 
116
127
  # name + <address> + (note)
117
128
  line = 'John Doe <johndoe@example.com> (Extra)'
@@ -122,6 +133,7 @@ describe MailAddress do
122
133
  expect(results[0].phrase).to eq("John Doe (Extra)")
123
134
  expect(results[0].host).to eq("example.com")
124
135
  expect(results[0].user).to eq('johndoe')
136
+ expect(results[0].original).to eq(line)
125
137
 
126
138
  # name + <address> (name has starting paren but doesn't have ending paren)
127
139
  line = 'John(Doe <johndoe@example.com>'
@@ -132,6 +144,7 @@ describe MailAddress do
132
144
  expect(results[0].phrase).to eq("John(Doe")
133
145
  expect(results[0].host).to eq("example.com")
134
146
  expect(results[0].user).to eq('johndoe')
147
+ expect(results[0].original).to eq(line)
135
148
 
136
149
  # ditto
137
150
  line = 'John ( Doe <johndoe@example.com>'
@@ -142,6 +155,7 @@ describe MailAddress do
142
155
  expect(results[0].phrase).to eq("John ( Doe")
143
156
  expect(results[0].host).to eq("example.com")
144
157
  expect(results[0].user).to eq('johndoe')
158
+ expect(results[0].original).to eq(line)
145
159
 
146
160
  # "address1" <address2>
147
161
  line = '"michael@example.jp" <johndoe@example.com>'
@@ -152,6 +166,7 @@ describe MailAddress do
152
166
  expect(results[0].phrase).to eq('"michael@example.jp"')
153
167
  expect(results[0].host).to eq("example.com")
154
168
  expect(results[0].user).to eq('johndoe')
169
+ expect(results[0].original).to eq(line)
155
170
  end
156
171
 
157
172
  it "normal case (multiple address)" do
@@ -164,6 +179,7 @@ describe MailAddress do
164
179
  expect(results[0].phrase).to eq("John 'M' Doe")
165
180
  expect(results[0].host).to eq("example.com")
166
181
  expect(results[0].user).to eq("john")
182
+ expect(results[0].original).to eq("John 'M' Doe <john@example.com>")
167
183
 
168
184
  # Perl module Mail::Address returns '大阪 太郎 <osaka@example.jp>' (no double quote)
169
185
  # because regular expression \w matches even multibyte characters.
@@ -173,6 +189,7 @@ describe MailAddress do
173
189
  expect(results[1].phrase).to eq("大阪 太郎")
174
190
  expect(results[1].host).to eq("example.jp")
175
191
  expect(results[1].user).to eq("osaka")
192
+ expect(results[1].original).to eq('大阪 太郎 <osaka@example.jp>')
176
193
  end
177
194
 
178
195
  it "normal case (rfc-violated(RFC822) but commonly used in AU/DoCoMo)" do
@@ -186,6 +203,7 @@ describe MailAddress do
186
203
  expect(results[0].phrase).to eq("John Doe")
187
204
  expect(results[0].host).to eq("example.com")
188
205
  expect(results[0].user).to eq('"johndoe."')
206
+ expect(results[0].original).to eq(line)
189
207
 
190
208
  # contains '..'
191
209
  line = 'John Doe <"john..doe"@example.com>'
@@ -197,6 +215,7 @@ describe MailAddress do
197
215
  expect(results[0].phrase).to eq("John Doe")
198
216
  expect(results[0].host).to eq("example.com")
199
217
  expect(results[0].user).to eq('"john..doe"')
218
+ expect(results[0].original).to eq(line)
200
219
  end
201
220
 
202
221
  it "unparsable with mail gem (includes non-permitted char'[')" do
@@ -208,6 +227,7 @@ describe MailAddress do
208
227
  expect(results[0].phrase).to eq("Ello [Do Not Reply]")
209
228
  expect(results[0].host).to eq("ello.co")
210
229
  expect(results[0].user).to eq("do-not-reply")
230
+ expect(results[0].original).to eq(line)
211
231
  end
212
232
 
213
233
  it "unparsable with mail gem (no whitespace before <)" do
@@ -219,6 +239,7 @@ describe MailAddress do
219
239
  expect(results[0].phrase).to eq("大阪 太郎")
220
240
  expect(results[0].host).to eq("example.jp")
221
241
  expect(results[0].user).to eq("osaka")
242
+ expect(results[0].original).to eq(line)
222
243
  end
223
244
 
224
245
  it "local part only" do
@@ -231,6 +252,7 @@ describe MailAddress do
231
252
  expect(results[0].phrase).to eq("localpartonly")
232
253
  expect(results[0].host).to be_nil
233
254
  expect(results[0].user).to eq("")
255
+ expect(results[0].original).to eq(line)
234
256
  end
235
257
 
236
258
  it "a lot of types of undisclosed recipients" do
@@ -246,12 +268,14 @@ describe MailAddress do
246
268
 
247
269
  array.each do |line|
248
270
  results = MailAddress.parse(line)
249
- expect(results[0].format).to eq(%Q("#{line}"))
271
+ # expect(results[0].format).to eq(%Q("#{line}"))
272
+ expect(results[0].format).to eq(line)
250
273
  expect(results[0].address).to be_nil
251
274
  expect(results[0].name).to eq(line)
252
275
  expect(results[0].phrase).to eq(line)
253
276
  expect(results[0].host).to be_nil
254
277
  expect(results[0].user).to eq("")
278
+ expect(results[0].original).to eq(line)
255
279
  end
256
280
 
257
281
  array = [
@@ -267,9 +291,10 @@ describe MailAddress do
267
291
  expect(results[0].phrase).to eq(line)
268
292
  expect(results[0].host).to be_nil
269
293
  expect(results[0].user).to eq("")
294
+ expect(results[0].original).to eq(line)
270
295
  end
271
296
 
272
- # valid address
297
+ # a seemingly valid address
273
298
  line = '"Undisclosed" <"recipients:"@nifty.com>'
274
299
  results = MailAddress.parse(line)
275
300
  expect(results[0].format).to eq(line)
@@ -278,6 +303,7 @@ describe MailAddress do
278
303
  expect(results[0].phrase).to eq('"Undisclosed"')
279
304
  expect(results[0].host).to eq("nifty.com")
280
305
  expect(results[0].user).to eq('"recipients:"')
306
+ expect(results[0].original).to eq(line)
281
307
  end
282
308
 
283
309
  it "specify mime-encoded address" do
@@ -289,6 +315,7 @@ describe MailAddress do
289
315
  expect(results[0].phrase).to eq("=?ISO-2022-JP?B?GyRCQmc6ZRsoQiAbJEJCQE86GyhC?=")
290
316
  expect(results[0].host).to eq("example.jp")
291
317
  expect(results[0].user).to eq("osaka")
318
+ expect(results[0].original).to eq(line)
292
319
  end
293
320
 
294
321
  it "obviously invalid address (has no '@')" do
@@ -299,16 +326,38 @@ describe MailAddress do
299
326
 
300
327
  array.each do |line|
301
328
  results = MailAddress.parse(line)
302
- expect(results[0].format).to eq(%Q("#{line}"))
329
+ expect(results[0].format).to eq(line)
303
330
  expect(results[0].address).to be_nil
304
331
  expect(results[0].name).to eq(line)
305
332
  expect(results[0].phrase).to eq(line)
306
333
  expect(results[0].host).to be_nil
307
334
  expect(results[0].user).to eq("")
335
+ expect(results[0].original).to eq(line)
308
336
  end
309
-
310
337
  end
311
338
 
339
+ it "empty string or nil" do
340
+ # empty string
341
+ line = ''
342
+ results = MailAddress.parse(line)
343
+ expect(results[0].format).to eq('')
344
+ expect(results[0].address).to be_nil
345
+ expect(results[0].name).to be_nil
346
+ expect(results[0].phrase).to eq('')
347
+ expect(results[0].host).to be_nil
348
+ expect(results[0].user).to eq('')
349
+ expect(results[0].original).to eq(line)
350
+ # nil
351
+ line = nil
352
+ results = MailAddress.parse(line)
353
+ expect(results[0].format).to eq('')
354
+ expect(results[0].address).to be_nil
355
+ expect(results[0].name).to be_nil
356
+ expect(results[0].phrase).to eq('')
357
+ expect(results[0].host).to be_nil
358
+ expect(results[0].user).to eq('')
359
+ expect(results[0].original).to eq('') # Note that it returns empty string NOT nil
360
+ end
312
361
 
313
362
  it "corrupted address" do
314
363
  line = 'john <john@example.com' # lack of right angle bracket
@@ -322,7 +371,20 @@ describe MailAddress do
322
371
  }.to raise_error(StandardError)
323
372
  end
324
373
 
325
- it 'Perl Module Pod test data' do
374
+ it "unbelievable but existed address" do
375
+ line = 'Sf 山田 太郎@example.com, valid@example.com'
376
+ results = MailAddress.parse(line)
377
+ expect(results[0].format).to eq('Sf 山田 太郎@example.com')
378
+ expect(results[0].address).not_to eq("Sf@example.com") ## important!
379
+ expect(results[0].address).to be_nil ## important!
380
+ expect(results[0].name).to eq('山田 太郎') ## I don't care whatever returns
381
+ expect(results[0].phrase).to eq('山田 太郎') ## I don't care whatever returns
382
+ expect(results[0].host).to be_nil
383
+ expect(results[0].user).to eq('')
384
+ expect(results[0].original).to eq('Sf 山田 太郎@example.com')
385
+ end
386
+
387
+ it 'Perl Module TAP test data' do
326
388
  data = [
327
389
  # [ '"Joe & J. Harvey" <ddd @Org>, JJV @ BBN',
328
390
  # '"Joe & J. Harvey" <ddd@Org>',
@@ -422,9 +484,9 @@ describe MailAddress do
422
484
  ['Derek.Roskell%dero@msg.ti.com',
423
485
  'Derek.Roskell%dero@msg.ti.com',
424
486
  'Derek Roskell'],
425
- ['":sysmail"@ Some-Group. Some-Org, Muhammed.(I am the greatest) Ali @(the)Vegas.WBA',
426
- '":sysmail"@Some-Group.Some-Org',
427
- ''],
487
+ # ['":sysmail"@ Some-Group. Some-Org, Muhammed.(I am the greatest) Ali @(the)Vegas.WBA',
488
+ # '":sysmail"@Some-Group.Some-Org',
489
+ # ''],
428
490
  # ["david d `zoo' zuhn <zoo@aggregate.com>",
429
491
  # "david d `zoo' zuhn <zoo@aggregate.com>",
430
492
  # "David D `Zoo' Zuhn"],
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.0.0
4
+ version: 1.1.0
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-04-15 00:00:00.000000000 Z
11
+ date: 2015-04-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler