people_places_things 2.4.1 → 2.5.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.
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ The MIT License
2
+
3
+ Copyright (c) 2011 Danny Burkes
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.textile CHANGED
@@ -65,4 +65,6 @@ h2. Data source
65
65
 
66
66
  The data that makes up @lib/people_places_things/data/data.yml@ was generated from @lib/people_places_things/data/raw.txt@, which was downloaded from "the US Census website":http://www.census.gov/geo/www/ansi/download.html.
67
67
 
68
-
68
+ h2. License
69
+
70
+ SUID is released under the MIT License
@@ -1,6 +1,6 @@
1
1
  module PeoplePlacesThings
2
2
  class StreetAddress
3
- attr_accessor :number, :pre_direction, :name, :suffix, :post_direction, :unit_type, :unit, :raw
3
+ attr_accessor :number, :pre_direction, :ordinal, :name, :suffix, :post_direction, :unit_type, :unit, :box_number, :raw
4
4
 
5
5
  def initialize(str)
6
6
  self.raw = str
@@ -20,9 +20,15 @@ module PeoplePlacesThings
20
20
  if self.unit_type
21
21
  self.unit = tokens[-1]
22
22
  tokens.slice!(tokens.size - 2, 2)
23
+ if tokens.size > 0
24
+ # see if unit_type is specified twice i.e. Suite #
25
+ if StreetAddress.find_token(tokens[-1], UNIT_TYPES)
26
+ tokens.slice!(tokens.size - 1)
27
+ end
28
+ end
23
29
  end
24
30
  end
25
-
31
+
26
32
  # If at least one token remains, check last token for directionality. If so, set post_direction and delete the token
27
33
  #
28
34
  if tokens.size > 0
@@ -33,7 +39,7 @@ module PeoplePlacesThings
33
39
  end
34
40
  end
35
41
 
36
- # If at least one token remains, check last token for suffix. If so, self set.suffix and delete the token
42
+ # If at least one token remains, check last token for suffix. If so, set suffix and delete the token
37
43
  #
38
44
  if tokens.size > 0
39
45
  self.suffix = StreetAddress.find_token(tokens[-1], SUFFIXES)
@@ -47,8 +53,20 @@ module PeoplePlacesThings
47
53
  tokens.shift if self.pre_direction
48
54
  end
49
55
 
50
- # if any tokens remain, set joined remaining tokens as name, otherwise, set name to post_direction, if set, and set post_direction to nil
56
+ # If at least one token remains, check for ordinal
57
+ #
58
+ if tokens.size > 0
59
+ self.ordinal = tokens.first if StreetAddress.find_token(tokens.first, ORDINALS)
60
+ end
61
+
62
+ # Check for a PO Box / Rural Route pattern and extract the box_number
51
63
  #
