normalic 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,22 +1,22 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
 
3
3
  Gem::Specification.new do |s|
4
- s.name = %q{normalic}
5
- s.version = "0.1.0"
4
+ s.name = "normalic"
5
+ s.version = "0.1.1"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
8
- s.authors = [%q{Eric Tang}]
9
- s.date = %q{2011-07-31}
10
- s.description = %q{Normalize U.S addresses}
11
- s.email = %q{eric.x.tang@gmail.com}
12
- s.extra_rdoc_files = [%q{README.rdoc}, %q{lib/constants.rb}, %q{lib/normalic.rb}]
13
- s.files = [%q{README.rdoc}, %q{Rakefile}, %q{lib/constants.rb}, %q{lib/normalic.rb}, %q{spec/normalic_spec.rb}, %q{Manifest}, %q{normalic.gemspec}]
14
- s.homepage = %q{http://github.com/ericxtang/normalic}
15
- s.rdoc_options = [%q{--line-numbers}, %q{--inline-source}, %q{--title}, %q{Normalic}, %q{--main}, %q{README.rdoc}]
16
- s.require_paths = [%q{lib}]
17
- s.rubyforge_project = %q{normalic}
18
- s.rubygems_version = %q{1.8.6}
19
- s.summary = %q{Normalize U.S addresses}
8
+ s.authors = ["Eric Tang"]
9
+ s.date = "2011-10-26"
10
+ s.description = "Normalize U.S addresses"
11
+ s.email = "eric.x.tang@gmail.com"
12
+ s.extra_rdoc_files = ["README.rdoc", "lib/constants.rb", "lib/normalic.rb", "lib/normalic/address.rb", "lib/normalic/phone_number.rb", "lib/normalic/uri.rb"]
13
+ s.files = ["Manifest", "README.rdoc", "Rakefile", "lib/constants.rb", "lib/normalic.rb", "lib/normalic/address.rb", "lib/normalic/phone_number.rb", "lib/normalic/uri.rb", "spec/normalic_spec.rb", "normalic.gemspec"]
14
+ s.homepage = "http://github.com/ericxtang/normalic"
15
+ s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Normalic", "--main", "README.rdoc"]
16
+ s.require_paths = ["lib"]
17
+ s.rubyforge_project = "normalic"
18
+ s.rubygems_version = "1.8.10"
19
+ s.summary = "Normalize U.S addresses"
20
20
 
21
21
  if s.respond_to? :specification_version then
22
22
  s.specification_version = 3
@@ -1,78 +1,320 @@
1
1
  require 'lib/normalic'
2
2
 
3
- describe "Normalic test" do
3
+
4
+ describe "Normalic::URI" do
5
+
6
+ it "should parse a well-formatted URI" do
7
+ uri = Normalic::URI.parse("http://mike@mkscrg.github.com:80/about.html?lang=ruby&dvcs=git#blog")
8
+ uri[:scheme].should == "http"
9
+ uri[:user].should == "mike"
10
+ uri[:subdomain].should == "mkscrg"
11
+ uri[:domain].should == "github"
12
+ uri[:tld].should == "com"
13
+ uri[:port].should == "80"
14
+ uri[:path].should == "/about.html"
15
+ uri[:query_hash].should == {"lang" => "ruby", "dvcs" => "git"}
16
+ uri[:fragment].should == "blog"
17
+ end
18
+
19
+ it "should print a parsed URI correctly" do
20
+ uri = Normalic::URI.parse("http://mike@mkscrg.github.com:80/about.html?lang=ruby&dvcs=git#blog")
21
+ ["http://mike@mkscrg.github.com:80/about.html?lang=ruby&dvcs=git#blog",
22
+ "http://mike@mkscrg.github.com:80/about.html?dvcs=git&lang=ruby#blog"].include?(uri.to_s.should)
23
+ end
24
+
25
+ it "should parse a bare domain and tld with default scheme and subdomain" do
26
+ uri = Normalic::URI.parse("github.com")
27
+ uri[:scheme].should == "http"
28
+ uri[:user].should == nil
29
+ uri[:subdomain].should == "www"
30
+ uri[:domain].should == "github"
31
+ uri[:tld].should == "com"
32
+ uri[:port].should == nil
33
+ uri[:path].should == "/"
34
+ uri[:query_hash].should == nil
35
+ uri[:fragment].should == nil
36
+ end
37
+
38
+ it "should normalize consecutive slashes and strip trailing slashes in the path" do
39
+ uri = Normalic::URI.parse("https://github.com/mkscrg//normalic/")
40
+ uri[:scheme].should == "https"
41
+ uri[:user].should == nil
42
+ uri[:subdomain].should == "www"
43
+ uri[:domain].should == "github"
44
+ uri[:tld].should == "com"
45
+ uri[:port].should == nil
46
+ uri[:path].should == "/mkscrg/normalic"
47
+ uri[:query_hash].should == nil
48
+ uri[:fragment].should == nil
49
+ end
50
+
51
+ it "should normalize relative path segments: '.' and '..'" do
52
+ uri = Normalic::URI.parse("github.com/ericxtang/expresso/../normalic")
53
+ uri[:scheme].should == "http"
54
+ uri[:user].should == nil
55
+ uri[:subdomain].should == "www"
56
+ uri[:domain].should == "github"
57
+ uri[:tld].should == "com"
58
+ uri[:port].should == nil
59
+ uri[:path].should == "/ericxtang/normalic"
60
+ uri[:query_hash].should == nil
61
+ uri[:fragment].should == nil
62
+ end
63
+
64
+ it "should match_essential? a nil subdomain against a 'www' subdomain" do
65
+ uri1 = Normalic::URI.parse("http://www.github.com")
66
+ uri2 = Normalic::URI.parse("http://github.com")
67
+ uri1.match_essential?(uri2).should == true
68
+ end
69
+
70
+ it "should match_essential? using the subdomain, domain, and tld" do
71
+ uri1 = Normalic::URI.parse("http://www.hyperpublic.com")
72
+ uri2 = Normalic::URI.parse("http://oxcart.hyperpublic.com")
73
+ uri1.match_essential?(uri2).should == false
74
+ end
75
+
76
+ it "should match_essential? using ONLY the subdomain, domain, and tld" do
77
+ uri1 = Normalic::URI.parse("http://www.hyperpublic.com/placesplus")
78
+ uri2 = Normalic::URI.parse("http://www.hyperpublic.com/deals")
79
+ uri1.match_essential?(uri2).should == true
80
+ end
81
+
82
+ it "should be nondestructive" do
83
+ raw = "github.com"
84
+ raw_orig = raw.clone
85
+ uri = Normalic::URI.parse(raw)
86
+ raw_orig.should == raw
87
+ uri[:scheme].should == "http"
88
+ uri[:user].should == nil
89
+ uri[:subdomain].should == "www"
90
+ uri[:domain].should == "github"
91
+ uri[:tld].should == "com"
92
+ uri[:port].should == nil
93
+ uri[:path].should == "/"
94
+ uri[:query_hash].should == nil
95
+ uri[:fragment].should == nil
96
+ end
97
+
98
+ end
99
+
100
+
101
+ describe "Normalic::PhoneNumber" do
102
+
103
+ it "should parse a bare phone number" do
104
+ ph = Normalic::PhoneNumber.parse("2345678901")
105
+ ph[:npa].should == "234"
106
+ ph[:nxx].should == "567"
107
+ ph[:slid].should == "8901"
108
+ end
109
+
110
+ it "should parse a phone number with an extension given" do
111
+ ph = Normalic::PhoneNumber.parse("2345678901 ext. 555")
112
+ ph[:npa].should == "234"
113
+ ph[:nxx].should == "567"
114
+ ph[:slid].should == "8901"
115
+ end
116
+
117
+ it "should parse a phone number with 1 in front" do
118
+ ph = Normalic::PhoneNumber.parse("12345678901")
119
+ ph[:npa].should == "234"
120
+ ph[:nxx].should == "567"
121
+ ph[:slid].should == "8901"
122
+ end
123
+
124
+ it "should parse a phone number with non-digit formatting" do
125
+ ph = Normalic::PhoneNumber.parse("+1 (234) 567 - 8901")
126
+ ph[:npa].should == "234"
127
+ ph[:nxx].should == "567"
128
+ ph[:slid].should == "8901"
129
+ end
130
+
131
+ it "should be nondestructive" do
132
+ raw = "2345678901"
133
+ raw_orig = raw.clone
134
+ ph = Normalic::PhoneNumber.parse(raw)
135
+ raw_orig.should == raw
136
+ ph[:npa].should == "234"
137
+ ph[:nxx].should == "567"
138
+ ph[:slid].should == "8901"
139
+ end
140
+
141
+ end
142
+
143
+
144
+ describe "Normalic::Address" do
4
145
 
5
146
  it "should parse an address with unit(floor) information" do
6
147
  addr = Normalic::Address.parse("201 Varick St. floor 12th, New York, NY 10014")
7
148
  addr[:number].should == "201"
8
- addr[:street].should == "varick"
9
- addr[:type].should == "st"
10
- addr[:city].should == "new york"
11
- addr[:state].should == "ny"
149
+ addr[:direction].should == nil
150
+ addr[:street].should == "Varick"
151
+ addr[:type].should == "St."
152
+ addr[:city].should == "New York"
153
+ addr[:state].should == "NY"
12
154
  addr[:zipcode].should == "10014"
155
+ addr[:intersection].should == false
13
156
  end
14
157
 
15
158
  it "should parse an address with direction information" do
16
159
  addr = Normalic::Address.parse("167 West 4th Street, New York, NY 10014")
17
160
  addr[:number].should == "167"
161
+ addr[:direction].should == "W"
162
+ addr[:street].should == "4th"
163
+ addr[:type].should == "St."
164
+ addr[:city].should == "New York"
165
+ addr[:state].should == "NY"
166
+ addr[:zipcode].should == "10014"
167
+ addr[:intersection].should == false
168
+ end
169
+
170
+ it "should parse an address with direction after the street type" do
171
+ addr = Normalic::Address.parse("167 4th Street Northeast, New York, NY 10014")
172
+ addr[:number].should == "167"
173
+ addr[:direction].should == "NE"
18
174
  addr[:street].should == "4th"
19
- addr[:direction].should == "w"
20
- addr[:type].should == "st"
21
- addr[:city].should == "new york"
22
- addr[:state].should == "ny"
175
+ addr[:type].should == "St."
176
+ addr[:city].should == "New York"
177
+ addr[:state].should == "NY"
178
+ addr[:zipcode].should == "10014"
179
+ addr[:intersection].should == false
180
+ end
181
+
182
+ it "should parse an intersection" do
183
+ addr = Normalic::Address.parse("9th Ave. and W 13th St., New York, NY 10014")
184
+ addr[:number].should == nil
185
+ addr[:direction].should == [nil, "W"]
186
+ addr[:street].should == ["9th", "13th"]
187
+ addr[:type].should == ["Ave.", "St."]
188
+ addr[:city].should == "New York"
189
+ addr[:state].should == "NY"
23
190
  addr[:zipcode].should == "10014"
191
+ addr[:intersection].should == true
24
192
  end
25
193
 
26
- it "should parse an address with incorrect state info" do
27
- addr = Normalic::Address.parse("871 Washington Street, New York, NewYork 10014")
194
+ it "should parse an address with incorrect state info and no zipcode" do
195
+ addr = Normalic::Address.parse("871 Washington Street, New York, NewYork")
28
196
  addr[:number].should == "871"
29
- addr[:street].should == "washington"
30
- addr[:type].should == "st"
31
- addr[:city].should == "new york"
32
- addr[:state].should == "ny"
197
+ addr[:direction].should == nil
198
+ addr[:street].should == "Washington"
199
+ addr[:type].should == "St."
200
+ addr[:city].should == "New York"
201
+ addr[:state].should == "NY"
202
+ addr[:zipcode].should == nil
203
+ addr[:intersection].should == false
204
+ end
205
+
206
+ it "should parse an address with no state info" do
207
+ addr = Normalic::Address.parse("416 W 13th Street, New York, 10014")
208
+ addr[:number].should == "416"
209
+ addr[:direction].should == "W"
210
+ addr[:street].should == "13th"
211
+ addr[:type].should == "St."
212
+ addr[:city].should == "New York"
213
+ addr[:state].should == "NY"
33
214
  addr[:zipcode].should == "10014"
215
+ addr[:intersection].should == false
34
216
  end
35
217
 
36
- it "should parse an address with floor info and without city info" do
37
- addr = Normalic::Address.parse("201 Varick St. floor 12th")
218
+ it "should parse only a zipcode into a state and city" do
219
+ addr = Normalic::Address.parse("08848")
220
+ addr[:number].should == nil
221
+ addr[:direction].should == nil
222
+ addr[:street].should == nil
223
+ addr[:type].should == nil
224
+ addr[:city].should == "Milford"
225
+ addr[:state].should == "NJ"
226
+ addr[:zipcode].should == "08848"
227
+ addr[:intersection].should == false
228
+ end
229
+
230
+ it "should normalize a zipcode with a +4 code" do
231
+ addr = Normalic::Address.parse("201 Varick St., New York, NY 10014-1234")
38
232
  addr[:number].should == "201"
39
- addr[:street].should == "varick"
40
- addr[:type].should == "st"
233
+ addr[:direction].should == nil
234
+ addr[:street].should == "Varick"
235
+ addr[:type].should == "St."
236
+ addr[:city].should == "New York"
237
+ addr[:state].should == "NY"
238
+ addr[:zipcode].should == "10014"
239
+ addr[:intersection].should == false
41
240
  end
42
241
 
43
242
  it "should parse an address with no city info" do
44
243
  addr = Normalic::Address.parse("871 Washington Street")
45
244
  addr[:number].should == "871"
46
- addr[:street].should == "washington"
47
- addr[:type].should == "st"
245
+ addr[:direction].should == nil
246
+ addr[:street].should == "Washington"
247
+ addr[:type].should == "St."
248
+ addr[:city].should == nil
249
+ addr[:state].should == nil
250
+ addr[:zipcode].should == nil
251
+ addr[:intersection].should == false
48
252
  end
49
253
 
254
+ it "should parse an address with floor info and without city info" do
255
+ addr = Normalic::Address.parse("201 Varick St. floor 12th")
256
+ addr[:number].should == "201"
257
+ addr[:direction].should == nil
258
+ addr[:street].should == "Varick"
259
+ addr[:type].should == "St."
260
+ addr[:city].should == nil
261
+ addr[:state].should == nil
262
+ addr[:zipcode].should == nil
263
+ addr[:intersection].should == false
264
+ end
50
265
 
51
266
  it "should parse an address with direction info and no city info" do
52
267
  addr = Normalic::Address.parse("871 West Washington Street")
53
268
  addr[:number].should == "871"
54
- addr[:street].should == "washington"
55
- addr[:direction].should == "w"
56
- addr[:type].should == "st"
269
+ addr[:direction].should == "W"
270
+ addr[:street].should == "Washington"
271
+ addr[:type].should == "St."
272
+ addr[:city].should == nil
273
+ addr[:state].should == nil
274
+ addr[:zipcode].should == nil
275
+ addr[:intersection].should == false
57
276
  end
58
277
 
59
278
  it "should use dot notation" do
60
- addr = Normalic::Address.parse("871 West Washington Street")
279
+ addr = Normalic::Address.parse("871 west washington street, new york, ny 10014")
61
280
  addr.number.should == "871"
281
+ addr.direction.should == "W"
282
+ addr.street.should == "Washington"
283
+ addr.type.should == "St."
284
+ addr.city.should == "New York"
285
+ addr.state.should == "NY"
286
+ addr.zipcode.should == "10014"
287
+ addr.intersection.should == false
62
288
  end
63
289
 
64
- it "should return nil if a bad field is passed in" do
65
- addr = Normalic::Address.parse("871 West Washington Street")
290
+ it "should return nil if a bad field is passed in with index notation" do
291
+ addr = Normalic::Address.parse("871 west washington street, new york, ny 10014")
66
292
  addr[:bad_name].should == nil
67
293
  end
68
294
 
69
295
  it "should return a line1" do
70
296
  addr = Normalic::Address.parse("871 West Washington Street")
71
- addr.line1.should == "871 W Washington St"
297
+ addr.line1.should == "871 W Washington St."
72
298
  end
73
299
 
74
300
  it "should have a to_s method" do
75
301
  addr = Normalic::Address.parse("167 West 4th Street, New York, NY 10014")
76
- addr.to_s.should == "167 W 4th St, New York, NY 10014"
302
+ addr.to_s.should == "167 W 4th St., New York, NY 10014"
303
+ end
304
+
305
+ it "should be nondestructive" do
306
+ raw = "167 West 4th Street, New York, NY 10014"
307
+ raw_orig = raw.clone
308
+ addr = Normalic::Address.parse(raw)
309
+ raw_orig.should == raw
310
+ addr[:number].should == "167"
311
+ addr[:direction].should == "W"
312
+ addr[:street].should == "4th"
313
+ addr[:type].should == "St."
314
+ addr[:city].should == "New York"
315
+ addr[:state].should == "NY"
316
+ addr[:zipcode].should == "10014"
317
+ addr[:intersection].should == false
77
318
  end
319
+
78
320
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: normalic
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Eric Tang
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-07-31 00:00:00 Z
18
+ date: 2011-10-26 00:00:00 Z
19
19
  dependencies: []
20
20
 
21
21
  description: Normalize U.S addresses
@@ -28,13 +28,19 @@ extra_rdoc_files:
28
28
  - README.rdoc
29
29
  - lib/constants.rb
30
30
  - lib/normalic.rb
31
+ - lib/normalic/address.rb
32
+ - lib/normalic/phone_number.rb
33
+ - lib/normalic/uri.rb
31
34
  files:
35
+ - Manifest
32
36
  - README.rdoc
33
37
  - Rakefile
34
38
  - lib/constants.rb
35
39
  - lib/normalic.rb
40
+ - lib/normalic/address.rb
41
+ - lib/normalic/phone_number.rb
42
+ - lib/normalic/uri.rb
36
43
  - spec/normalic_spec.rb
37
- - Manifest
38
44
  - normalic.gemspec
39
45
  homepage: http://github.com/ericxtang/normalic
40
46
  licenses: []