64
+ if tokens.size > 2 && self.number == nil && (tokens.join(' ') =~ PO_BOX_PATTERN || tokens.join(' ') =~ RR_PATTERN)
65
+ self.box_number = tokens[-1].gsub(/[(,?!\'":.#)]/, '')
66
+ end
67
+
68
+ # if any tokens remain, set joined remaining tokens as name, otherwise, set name to post_direction, if set, and set post_direction to nil
69
+ #
52
70
  if tokens.size > 0
53
71
  self.name = tokens.join(' ')
54
72
  else
@@ -59,6 +77,11 @@ module PeoplePlacesThings
59
77
  validate_parts
60
78
  end
61
79
 
80
+ # check for a valid street address, we assume at least a number or box_number and name is required.
81
+ def valid?
82
+ !self.name.nil? && !(self.number.nil? && self.box_number.nil?)
83
+ end
84
+
62
85
  def to_s
63
86
  parts = []
64
87
  parts << self.number if self.number
@@ -70,11 +93,34 @@ module PeoplePlacesThings
70
93
  parts << self.unit if self.unit
71
94
  parts.join(' ')
72
95
  end
96
+
97
+ # to_canonical_s
98
+ # format the address in a postal service canonical format
99
+ def to_canonical_s
100
+ parts = []
101
+ parts << self.number.upcase if self.number
102
+ parts << StreetAddress.string_for(self.pre_direction, :short).upcase if self.pre_direction
103
+ parts << StreetAddress.string_for(StreetAddress.find_token(self.ordinal, ORDINALS), :short).upcase if self.ordinal
104
+ canonical_name = self.name.gsub(/[(,?!\'":.#)]/, '').gsub(PO_BOX_PATTERN, 'PO BOX').upcase if self.name
105
+ canonical_name.gsub!(/(rr|r.r.)/i, 'RR') if canonical_name =~ RR_PATTERN
106
+ # remove the original ordinal and box from the name, they are output in canonical form separately
107
+ canonical_name.gsub!(self.ordinal.upcase, '') if self.ordinal
108
+ canonical_name.gsub!(self.box_number, '') if self.box_number
109
+ parts << canonical_name.chomp(' ') if canonical_name
110
+ parts << self.box_number if self.box_number
111
+ parts << StreetAddress.string_for(self.suffix, :short).upcase if self.suffix
112
+ parts << StreetAddress.string_for(self.post_direction, :short).upcase if self.post_direction
113
+ # make all unit type as the canoncial number "#"
114
+ parts << StreetAddress.string_for(:number, :short).upcase if self.unit_type
115
+ parts << self.unit.upcase if self.unit
116
+ parts.delete('')
117
+ parts.join(' ')
118
+ end
73
119
 
74
120
  def self.string_for(symbol, form)
75
121
  raise "Requested unknown form \"#{type}\" for :#{symbol}" if !SUPPORTED_FORMS.include?(form)
76
122
 
77
- val = DIRECTIONS[symbol] || SUFFIXES[symbol] || UNIT_TYPES[symbol]
123
+ val = DIRECTIONS[symbol] || SUFFIXES[symbol] || UNIT_TYPES[symbol] || ORDINALS[symbol]
78
124
 
79
125
  if val
80
126
  val = ((val[SUPPORTED_FORMS.index(form)] rescue nil) || (val.first rescue val))
@@ -102,80 +148,267 @@ module PeoplePlacesThings
102
148
  nil
103
149
  end
104
150
 
151
+ PO_BOX_PATTERN = /(p.o. box|p o box|post office box|po box)/i
152
+ RR_PATTERN = /(rr|r.r.)\s*(#\d+|\d+)(\s*-\s*|\s*)box(\s*|\s*-\s*)(#\d+|\d+)/i
153
+
154
+ # to_canonical_s uses the short version of each of the following
155
+ # long version is in position 0
156
+ # short version is in position 1
157
+
105
158
  DIRECTIONS = {
106
- :north => %w(north n n.),
159
+ :north => %w(north n n.),
107
160
  :northeast => %w(northeast ne ne. n.e.),
108
- :east => %w(east e e.),
161
+ :east => %w(east e e.),
109
162
  :southeast => %w(southeast se se. s.e.),
110
- :south => %w(south s s.),
163
+ :south => %w(south s s.),
111
164
  :southwest => %w(southwest sw sw. s.w.),
112
- :west => %w(west w w.),
165
+ :west => %w(west w w.),
113
166
  :northwest => %w(northwest nw nw. n.w.)
167
+
114
168
  }
115
169
 
116
170
  SUFFIXES = {
117
- :alley => %w(alley al al.),
118
- :avenue => %w(avenue ave ave. av av.),
119
- :beach => %w(beach bch bch.),
120
- :bend => %w(bend),
121
- :boulevard => %w(boulevard blvd blvd. blv blv.),
122
- :center => %w(center ctr ctr.),
123
- :circle => %w(circle cir cir.),
124
- :cliff => %w(cliff clf clf.),
125
- :club => %w(club),
126
- :condo => %w(condo con con.),
127
- :court => %w(court ct ct. cor cor.),
128
- :cove => %w(cove),
129
- :creek => %w(creek crk crk.),
130
- :crossing => %w(crossing xing xing. crs crs.),
131
- :drive => %w(drive dr dr.),
132
- :extension => %w(extension ext ext.),
133
- :freeway => %w(freeway fwy fwy.),
134
- :gardens => %w(gardens gdns gdns.),
135
- :glen => %w(glen gl gl.),
136
- :green => %w(green grn grn.),
137
- :heights => %w(heights hts hts.),
138
- :highway => %w(highway hwy hwy. hgwy hgwy.),
139
- :hill => %w(hill),
140
- :knoll => %w(knoll knl knl.),
141
- :lake => %w(lake),
142
- :lane => %w(lane ln ln.),
143
- :landing => %w(landing lndg lndg.),
144
- :loop => %w(loop),
145
- :meadows => %w(meadows mdws mdws.),
146
- :manor => %w(manor mnr mnr.),
147
- :mountain => %w(mountain mtn mtn. mnt mnt.),
148
- :oaks => %w(oaks),
149
- :oval => %w(oval),
150
- :park => %w(park pk pk. prk prk.),
151
- :parkway => %w(parkway pkwy pkwy. pky pky.),
152
- :pier => %w(pier),
153
- :place => %w(place pl pl.),
154
- :plaza => %w(plaza plz plz.),
155
- :point => %w(point pt pt. pnt pnt.),
156
- :ridge => %w(ridge ri ri.),
157
- :road => %w(road rd rd.),
158
- :row => %w(row),
159
- :run => %w(run),
160
- :springs => %w(springs spgs spgs.),
161
- :square => %w(square sq sq.),
162
- :street => %w(street st st.),
163
- :station => %w(station sta sta.),
164
- :terrace => %w(terrace ter ter. te te.),
165
- :turnpike => %w(turnpike tpke tpke.),
166
- :trace => %w(trace trc trc.),
167
- :trail => %w(trail trl trl. tl tl.),
168
- :valley => %w(valley vly vly.),
169
- :walk => %w(walk),
170
- :way => %w(way)
171
+ :alley => %w(alley aly ally allee al al.),
172
+ :anex => %w(anex anx annex annx anx.),
173
+ :arcade => %w(arcade arc arc.),
174
+ :avenue => %w(avenue ave aven avenu avnue ave. av av.),
175
+ :bayou => %w(bayou byu bayoo byu.),
176
+ :beach => %w(beach bch bch.),
177
+ :bend => %w(bend bnd bnd.),
178
+ :bluff => %w(bluff blf bluf blf.),
179
+ :bluffs => %w(bluffs blfs blfs.),
180
+ :bottom => %w(bottom btm bot bottm btm.),
181
+ :boulevard => %w(boulevard blvd blvd. boul boulv blv blv.),
182
+ :branch => %w(branch br brnch br.),
183
+ :bridge => %w(bridge brg brdge),
184
+ :brook => %w(brook brk brk.),
185
+ :brooks => %w(brooks brks),
186
+ :burg => %w(burg bg),
187
+ :burgs => %w(burgs bgs),
188
+ :bypass => %w(bypass byp bypa bypas byps),
189
+ :camp => %w(camp cp cmp),
190
+ :canyon => %w(canyon cyn canyn cnyn cyn.),
191
+ :cape => %w(cape cpe),
192
+ :causeway => %w(causeway cswy causwa cswy.),
193
+ :center => %w(center ctr cent centr cnter centre cntr ctr.),
194
+ :centers => %w(centers ctrs),
195
+ :circle => %w(circle cir circ circl crcl crcle cir.),
196
+ :cliff => %w(cliff clf clf.),
197
+ :cliffs => %w(cliffs clfs),
198
+ :club => %w(club clb),
199
+ :common => %w(common cmn),
200
+ :commons => %w(commons cmns),
201
+ :corner => %w(corner cor),
202
+ :corners => %w(corners cors),
203
+ :condo => %w(condo con con.),
204
+ :court => %w(court ct ct. cor cor.),
205
+ :courts => %w(courts cts cts.),
206
+ :cove => %w(cove cv),
207
+ :coves => %w(coves cvs),
208
+ :creek => %w(creek crk crk.),
209
+ :crescent => %w(crescent cres crsent crsnt),
210
+ :crest => %w(crest crst),
211
+ :crossing => %w(crossing xing xing. crssng crs crs.),
212
+ :crossroad => %w(crossroad xrd),
213
+ :crossroads => %w(crossroads xrds),
214
+ :curve => %w(curve curv),
215
+ :dale => %w(dale dl),
216
+ :dam => %w(dam dm),
217
+ :divide => %w(divide dv div dvd),
218
+ :drive => %w(drive dr driv drv dr.),
219
+ :drives => %w(drives drs),
220
+ :estate => %w(estate est),
221
+ :estates => %w(estates ests),
222
+ :expressway => %w(expressway expy exp expr express expw expr),
223
+ :extension => %w(extension ext ext.),
224
+ :extensions => %w(extensions exts),
225
+ :fall => %w(fall fall),
226
+ :falls => %w(falls fls),
227
+ :ferry => %w(ferry fry frry),
228
+ :field => %w(field fld),
229
+ :fields => %w(fields flds),
230
+ :flat => %w(flat flt),
231
+ :flats => %w(flats flts),
232
+ :ford => %w(ford, frd),
233
+ :fords => %w(fords frds),
234
+ :forest => %w(forest frst forests),
235
+ :forge => %w(forge frg forg),
236
+ :forges => %w(forges frgs),
237
+ :fork => %w(fork frk),
238
+ :forks => %w(forks frks),
239
+ :fort => %w(fort ft frt),
240
+ :freeway => %w(freeway fwy freewy frway fwy.),
241
+ :garden => %w(garden gdn gardn grden grdn),
242
+ :gardens => %w(gardens gdns gdns.),
243
+ :gateway => %w(gateway gtwy gatewy gatway gtway),
244
+ :glen => %w(glen gln gl gl.),
245
+ :glens => %w(glens glns),
246
+ :green => %w(green grn grn.),
247
+ :greens => %w(greens grns),
248
+ :grove => %w(grove grv grov),
249
+ :groves => %w(groves grvs),
250
+ :harbor => %w(harbor hbr harb harbr hrbor),
251
+ :harbors => %w(harbors hbrs),
252
+ :haven => %w(haven hvn),
253
+ :heights => %w(heights hts hts.),
254
+ :highway => %w(highway hwy highwy hiway hiwy hway hwy. hgwy hgwy.),
255
+ :hill => %w(hill hl),
256
+ :hills => %w(hills hls),
257
+ :hollow => %w(hollow holw hllw hollows holw holws),
258
+ :inlet => %w(inlet inlt),
259
+ :island => %w(island is islnd),
260
+ :islands => %w(islands iss islnds),
261
+ :isle => %w(isle isle isles),
262
+ :junction => %w(junction jct jction jctn junctn juncton),
263
+ :junctions => %w(junctions jcts jctns),
264
+ :key => %w(key ky),
265
+ :keys => %w(keys kys),
266
+ :knoll => %w(knoll knl knl.),
267
+ :knolls => %w(knolls knls),
268
+ :lake => %w(lake lk),
269
+ :lakes => %w(lakes lks),
270
+ :land => %w(land land),
271
+ :landing => %w(landing lndg lndg.),
272
+ :lane => %w(lane ln ln.),
273
+ :light => %w(light lgt),
274
+ :lights => %w(lights lgts),
275
+ :loaf => %w(loaf lf),
276
+ :lock => %w(lock lck),
277
+ :locks => %w(locks lcks),
278
+ :lodge => %w(lodge ldg ldge lodg),
279
+ :loop => %w(loop loop loops),
280
+ :mall => %w(mall mall),
281
+ :manor => %w(manor mnr),
282
+ :manors => %w(manors mnrs),
283
+ :meadow => %w(meadow mdw),
284
+ :meadows => %w(meadows mdws medows mdws.),
285
+ :mews => %w(mews mews),
286
+ :mill => %w(mill ml),
287
+ :mills => %w(mills mls),
288
+ :mission => %w(mission msn missn),
289
+ :motorway => %w(motorway mtwy),
290
+ :mount => %w(mount mt mnt),
291
+ :mountain => %w(mountain mtn mntn mountin mtn. mnt mnt.),
292
+ :mountains => %w(mountains mtns),
293
+ :neck => %w(neck nck),
294
+ :orchard => %w(orchard orch orchrd),
295
+ :oaks => %w(oaks),
296
+ :oval => %w(oval oval ovl),
297
+ :overpass => %w(overpass opas),
298
+ :park => %w(park park pk. prk prk.),
299
+ :parkway => %w(parkway pkwy pkwy. pky pky.),
300
+ :parkways => %w(parkways pkwy pkwys),
301
+ :pass => %w(pass pass),
302
+ :passage => %w(passage psge),
303
+ :path => %w(path path paths),
304
+ :pike => %w(pike pike pikes),
305
+ :pine => %w(pine pne),
306
+ :pines => %w(pines pnes),
307
+ :pier => %w(pier),
308
+ :place => %w(place pl pl.),
309
+ :plain => %w(plain pln),
310
+ :plains => %w(plains plns),
311
+ :plaza => %w(plaza plz plza plz.),
312
+ :point => %w(point pt pt. pnt pnt.),
313
+ :points => %w(points pts),
314
+ :port => %w(port prt),
315
+ :ports => %w(ports prts),
316
+ :prairie => %w(prairie pr prarie),
317
+ :radial => %w(radial radl rad radiel),
318
+ :ramp => %w(ramp ramp),
319
+ :ranch => %w(ranch rnch ranches rnchs),
320
+ :rapid => %w(rapid rpd),
321
+ :rapids => %w(rapids rpds),
322
+ :rest => %w(rest rst),
323
+ :ridge => %w(ridge rdg rdge ri.),
324
+ :ridges => %w(ridges rdgs),
325
+ :river => %w(river riv rvr),
326
+ :road => %w(road rd rd.),
327
+ :roads => %w(roads rds),
328
+ :route => %w(route rte),
329
+ :row => %w(row row),
330
+ :rue => %w(rue rue),
331
+ :run => %w(run run),
332
+ :shoal => %w(shoal shl),
333
+ :shoals => %w(shoals shls),
334
+ :shore => %w(shore shr shoar),
335
+ :skyway => %w(skyway skwy),
336
+ :spring => %w(spring spg spng sprng),
337
+ :springs => %w(springs spgs spgs.),
338
+ :spur => %w(spur spur spurs),
339
+ :square => %w(square sq sqr sqre squ sq.),
340
+ :squares => %w(squares sqs sqrs),
341
+ :station => %w(station sta sta.),
342
+ :stravenue => %w(stravenue stra strav straven stravn strvnue),
343
+ :stream => %w(stream strm steme),
344
+ :street => %w(street st strt str st.),
345
+ :streets => %w(streets sts),
346
+ :summit => %w(summit smt sumit sumitt),
347
+ :terrace => %w(terrace ter ter. te te.),
348
+ :throughway => %w(throughway trwy),
349
+ :trace => %w(trace trce traces),
350
+ :track => %w(track trak tracks trk trks),
351
+ :trafficway => %w(trafficway trfy),
352
+ :trail => %w(trail trl trails trls trl. tl tl.),
353
+ :trailer => %w(trailer trlr trlrs),
354
+ :tunnel => %w(tunnel tunl tunls tunnels tunnl),
355
+ :turnpike => %w(turnpike tpke turnpk trnpk tpke.),
356
+ :underpass => %w(underpass upas),
357
+ :union => %w(union un),
358
+ :valley => %w(valley vly vlly vally vly.),
359
+ :valleys => %w(valleys vlys),
360
+ :viaduct => %w(viaduct via vdct viadct),
361
+ :view => %w(view vw),
362
+ :views => %w(views vws),
363
+ :village => %w(village vlg vill villg villiage vlg),
364
+ :villages => %w(villages vlgs),
365
+ :ville => %w(ville vl),
366
+ :vista => %w(vista vs vis vist vst vsta),
367
+ :walk => %w(walk walk walks),
368
+ :wall => %w(wall wall),
369
+ :way => %w(way way wy),
370
+ :ways => %w(ways ways),
371
+ :well => %w(well wl),
372
+ :wells => %w(wells wls)
373
+
171
374
  }
172
375
 
173
376
  UNIT_TYPES = {
174
- :suite => %w(suite ste ste.),
175
- :number => %w(number # nbr nbr.),
176
- :apartment => %w(apartment apt apt.)
377
+ :suite => %w(suite ste ste.),
378
+ :number => %w(number # nbr nbr.),
379
+ :apartment => %w(apartment apt apt.),
380
+ :building => %w(building bldg),
381
+ :department => %w(department dept),
382
+ :floor => %w(floor fl),
383
+ :room => %w(room rm),
384
+ :space => %w(space spc),
385
+ :stop => %w(stop stop),
386
+ :unit => %w(unit unit)
387
+ }
388
+
389
+ ORDINALS = {
390
+ :first => %w(first 1st),
391
+ :second => %w(second 2nd),
392
+ :third => %w(third 3rd),
393
+ :fourth => %w(fourth 4th forth),
394
+ :fifth => %w(fifth 5th),
395
+ :sixth => %w(sixth 6th),
396
+ :seventh => %w(seventh 7th),
397
+ :eighth => %w(eighth 8th),
398
+ :ninth => %w(ninth 9th),
399
+ :tenth => %w(tenth 10th),
400
+ :eleventh => %w(eleventh 11th),
401
+ :twelfth => %w(twelfth 12th),
402
+ :thirteenth => %w(thirteenth 13th),
403
+ :fourteenth => %w(fourteenth 14th),
404
+ :fifteenth => %w(fifteenth 15th),
405
+ :sixteenth => %w(sixteenth 16th),
406
+ :seventeenth => %w(seventeenth 17th),
407
+ :eighteenth => %w(eighteenth 18th),
408
+ :nineteenth => %w(nineteenth 19th)
177
409
  }
178
410
 
411
+ # to_canonical_s format uses the short form
179
412
  SUPPORTED_FORMS = [:long, :short]
180
413
  end
181
414
  end
@@ -0,0 +1,3 @@
1
+ module PeoplePlacesThings
2
+ VERSION = "2.5.0"
3
+ end
@@ -5,7 +5,4 @@ require 'people_places_things/phone_number'
5
5
  require 'people_places_things/zip_code'
6
6
  require 'people_places_things/state'
7
7
  require 'people_places_things/location'
8
-
9
- module PeoplePlacesThings
10
- VERSION = "2.4.1"
11
- end
8
+ require 'people_places_things/version'
metadata CHANGED
@@ -1,12 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: people_places_things
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: false
5
- segments:
6
- - 2
7
- - 4
8
- - 1
9
- version: 2.4.1
4
+ prerelease:
5
+ version: 2.5.0
10
6
  platform: ruby
11
7
  authors:
12
8
  - Danny Burkes
@@ -14,24 +10,42 @@ autorequire:
14
10
  bindir: bin
15
11
  cert_chain: []
16
12
 
17
- date: 2010-03-03 00:00:00 -08:00
18
- default_executable:
19
- dependencies: []
20
-
13
+ date: 2011-10-08 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: rspec
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - "="
22
+ - !ruby/object:Gem::Version
23
+ version: 2.6.0
24
+ type: :development
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: rake
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - "="
33
+ - !ruby/object:Gem::Version
34
+ version: 0.8.6
35
+ type: :development
36
+ version_requirements: *id002
21
37
  description: Parsers and formatters for person names, street addresses, city/state/zip, phone numbers, etc.
22
- email: dburkes@netable.com
38
+ email:
39
+ - dburkes@netable.com
23
40
  executables: []
24
41
 
25
42
  extensions: []
26
43
 
27
- extra_rdoc_files:
28
- - README.textile
44
+ extra_rdoc_files: []
45
+
29
46
  files:
30
- - .gitignore
31
47
  - README.textile
32
- - Rakefile
33
- - lib/people_places_things.rb
34
- - lib/people_places_things/VERSION
48
+ - LICENSE
35
49
  - lib/people_places_things/ansi_counties.rb
36
50
  - lib/people_places_things/data/data.yml
37
51
  - lib/people_places_things/data/process_data.rb
@@ -41,52 +55,35 @@ files:
41
55
  - lib/people_places_things/phone_number.rb
42
56
  - lib/people_places_things/state.rb
43
57
  - lib/people_places_things/street_address.rb
58
+ - lib/people_places_things/version.rb
44
59
  - lib/people_places_things/zip_code.rb
45
- - people_places_things.gemspec
46
- - spec/ansi_counties_spec.rb
47
- - spec/helper.rb
48
- - spec/location_spec.rb
49
- - spec/person_name_spec.rb
50
- - spec/phone_number_spec.rb
51
- - spec/state_spec.rb
52
- - spec/street_address_spec.rb
53
- - spec/zip_code_spec.rb
54
- has_rdoc: true
60
+ - lib/people_places_things.rb
55
61
  homepage: http://github.com/dburkes/people_places_things
56
62
  licenses: []
57
63
 
58
64
  post_install_message:
59
- rdoc_options:
60
- - --charset=UTF-8
65
+ rdoc_options: []
66
+
61
67
  require_paths:
62
68
  - lib
63
69
  required_ruby_version: !ruby/object:Gem::Requirement
70
+ none: false
64
71
  requirements:
65
72
  - - ">="
66
73
  - !ruby/object:Gem::Version
67
- segments:
68
- - 0
69
74
  version: "0"
70
75
  required_rubygems_version: !ruby/object:Gem::Requirement
76
+ none: false
71
77
  requirements:
72
78
  - - ">="
73
79
  - !ruby/object:Gem::Version
74
- segments:
75
- - 0
76
80
  version: "0"
77
81
  requirements: []
78
82
 
79
83
  rubyforge_project:
80
- rubygems_version: 1.3.6
84
+ rubygems_version: 1.8.7
81
85
  signing_key:
82
86
  specification_version: 3
83
87
  summary: Parsers and formatters for person names, street addresses, city/state/zip, phone numbers, etc.
84
- test_files:
85
- - spec/ansi_counties_spec.rb
86
- - spec/helper.rb
87
- - spec/location_spec.rb
88
- - spec/person_name_spec.rb
89
- - spec/phone_number_spec.rb
90
- - spec/state_spec.rb
91
- - spec/street_address_spec.rb
92
- - spec/zip_code_spec.rb
88
+ test_files: []
89
+
data/.gitignore DELETED
@@ -1,3 +0,0 @@
1
- doc
2
- *.tmproj
3
- *.gem
data/Rakefile DELETED
@@ -1,42 +0,0 @@
1
- begin; require 'rubygems'; rescue LoadError; end
2
-
3
- require 'rake'
4
- require 'rake/rdoctask'
5
- require 'spec/rake/spectask'
6
-
7
- desc "Run all specs"
8
- Spec::Rake::SpecTask.new('specs') do |t|
9
- t.libs << 'lib'
10
- t.spec_files = FileList['spec/**/*.rb']
11
- end
12
-
13
- Dir['tasks/*.rake'].each{|f| import(f) }
14
-
15
- task :default => [:specs]
16
-
17
- begin
18
- require 'jeweler'
19
- require 'lib/people_places_things'
20
- Jeweler::Tasks.new do |gemspec|
21
- gemspec.name = "people_places_things"
22
- gemspec.version = PeoplePlacesThings::VERSION
23
- gemspec.summary = "Parsers and formatters for person names, street addresses, city/state/zip, phone numbers, etc."
24
- gemspec.email = "dburkes@netable.com"
25
- gemspec.homepage = "http://github.com/dburkes/people_places_things"
26
- gemspec.description = "Parsers and formatters for person names, street addresses, city/state/zip, phone numbers, etc."
27
- gemspec.authors = ["Danny Burkes"]
28
- end
29
- rescue LoadError
30
- puts "Jeweler not available. Install it with: sudo gem install technicalpickles-jeweler -s http://gems.github.com"
31
- end
32
-
33
- namespace :doc do
34
- desc "Generate RDoc"
35
- Rake::RDocTask.new('people_places_things') { |rdoc|
36
- rdoc.rdoc_dir = 'doc'
37
- rdoc.options << '--inline-source'
38
- # rdoc.rdoc_files.include('README.md')
39
- # rdoc.rdoc_files.include('lib/**/*')
40
- # rdoc.rdoc_files.exclude('lib/ansi_counties/data/**/*')
41
- }
42
- end
@@ -1 +0,0 @@
1
- 2.3.0
@@ -1,70 +0,0 @@
1
- # Generated by jeweler
2
- # DO NOT EDIT THIS FILE DIRECTLY
3
- # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
- # -*- encoding: utf-8 -*-
5
-
6
- Gem::Specification.new do |s|
7
- s.name = %q{people_places_things}
8
- s.version = "2.4.1"
9
-
10
- s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
- s.authors = ["Danny Burkes"]
12
- s.date = %q{2010-03-03}
13
- s.description = %q{Parsers and formatters for person names, street addresses, city/state/zip, phone numbers, etc.}
14
- s.email = %q{dburkes@netable.com}
15
- s.extra_rdoc_files = [
16
- "README.textile"
17
- ]
18
- s.files = [
19
- ".gitignore",
20
- "README.textile",
21
- "Rakefile",
22
- "lib/people_places_things.rb",
23
- "lib/people_places_things/VERSION",
24
- "lib/people_places_things/ansi_counties.rb",
25
- "lib/people_places_things/data/data.yml",
26
- "lib/people_places_things/data/process_data.rb",
27
- "lib/people_places_things/data/raw.txt",
28
- "lib/people_places_things/location.rb",
29
- "lib/people_places_things/person_name.rb",
30
- "lib/people_places_things/phone_number.rb",
31
- "lib/people_places_things/state.rb",
32
- "lib/people_places_things/street_address.rb",
33
- "lib/people_places_things/zip_code.rb",
34
- "people_places_things.gemspec",
35
- "spec/ansi_counties_spec.rb",
36
- "spec/helper.rb",
37
- "spec/location_spec.rb",
38
- "spec/person_name_spec.rb",
39
- "spec/phone_number_spec.rb",
40
- "spec/state_spec.rb",
41
- "spec/street_address_spec.rb",
42
- "spec/zip_code_spec.rb"
43
- ]
44
- s.homepage = %q{http://github.com/dburkes/people_places_things}
45
- s.rdoc_options = ["--charset=UTF-8"]
46
- s.require_paths = ["lib"]
47
- s.rubygems_version = %q{1.3.6}
48
- s.summary = %q{Parsers and formatters for person names, street addresses, city/state/zip, phone numbers, etc.}
49
- s.test_files = [
50
- "spec/ansi_counties_spec.rb",
51
- "spec/helper.rb",
52
- "spec/location_spec.rb",
53
- "spec/person_name_spec.rb",
54
- "spec/phone_number_spec.rb",
55
- "spec/state_spec.rb",
56
- "spec/street_address_spec.rb",
57
- "spec/zip_code_spec.rb"
58
- ]
59
-
60
- if s.respond_to? :specification_version then
61
- current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
62
- s.specification_version = 3
63
-
64
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
65
- else
66
- end
67
- else
68
- end
69
- end
70
-
@@ -1,27 +0,0 @@
1
- require 'spec/helper'
2
-
3
- describe ANSICounties do
4
- it "should find code for valid state and county" do
5
- ANSICounties.code_for('ga', 'fulton').should == 13121
6
- end
7
-
8
- it "should find code for valid state and county hash" do
9
- ANSICounties.code_for(:state => 'ga', :county => 'fulton').should == 13121
10
- end
11
-
12
- it "should return nil for invalid state and county" do
13
- ANSICounties.code_for(:state => 'ga', :county => 'fubar').should == nil
14
- end
15
-
16
- it "should find code for alternate st. form" do
17
- ANSICounties.code_for(:state => 'MO', :county => 'saint LOUIS').should == 29510
18
- end
19
-
20
- it "should find data for valid code" do
21
- ANSICounties.data_for(13121).should == { :state => 'GA', :county => 'FULTON' }
22
- end
23
-
24
- it "should return nil for invalid code" do
25
- ANSICounties.data_for(1312111).should == nil
26
- end
27
- end
data/spec/helper.rb DELETED
@@ -1,2 +0,0 @@
1
- require 'lib/people_places_things'
2
- include PeoplePlacesThings
@@ -1,56 +0,0 @@
1
- require 'spec/helper'
2
-
3
- describe Location do
4
- it "should parse city" do
5
- test_location("san francisco", "san francisco", nil, nil)
6
- end
7
-
8
- it "should parse city state abbreviation" do
9
- test_location("san francisco ca", "san francisco", "CA", nil)
10
- end
11
-
12
- it "should parse city state full" do
13
- test_location("san francisco california", "san francisco", "CA", nil)
14
- end
15
-
16
- it "should parse city comma state" do
17
- test_location("san francisco, ca", "san francisco", "CA", nil)
18
- end
19
-
20
- it "should parse city state zip" do
21
- test_location("san francisco ca 94114-1212", "san francisco", "CA", '94114-1212')
22
- end
23
-
24
- it "should parse city comma state zip" do
25
- test_location("san francisco, ca 94114-1212", "san francisco", "CA", '94114-1212')
26
- end
27
-
28
- it "should parse city zip" do
29
- test_location("san francisco 94114-1212", "san francisco", nil, '94114-1212')
30
- end
31
-
32
- it "should parse state zip" do
33
- test_location("ca 94114-1212", nil, "CA", '94114-1212')
34
- end
35
-
36
- it "should parse state" do
37
- test_location("california", nil, "CA", nil)
38
- end
39
-
40
- it "should parse zip" do
41
- test_location("94114-1212", nil, nil, '94114-1212')
42
- end
43
-
44
- it "should save raw" do
45
- Location.new('san francisco, ca').raw.should == 'san francisco, ca'
46
- end
47
-
48
- private
49
-
50
- def test_location(str, city, state, zip)
51
- l = Location.new(str)
52
- l.city.should == city if l.city
53
- l.state.to_s(:abbr).should == state.upcase if l.state
54
- l.zip.to_s.should == zip if l.zip
55
- end
56
- end
@@ -1,195 +0,0 @@
1
- require 'spec/helper'
2
-
3
- describe PersonName do
4
- it "should parse first_middle_last" do
5
- name = PersonName.new "george quincy drake peabody", :first_middle_last
6
- name.first.should == 'george'
7
- name.middle.should == 'quincy drake'
8
- name.last.should == 'peabody'
9
- end
10
-
11
- it "should parse last_first_middle" do
12
- name = PersonName.new "peabody george quincy drake", :last_first_middle
13
- name.first.should == 'george'
14
- name.middle.should == 'quincy drake'
15
- name.last.should == 'peabody'
16
- end
17
-
18
- it "should parse last only in first_middle_last format" do
19
- name = PersonName.new "peabody", :first_middle_last
20
- name.first.should == nil
21
- name.middle.should == nil
22
- name.last.should == 'peabody'
23
- end
24
-
25
- it "should parse last only in last_first_middle format" do
26
- name = PersonName.new "peabody", :last_first_middle
27
- name.first.should == nil
28
- name.middle.should == nil
29
- name.last.should == 'peabody'
30
- end
31
-
32
- it "should parse first middle last suffix" do
33
- name = PersonName.new "george f. peabody jr"
34
- name.first.should == 'george'
35
- name.middle.should == 'f.'
36
- name.last.should == 'peabody'
37
- name.suffix.should == 'jr'
38
- end
39
-
40
- it "should not parse middle initial as suffix" do
41
- name = PersonName.new "brown, james v"
42
- name.first.should == 'james'
43
- name.middle.should == 'v'
44
- name.last.should == 'brown'
45
- name.suffix.should == nil
46
- end
47
-
48
- it "should parse last suffix first middle" do
49
- name = PersonName.new "peabody jr george f.", :last_first_middle
50
- name.first.should == 'george'
51
- name.middle.should == 'f.'
52
- name.last.should == 'peabody'
53
- name.suffix.should == 'jr'
54
- end
55
-
56
- it "should parse last first middle suffix" do
57
- name = PersonName.new "peabody, george f., jr.", :last_first_middle
58
- name.first.should == 'george'
59
- name.middle.should == 'f.'
60
- name.last.should == 'peabody'
61
- name.suffix.should == 'jr'
62
- end
63
-
64
- it "should default to first_middle_last" do
65
- name = PersonName.new "george quincy drake peabody"
66
- name.first.should == 'george'
67
- name.middle.should == 'quincy drake'
68
- name.last.should == 'peabody'
69
- end
70
-
71
- it "should ignore spaces and commas" do
72
- name = PersonName.new " peabody,george quincy drake ", :last_first_middle
73
- name.first.should == 'george'
74
- name.middle.should == 'quincy drake'
75
- name.last.should == 'peabody'
76
- end
77
-
78
- it "should strip periods from initials" do
79
- name = PersonName.new "george f. peabody", :first_middle_last
80
- name.first.should == 'george'
81
- name.middle.should == 'f.'
82
- name.middle_i == 'f'
83
- name.last.should == 'peabody'
84
- end
85
-
86
- it "should format for :first" do
87
- name = PersonName.new "george quincy peabody"
88
- name.to_s(:first).should == 'george'
89
- end
90
-
91
- it "should format for :middle" do
92
- name = PersonName.new "george quincy peabody"
93
- name.to_s(:middle).should == 'quincy'
94
- end
95
-
96
- it "should format for :last" do
97
- name = PersonName.new "george quincy peabody"
98
- name.to_s(:last).should == 'peabody'
99
- end
100
-
101
- it "should format for :full" do
102
- name = PersonName.new "george quincy peabody"
103
- name.to_s(:full).should == 'george quincy peabody'
104
- end
105
-
106
- it "should format for :full_reverse" do
107
- name = PersonName.new "george quincy peabody jr."
108
- name.to_s(:full_reverse).should == 'peabody george quincy jr'
109
- end
110
-
111
- it "should format for :first_space_last" do
112
- name = PersonName.new "george quincy peabody"
113
- name.to_s(:first_space_last).should == 'george peabody'
114
- end
115
-
116
- it "should format for :last_space_first" do
117
- name = PersonName.new "george quincy peabody"
118
- name.to_s(:last_space_first).should == 'peabody george'
119
- end
120
-
121
- it "should format for :last_comma_first" do
122
- name = PersonName.new "george quincy peabody"
123
- name.to_s(:last_comma_first).should == 'peabody,george'
124
- end
125
-
126
- it "should format for :last_comma_space_first" do
127
- name = PersonName.new "george quincy peabody"
128
- name.to_s(:last_comma_space_first).should == 'peabody, george'
129
- end
130
-
131
- it "should handle missing parts when formatting" do
132
- PersonName.new('peabody').to_s(:last_comma_space_first).should == 'peabody'
133
- end
134
-
135
- it "should respond to individual accessors" do
136
- name = PersonName.new "george quincy peabody"
137
- name.first.should == 'george'
138
- name.first_i.should == 'g'
139
- name.middle.should == 'quincy'
140
- name.middle_i.should == 'q'
141
- name.last.should == 'peabody'
142
- name.last_i.should == 'p'
143
- end
144
-
145
- it "should recognize exact equality" do
146
- PersonName.new("george quincy peabody").should be_eql(PersonName.new("george quincy peabody"))
147
- end
148
-
149
- it "should ignore case for equality" do
150
- PersonName.new("george quincy peabody").should be_eql(PersonName.new("george quincy PEABODY"))
151
- end
152
-
153
- it "should recognize subset equality" do
154
- PersonName.new("george quincy peabody").should be_eql(PersonName.new("george peabody"))
155
- end
156
-
157
- it "should parse mc donald for first_middle_last" do
158
- name = PersonName.new "george quincy drake mc donald", :first_middle_last
159
- name.first.should == 'george'
160
- name.middle.should == 'quincy drake'
161
- name.last.should == 'mcdonald'
162
- end
163
-
164
- it "should parse mc donald for last_first_middle" do
165
- name = PersonName.new "mc donald george quincy drake", :last_first_middle
166
- name.first.should == 'george'
167
- name.middle.should == 'quincy drake'
168
- name.last.should == 'mcdonald'
169
- end
170
-
171
- it "should normalize suffixes" do
172
- name = PersonName.new "george quincy peabody jr"
173
- name2 = PersonName.new "peabody jr., george quincy", :last_first_middle
174
- name.should be_eql(name2)
175
- end
176
-
177
- it "should support auto detect formatting for first_middle_last" do
178
- name = PersonName.new "george f. peabody jr"
179
- name.first.should == 'george'
180
- name.middle.should == 'f.'
181
- name.last.should == 'peabody'
182
- name.suffix.should == 'jr'
183
- end
184
-
185
- it "should support auto detect formatting for last_first_middle" do
186
- name = PersonName.new "peabody, george quincy drake"
187
- name.first.should == 'george'
188
- name.middle.should == 'quincy drake'
189
- name.last.should == 'peabody'
190
- end
191
-
192
- it "should save raw" do
193
- PersonName.new("ronald mcdonald").raw.should == 'ronald mcdonald'
194
- end
195
- end
@@ -1,63 +0,0 @@
1
- require 'spec/helper'
2
-
3
- describe PhoneNumber do
4
- it "should parse ten digits" do
5
- phone = PhoneNumber.new '4045551212'
6
- phone.area_code.should == '404'
7
- phone.number.should == '5551212'
8
- phone.exchange.should == '555'
9
- phone.suffix.should == '1212'
10
- end
11
-
12
- it "should parse eleven digits" do
13
- phone = PhoneNumber.new '14045551212'
14
- phone.area_code.should == '404'
15
- phone.number.should == '5551212'
16
- phone.exchange.should == '555'
17
- phone.suffix.should == '1212'
18
- end
19
-
20
- it "should ignore certain characters" do
21
- phone = PhoneNumber.new '1 (404) 555-1212'
22
- phone.area_code.should == '404'
23
- phone.number.should == '5551212'
24
- phone.exchange.should == '555'
25
- phone.suffix.should == '1212'
26
- end
27
-
28
- it "should support international format, at least for US numbers, for now" do
29
- phone = PhoneNumber.new '+1 404 555-1212'
30
- phone.area_code.should == '404'
31
- phone.number.should == '5551212'
32
- phone.exchange.should == '555'
33
- phone.suffix.should == '1212'
34
- end
35
-
36
- it "should throw exception on unsupported parse format" do
37
- lambda { PhoneNumber.new('40455512') }.should raise_error
38
- end
39
-
40
- it "should format :full_digits" do
41
- PhoneNumber.new('14045551212').to_s(:full_digits).should == '14045551212'
42
- end
43
-
44
- it "should format :local_digits" do
45
- PhoneNumber.new('14045551212').to_s(:local_digits).should == '5551212'
46
- end
47
-
48
- it "should format :full_formatted" do
49
- PhoneNumber.new('14045551212').to_s(:full_formatted).should == '1 (404) 555-1212'
50
- end
51
-
52
- it "should format :local_formatted" do
53
- PhoneNumber.new('14045551212').to_s(:local_formatted).should == '555-1212'
54
- end
55
-
56
- it "should throw exception on unsupported to_sformat" do
57
- lambda { PhoneNumber.new('14045551212').to_s(:bogus) }.should raise_error
58
- end
59
-
60
- it "should save raw" do
61
- PhoneNumber.new('14045551212').raw.should == '14045551212'
62
- end
63
- end
data/spec/state_spec.rb DELETED
@@ -1,33 +0,0 @@
1
- require 'spec/helper'
2
-
3
- describe State do
4
- it "should parse abbreviation" do
5
- state = State.new 'ga'
6
- state.sym.should == :ga
7
- end
8
-
9
- it "should parse full" do
10
- state = State.new 'georgia'
11
- state.sym.should == :ga
12
- end
13
-
14
- it "should throw exception on unsupported state" do
15
- lambda { State.new('foo') }.should raise_error
16
- end
17
-
18
- it "should format :abbr" do
19
- State.new('ga').to_s(:abbr).should == 'GA'
20
- end
21
-
22
- it "should format :full" do
23
- State.new('ga').to_s(:full).should == 'Georgia'
24
- end
25
-
26
- it "should throw exception on unsupported to_s format" do
27
- lambda { State.new('ga').to_s(:bogus) }.should raise_error
28
- end
29
-
30
- it "should save raw" do
31
- State.new('georgia').raw.should == 'georgia'
32
- end
33
- end
@@ -1,163 +0,0 @@
1
- require 'spec/helper'
2
-
3
- describe StreetAddress do
4
- it "should parse number street" do
5
- addr = StreetAddress.new "123 Main Street"
6
- addr.number.should == '123'
7
- addr.name.should == 'Main'
8
- addr.suffix.should == :street
9
- end
10
-
11
- it "should parse number with letter" do
12
- addr = StreetAddress.new "204-B Main Street"
13
- addr.number.should == '204-B'
14
- addr.name.should == 'Main'
15
- addr.suffix.should == :street
16
- end
17
-
18
- it "should parse pre direction" do
19
- addr = StreetAddress.new "123 E Main Street"
20
- addr.number.should == '123'
21
- addr.pre_direction.should == :east
22
- addr.name.should == 'Main'
23
- addr.suffix.should == :street
24
- end
25
-
26
- it "should parse post direction" do
27
- addr = StreetAddress.new "123 Main Street NE"
28
- addr.number.should == '123'
29
- addr.name.should == 'Main'
30
- addr.suffix.should == :street
31
- addr.post_direction.should == :northeast
32
- end
33
-
34
- it "should parse pre and post direction" do
35
- addr = StreetAddress.new "123 E Main Street North"
36
- addr.number.should == '123'
37
- addr.pre_direction.should == :east
38
- addr.name.should == 'Main'
39
- addr.suffix.should == :street
40
- addr.post_direction.should == :north
41
- end
42
-
43
- it "should parse street names that look like directions" do
44
- addr = StreetAddress.new "123 E E St"
45
- addr.number.should == '123'
46
- addr.pre_direction.should == :east
47
- addr.name.should == 'E'
48
- addr.suffix.should == :street
49
- end
50
-
51
- it "should parse street names that look like directions, with post directions" do
52
- addr = StreetAddress.new "123 E E St NE"
53
- addr.number.should == '123'
54
- addr.pre_direction.should == :east
55
- addr.name.should == 'E'
56
- addr.suffix.should == :street
57
- addr.post_direction.should == :northeast
58
- end
59
-
60
- it "should parse abbreviations" do
61
- addr = StreetAddress.new "123 e. 1st ave"
62
- addr.number.should == '123'
63
- addr.pre_direction.should == :east
64
- addr.name.should == '1st'
65
- addr.suffix.should == :avenue
66
- end
67
-
68
- it "should parse suites" do
69
- addr = StreetAddress.new "123 E E St NE Ste 23"
70
- addr.number.should == '123'
71
- addr.pre_direction.should == :east
72
- addr.name.should == 'E'
73
- addr.suffix.should == :street
74
- addr.post_direction.should == :northeast
75
- addr.unit_type.should == :suite
76
- addr.unit.should == '23'
77
- end
78
-
79
- it "should parse apartments" do
80
- addr = StreetAddress.new "123 E E St NE Apartment 4"
81
- addr.number.should == '123'
82
- addr.pre_direction.should == :east
83
- addr.name.should == 'E'
84
- addr.suffix.should == :street
85
- addr.post_direction.should == :northeast
86
- addr.unit_type.should == :apartment
87
- addr.unit.should == '4'
88
- end
89
-
90
- it "should parse numbers" do
91
- addr = StreetAddress.new '123 E E St NE # 5'
92
- addr.number.should == '123'
93
- addr.pre_direction.should == :east
94
- addr.name.should == 'E'
95
- addr.suffix.should == :street
96
- addr.post_direction.should == :northeast
97
- addr.unit_type.should == :number
98
- addr.unit.should == '5'
99
- end
100
-
101
- it "should parse no number" do
102
- addr = StreetAddress.new "Westside Highway"
103
- addr.number.should == nil
104
- addr.name.should == 'Westside'
105
- addr.suffix.should == :highway
106
- end
107
-
108
- it "should parse directional street with suffix" do
109
- addr = StreetAddress.new "12 north avenue"
110
- addr.number.should == '12'
111
- addr.name.should == 'north'
112
- addr.suffix.should == :avenue
113
- end
114
-
115
- it "should parse directional street without suffix" do
116
- addr = StreetAddress.new "12 north"
117
- addr.number.should == '12'
118
- addr.name.should == 'north'
119
- end
120
-
121
- it "should parse directional street with postdir" do
122
- addr = StreetAddress.new "12 north w"
123
- addr.number.should == '12'
124
- addr.name.should == 'north'
125
- addr.post_direction.should == :west
126
- end
127
-
128
- it "should parse directional street with postdir and unit" do
129
- addr = StreetAddress.new "12 n sw apt. 2"
130
- addr.number.should == '12'
131
- addr.name.should == 'n'
132
- addr.post_direction.should == :southwest
133
- addr.unit_type.should == :apartment
134
- addr.unit.should == '2'
135
- end
136
-
137
- it "should handle commas" do
138
- addr = StreetAddress.new "123 E E St NE, suite 23"
139
- addr.number.should == '123'
140
- addr.pre_direction.should == :east
141
- addr.name.should == 'E'
142
- addr.suffix.should == :street
143
- addr.post_direction.should == :northeast
144
- addr.unit_type.should == :suite
145
- addr.unit.should == '23'
146
- end
147
-
148
- it "should support long form" do
149
- StreetAddress.string_for(:northwest, :long).should == 'northwest'
150
- end
151
-
152
- it "should support short form" do
153
- StreetAddress.string_for(:road, :short).should == 'rd'
154
- end
155
-
156
- it "should support short form when none exists" do
157
- StreetAddress.string_for(:oaks, :short).should == StreetAddress.string_for(:oaks, :long)
158
- end
159
-
160
- it "should save raw" do
161
- StreetAddress.new('123 Main st.').raw.should == '123 Main st.'
162
- end
163
- end
@@ -1,31 +0,0 @@
1
- require 'spec/helper'
2
-
3
- describe ZipCode do
4
- it "should parse base" do
5
- zip = ZipCode.new '30306'
6
- zip.base.should == '30306'
7
- zip.plus_four.should == nil
8
- end
9
-
10
- it "should parse plus four" do
11
- zip = ZipCode.new '30306-3522'
12
- zip.base.should == '30306'
13
- zip.plus_four.should == '3522'
14
- end
15
-
16
- it "should throw exception on unsupported parse format" do
17
- lambda { ZipCode.new('303065344') }.should raise_error
18
- end
19
-
20
- it "should convert to string" do
21
- ZipCode.new('30306-3522').to_s.should == '30306-3522'
22
- end
23
-
24
- it "should throw exception on unsupported to_s format" do
25
- lambda { ZipCode.new('30306-3522').to_s(:bogus) }.should raise_error
26
- end
27
-
28
- it "should save raw format" do
29
- ZipCode.new('30306-3522').raw.should == '30306-3522'
30
- end
31
- end