state_by_zip 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +32 -0
- data/README.md +19 -0
- data/data/state_by_zip.yml +958 -0
- data/lib/state_by_zip.rb +16 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/state_by_zip_spec.rb +23 -0
- data/state_by_zip.gemspec +20 -0
- metadata +64 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: facd06545c9a47bbe48a0c0bee1dd6066a0ffbe61ef82244ba00be7b21549d6d
|
4
|
+
data.tar.gz: 448262aa7a806cfe19c22688bcbba7a6a64797e74a255dd181a0b037f75871fd
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 0dfd1a9f694d46b7c24c61b8c9bbfc2bece4503c1477a40dab1ee940f813f2898ab62819557232d0fceb6eb41ecffab4c83018a91ea5ff131c4b4584ac1696e5
|
7
|
+
data.tar.gz: ca7760a627b841a724184e4b2f1d3b14fe4e9e65e50b3325dbc2cbd2ae0049545ec8667d1032254f867b79432cd0d66879fc781ed0f6b6e41db700d669ef82f6
|
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
state-by-zip (0.0.1)
|
5
|
+
|
6
|
+
GEM
|
7
|
+
remote: https://rubygems.org/
|
8
|
+
specs:
|
9
|
+
diff-lcs (1.5.0)
|
10
|
+
rspec (3.12.0)
|
11
|
+
rspec-core (~> 3.12.0)
|
12
|
+
rspec-expectations (~> 3.12.0)
|
13
|
+
rspec-mocks (~> 3.12.0)
|
14
|
+
rspec-core (3.12.2)
|
15
|
+
rspec-support (~> 3.12.0)
|
16
|
+
rspec-expectations (3.12.3)
|
17
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
18
|
+
rspec-support (~> 3.12.0)
|
19
|
+
rspec-mocks (3.12.6)
|
20
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
21
|
+
rspec-support (~> 3.12.0)
|
22
|
+
rspec-support (3.12.1)
|
23
|
+
|
24
|
+
PLATFORMS
|
25
|
+
x86_64-darwin-21
|
26
|
+
|
27
|
+
DEPENDENCIES
|
28
|
+
rspec (> 3)
|
29
|
+
state-by-zip!
|
30
|
+
|
31
|
+
BUNDLED WITH
|
32
|
+
2.4.2
|
data/README.md
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# state_by_zip
|
2
|
+
|
3
|
+
Single purpose gem to find US states by ZIP codes. It takes the idea of matching ZIP codes against SCF prefixes from https://github.com/monicao/zip-code-info, but is also adjusted for special cases like "00210".
|
4
|
+
|
5
|
+
The gem doesn't call external APIs and the lookup data is less than 10kb.
|
6
|
+
|
7
|
+
In case of ZIP codes spreading across multiple states only the primary one is returned (as shown in https://www.unitedstateszipcodes.org).
|
8
|
+
|
9
|
+
## Usage
|
10
|
+
```
|
11
|
+
StateByZip.find(12345)
|
12
|
+
# => "NY"
|
13
|
+
|
14
|
+
StateByZip.find('00987')
|
15
|
+
# => "PR"
|
16
|
+
```
|
17
|
+
|
18
|
+
## Alternatives
|
19
|
+
If you need to identify cities or time zones you can use https://github.com/monterail/zip-codes instead.
|
@@ -0,0 +1,958 @@
|
|
1
|
+
---
|
2
|
+
'005': NY
|
3
|
+
'006': PR
|
4
|
+
'007': PR
|
5
|
+
'008': VI
|
6
|
+
'009': PR
|
7
|
+
'010': MA
|
8
|
+
'011': MA
|
9
|
+
'012': MA
|
10
|
+
'013': MA
|
11
|
+
'014': MA
|
12
|
+
'015': MA
|
13
|
+
'016': MA
|
14
|
+
'017': MA
|
15
|
+
'018': MA
|
16
|
+
'019': MA
|
17
|
+
'020': MA
|
18
|
+
'021': MA
|
19
|
+
'022': MA
|
20
|
+
'023': MA
|
21
|
+
'024': MA
|
22
|
+
'025': MA
|
23
|
+
'026': MA
|
24
|
+
'027': MA
|
25
|
+
'028': RI
|
26
|
+
'029': RI
|
27
|
+
'030': NH
|
28
|
+
'031': NH
|
29
|
+
'032': NH
|
30
|
+
'033': NH
|
31
|
+
'034': NH
|
32
|
+
'035': NH
|
33
|
+
'036': NH
|
34
|
+
'037': NH
|
35
|
+
'038': NH
|
36
|
+
'039': ME
|
37
|
+
'040': ME
|
38
|
+
'041': ME
|
39
|
+
'042': ME
|
40
|
+
'043': ME
|
41
|
+
'044': ME
|
42
|
+
'045': ME
|
43
|
+
'046': ME
|
44
|
+
'047': ME
|
45
|
+
'048': ME
|
46
|
+
'049': ME
|
47
|
+
'050': VT
|
48
|
+
'051': VT
|
49
|
+
'052': VT
|
50
|
+
'053': VT
|
51
|
+
'054': VT
|
52
|
+
'055': MA
|
53
|
+
'056': VT
|
54
|
+
'057': VT
|
55
|
+
'058': VT
|
56
|
+
'059': VT
|
57
|
+
'060': CT
|
58
|
+
'061': CT
|
59
|
+
'062': CT
|
60
|
+
'063': CT
|
61
|
+
'064': CT
|
62
|
+
'065': CT
|
63
|
+
'066': CT
|
64
|
+
'067': CT
|
65
|
+
'068': CT
|
66
|
+
'069': CT
|
67
|
+
'070': NJ
|
68
|
+
'071': NJ
|
69
|
+
'072': NJ
|
70
|
+
'073': NJ
|
71
|
+
'074': NJ
|
72
|
+
'075': NJ
|
73
|
+
'076': NJ
|
74
|
+
'077': NJ
|
75
|
+
'078': NJ
|
76
|
+
'079': NJ
|
77
|
+
'080': NJ
|
78
|
+
'081': NJ
|
79
|
+
'082': NJ
|
80
|
+
'083': NJ
|
81
|
+
'084': NJ
|
82
|
+
'085': NJ
|
83
|
+
'086': NJ
|
84
|
+
'087': NJ
|
85
|
+
'088': NJ
|
86
|
+
'089': NJ
|
87
|
+
'090': AE
|
88
|
+
'091': AE
|
89
|
+
'092': AE
|
90
|
+
'093': AE
|
91
|
+
'094': AE
|
92
|
+
'095': AE
|
93
|
+
'096': AE
|
94
|
+
'097': AE
|
95
|
+
'098': AE
|
96
|
+
'100': NY
|
97
|
+
'101': NY
|
98
|
+
'102': NY
|
99
|
+
'103': NY
|
100
|
+
'104': NY
|
101
|
+
'105': NY
|
102
|
+
'106': NY
|
103
|
+
'107': NY
|
104
|
+
'108': NY
|
105
|
+
'109': NY
|
106
|
+
'110': NY
|
107
|
+
'111': NY
|
108
|
+
'112': NY
|
109
|
+
'113': NY
|
110
|
+
'114': NY
|
111
|
+
'115': NY
|
112
|
+
'116': NY
|
113
|
+
'117': NY
|
114
|
+
'118': NY
|
115
|
+
'119': NY
|
116
|
+
'120': NY
|
117
|
+
'121': NY
|
118
|
+
'122': NY
|
119
|
+
'123': NY
|
120
|
+
'124': NY
|
121
|
+
'125': NY
|
122
|
+
'126': NY
|
123
|
+
'127': NY
|
124
|
+
'128': NY
|
125
|
+
'129': NY
|
126
|
+
'130': NY
|
127
|
+
'131': NY
|
128
|
+
'132': NY
|
129
|
+
'133': NY
|
130
|
+
'134': NY
|
131
|
+
'135': NY
|
132
|
+
'136': NY
|
133
|
+
'137': NY
|
134
|
+
'138': NY
|
135
|
+
'139': NY
|
136
|
+
'140': NY
|
137
|
+
'141': NY
|
138
|
+
'142': NY
|
139
|
+
'143': NY
|
140
|
+
'144': NY
|
141
|
+
'145': NY
|
142
|
+
'146': NY
|
143
|
+
'147': NY
|
144
|
+
'148': NY
|
145
|
+
'149': NY
|
146
|
+
'150': PA
|
147
|
+
'151': PA
|
148
|
+
'152': PA
|
149
|
+
'153': PA
|
150
|
+
'154': PA
|
151
|
+
'155': PA
|
152
|
+
'156': PA
|
153
|
+
'157': PA
|
154
|
+
'158': PA
|
155
|
+
'159': PA
|
156
|
+
'160': PA
|
157
|
+
'161': PA
|
158
|
+
'162': PA
|
159
|
+
'163': PA
|
160
|
+
'164': PA
|
161
|
+
'165': PA
|
162
|
+
'166': PA
|
163
|
+
'167': PA
|
164
|
+
'168': PA
|
165
|
+
'169': PA
|
166
|
+
'170': PA
|
167
|
+
'171': PA
|
168
|
+
'172': PA
|
169
|
+
'173': PA
|
170
|
+
'174': PA
|
171
|
+
'175': PA
|
172
|
+
'176': PA
|
173
|
+
'177': PA
|
174
|
+
'178': PA
|
175
|
+
'179': PA
|
176
|
+
'180': PA
|
177
|
+
'181': PA
|
178
|
+
'182': PA
|
179
|
+
'183': PA
|
180
|
+
'184': PA
|
181
|
+
'185': PA
|
182
|
+
'186': PA
|
183
|
+
'187': PA
|
184
|
+
'188': PA
|
185
|
+
'189': PA
|
186
|
+
'190': PA
|
187
|
+
'191': PA
|
188
|
+
'192': PA
|
189
|
+
'193': PA
|
190
|
+
'194': PA
|
191
|
+
'195': PA
|
192
|
+
'196': PA
|
193
|
+
'197': DE
|
194
|
+
'198': DE
|
195
|
+
'199': DE
|
196
|
+
'200': DC
|
197
|
+
'201': VA
|
198
|
+
'202': DC
|
199
|
+
'203': DC
|
200
|
+
'204': DC
|
201
|
+
'205': DC
|
202
|
+
'206': MD
|
203
|
+
'207': MD
|
204
|
+
'208': MD
|
205
|
+
'209': MD
|
206
|
+
'210': MD
|
207
|
+
'211': MD
|
208
|
+
'212': MD
|
209
|
+
'214': MD
|
210
|
+
'215': MD
|
211
|
+
'216': MD
|
212
|
+
'217': MD
|
213
|
+
'218': MD
|
214
|
+
'219': MD
|
215
|
+
'220': VA
|
216
|
+
'221': VA
|
217
|
+
'222': VA
|
218
|
+
'223': VA
|
219
|
+
'224': VA
|
220
|
+
'225': VA
|
221
|
+
'226': VA
|
222
|
+
'227': VA
|
223
|
+
'228': VA
|
224
|
+
'229': VA
|
225
|
+
'230': VA
|
226
|
+
'231': VA
|
227
|
+
'232': VA
|
228
|
+
'233': VA
|
229
|
+
'234': VA
|
230
|
+
'235': VA
|
231
|
+
'236': VA
|
232
|
+
'237': VA
|
233
|
+
'238': VA
|
234
|
+
'239': VA
|
235
|
+
'240': VA
|
236
|
+
'241': VA
|
237
|
+
'242': VA
|
238
|
+
'243': VA
|
239
|
+
'244': VA
|
240
|
+
'245': VA
|
241
|
+
'246': VA
|
242
|
+
'247': WV
|
243
|
+
'248': WV
|
244
|
+
'249': WV
|
245
|
+
'250': WV
|
246
|
+
'251': WV
|
247
|
+
'252': WV
|
248
|
+
'253': WV
|
249
|
+
'254': WV
|
250
|
+
'255': WV
|
251
|
+
'256': WV
|
252
|
+
'257': WV
|
253
|
+
'258': WV
|
254
|
+
'259': WV
|
255
|
+
'260': WV
|
256
|
+
'261': WV
|
257
|
+
'262': WV
|
258
|
+
'263': WV
|
259
|
+
'264': WV
|
260
|
+
'265': WV
|
261
|
+
'266': WV
|
262
|
+
'267': WV
|
263
|
+
'268': WV
|
264
|
+
'270': NC
|
265
|
+
'271': NC
|
266
|
+
'272': NC
|
267
|
+
'273': NC
|
268
|
+
'274': NC
|
269
|
+
'275': NC
|
270
|
+
'276': NC
|
271
|
+
'277': NC
|
272
|
+
'278': NC
|
273
|
+
'279': NC
|
274
|
+
'280': NC
|
275
|
+
'281': NC
|
276
|
+
'282': NC
|
277
|
+
'283': NC
|
278
|
+
'284': NC
|
279
|
+
'285': NC
|
280
|
+
'286': NC
|
281
|
+
'287': NC
|
282
|
+
'288': NC
|
283
|
+
'289': NC
|
284
|
+
'290': SC
|
285
|
+
'291': SC
|
286
|
+
'292': SC
|
287
|
+
'293': SC
|
288
|
+
'294': SC
|
289
|
+
'295': SC
|
290
|
+
'296': SC
|
291
|
+
'297': SC
|
292
|
+
'298': SC
|
293
|
+
'299': SC
|
294
|
+
'300': GA
|
295
|
+
'301': GA
|
296
|
+
'302': GA
|
297
|
+
'303': GA
|
298
|
+
'304': GA
|
299
|
+
'305': GA
|
300
|
+
'306': GA
|
301
|
+
'307': GA
|
302
|
+
'308': GA
|
303
|
+
'309': GA
|
304
|
+
'310': GA
|
305
|
+
'311': GA
|
306
|
+
'312': GA
|
307
|
+
'313': GA
|
308
|
+
'314': GA
|
309
|
+
'315': GA
|
310
|
+
'316': GA
|
311
|
+
'317': GA
|
312
|
+
'318': GA
|
313
|
+
'319': GA
|
314
|
+
'320': FL
|
315
|
+
'321': FL
|
316
|
+
'322': FL
|
317
|
+
'323': FL
|
318
|
+
'324': FL
|
319
|
+
'325': FL
|
320
|
+
'326': FL
|
321
|
+
'327': FL
|
322
|
+
'328': FL
|
323
|
+
'329': FL
|
324
|
+
'330': FL
|
325
|
+
'331': FL
|
326
|
+
'332': FL
|
327
|
+
'333': FL
|
328
|
+
'334': FL
|
329
|
+
'335': FL
|
330
|
+
'336': FL
|
331
|
+
'337': FL
|
332
|
+
'338': FL
|
333
|
+
'339': FL
|
334
|
+
'340': AA
|
335
|
+
'341': FL
|
336
|
+
'342': FL
|
337
|
+
'344': FL
|
338
|
+
'346': FL
|
339
|
+
'347': FL
|
340
|
+
'349': FL
|
341
|
+
'350': AL
|
342
|
+
'351': AL
|
343
|
+
'352': AL
|
344
|
+
'354': AL
|
345
|
+
'355': AL
|
346
|
+
'356': AL
|
347
|
+
'357': AL
|
348
|
+
'358': AL
|
349
|
+
'359': AL
|
350
|
+
'360': AL
|
351
|
+
'361': AL
|
352
|
+
'362': AL
|
353
|
+
'363': AL
|
354
|
+
'364': AL
|
355
|
+
'365': AL
|
356
|
+
'366': AL
|
357
|
+
'367': AL
|
358
|
+
'368': AL
|
359
|
+
'369': AL
|
360
|
+
'370': TN
|
361
|
+
'371': TN
|
362
|
+
'372': TN
|
363
|
+
'373': TN
|
364
|
+
'374': TN
|
365
|
+
'375': TN
|
366
|
+
'376': TN
|
367
|
+
'377': TN
|
368
|
+
'378': TN
|
369
|
+
'379': TN
|
370
|
+
'380': TN
|
371
|
+
'381': TN
|
372
|
+
'382': TN
|
373
|
+
'383': TN
|
374
|
+
'384': TN
|
375
|
+
'385': TN
|
376
|
+
'386': MS
|
377
|
+
'387': MS
|
378
|
+
'388': MS
|
379
|
+
'389': MS
|
380
|
+
'390': MS
|
381
|
+
'391': MS
|
382
|
+
'392': MS
|
383
|
+
'393': MS
|
384
|
+
'394': MS
|
385
|
+
'395': MS
|
386
|
+
'396': MS
|
387
|
+
'397': MS
|
388
|
+
'398': GA
|
389
|
+
'399': GA
|
390
|
+
'400': KY
|
391
|
+
'401': KY
|
392
|
+
'402': KY
|
393
|
+
'403': KY
|
394
|
+
'404': KY
|
395
|
+
'405': KY
|
396
|
+
'406': KY
|
397
|
+
'407': KY
|
398
|
+
'408': KY
|
399
|
+
'409': KY
|
400
|
+
'410': KY
|
401
|
+
'411': KY
|
402
|
+
'412': KY
|
403
|
+
'413': KY
|
404
|
+
'414': KY
|
405
|
+
'415': KY
|
406
|
+
'416': KY
|
407
|
+
'417': KY
|
408
|
+
'418': KY
|
409
|
+
'420': KY
|
410
|
+
'421': KY
|
411
|
+
'422': KY
|
412
|
+
'423': KY
|
413
|
+
'424': KY
|
414
|
+
'425': KY
|
415
|
+
'426': KY
|
416
|
+
'427': KY
|
417
|
+
'430': OH
|
418
|
+
'431': OH
|
419
|
+
'432': OH
|
420
|
+
'433': OH
|
421
|
+
'434': OH
|
422
|
+
'435': OH
|
423
|
+
'436': OH
|
424
|
+
'437': OH
|
425
|
+
'438': OH
|
426
|
+
'439': OH
|
427
|
+
'440': OH
|
428
|
+
'441': OH
|
429
|
+
'442': OH
|
430
|
+
'443': OH
|
431
|
+
'444': OH
|
432
|
+
'445': OH
|
433
|
+
'446': OH
|
434
|
+
'447': OH
|
435
|
+
'448': OH
|
436
|
+
'449': OH
|
437
|
+
'450': OH
|
438
|
+
'451': OH
|
439
|
+
'452': OH
|
440
|
+
'453': OH
|
441
|
+
'454': OH
|
442
|
+
'455': OH
|
443
|
+
'456': OH
|
444
|
+
'457': OH
|
445
|
+
'458': OH
|
446
|
+
'459': OH
|
447
|
+
'460': IN
|
448
|
+
'461': IN
|
449
|
+
'462': IN
|
450
|
+
'463': IN
|
451
|
+
'464': IN
|
452
|
+
'465': IN
|
453
|
+
'466': IN
|
454
|
+
'467': IN
|
455
|
+
'468': IN
|
456
|
+
'469': IN
|
457
|
+
'470': IN
|
458
|
+
'471': IN
|
459
|
+
'472': IN
|
460
|
+
'473': IN
|
461
|
+
'474': IN
|
462
|
+
'475': IN
|
463
|
+
'476': IN
|
464
|
+
'477': IN
|
465
|
+
'478': IN
|
466
|
+
'479': IN
|
467
|
+
'480': MI
|
468
|
+
'481': MI
|
469
|
+
'482': MI
|
470
|
+
'483': MI
|
471
|
+
'484': MI
|
472
|
+
'485': MI
|
473
|
+
'486': MI
|
474
|
+
'487': MI
|
475
|
+
'488': MI
|
476
|
+
'489': MI
|
477
|
+
'490': MI
|
478
|
+
'491': MI
|
479
|
+
'492': MI
|
480
|
+
'493': MI
|
481
|
+
'494': MI
|
482
|
+
'495': MI
|
483
|
+
'496': MI
|
484
|
+
'497': MI
|
485
|
+
'498': MI
|
486
|
+
'499': MI
|
487
|
+
'500': IA
|
488
|
+
'501': IA
|
489
|
+
'502': IA
|
490
|
+
'503': IA
|
491
|
+
'504': IA
|
492
|
+
'505': IA
|
493
|
+
'506': IA
|
494
|
+
'507': IA
|
495
|
+
'508': IA
|
496
|
+
'509': IA
|
497
|
+
'510': IA
|
498
|
+
'511': IA
|
499
|
+
'512': IA
|
500
|
+
'513': IA
|
501
|
+
'514': IA
|
502
|
+
'515': IA
|
503
|
+
'516': IA
|
504
|
+
'520': IA
|
505
|
+
'521': IA
|
506
|
+
'522': IA
|
507
|
+
'523': IA
|
508
|
+
'524': IA
|
509
|
+
'525': IA
|
510
|
+
'526': IA
|
511
|
+
'527': IA
|
512
|
+
'528': IA
|
513
|
+
'530': WI
|
514
|
+
'531': WI
|
515
|
+
'532': WI
|
516
|
+
'534': WI
|
517
|
+
'535': WI
|
518
|
+
'537': WI
|
519
|
+
'538': WI
|
520
|
+
'539': WI
|
521
|
+
'540': WI
|
522
|
+
'541': WI
|
523
|
+
'542': WI
|
524
|
+
'543': WI
|
525
|
+
'544': WI
|
526
|
+
'545': WI
|
527
|
+
'546': WI
|
528
|
+
'547': WI
|
529
|
+
'548': WI
|
530
|
+
'549': WI
|
531
|
+
'550': MN
|
532
|
+
'551': MN
|
533
|
+
'553': MN
|
534
|
+
'554': MN
|
535
|
+
'555': MN
|
536
|
+
'556': MN
|
537
|
+
'557': MN
|
538
|
+
'558': MN
|
539
|
+
'559': MN
|
540
|
+
'560': MN
|
541
|
+
'561': MN
|
542
|
+
'562': MN
|
543
|
+
'563': MN
|
544
|
+
'564': MN
|
545
|
+
'565': MN
|
546
|
+
'566': MN
|
547
|
+
'567': MN
|
548
|
+
'569': DC
|
549
|
+
'570': SD
|
550
|
+
'571': SD
|
551
|
+
'572': SD
|
552
|
+
'573': SD
|
553
|
+
'574': SD
|
554
|
+
'575': SD
|
555
|
+
'576': SD
|
556
|
+
'577': SD
|
557
|
+
'580': ND
|
558
|
+
'581': ND
|
559
|
+
'582': ND
|
560
|
+
'583': ND
|
561
|
+
'584': ND
|
562
|
+
'585': ND
|
563
|
+
'586': ND
|
564
|
+
'587': ND
|
565
|
+
'588': ND
|
566
|
+
'590': MT
|
567
|
+
'591': MT
|
568
|
+
'592': MT
|
569
|
+
'593': MT
|
570
|
+
'594': MT
|
571
|
+
'595': MT
|
572
|
+
'596': MT
|
573
|
+
'597': MT
|
574
|
+
'598': MT
|
575
|
+
'599': MT
|
576
|
+
'600': IL
|
577
|
+
'601': IL
|
578
|
+
'602': IL
|
579
|
+
'603': IL
|
580
|
+
'604': IL
|
581
|
+
'605': IL
|
582
|
+
'606': IL
|
583
|
+
'607': IL
|
584
|
+
'608': IL
|
585
|
+
'609': IL
|
586
|
+
'610': IL
|
587
|
+
'611': IL
|
588
|
+
'612': IL
|
589
|
+
'613': IL
|
590
|
+
'614': IL
|
591
|
+
'615': IL
|
592
|
+
'616': IL
|
593
|
+
'617': IL
|
594
|
+
'618': IL
|
595
|
+
'619': IL
|
596
|
+
'620': IL
|
597
|
+
'622': IL
|
598
|
+
'623': IL
|
599
|
+
'624': IL
|
600
|
+
'625': IL
|
601
|
+
'626': IL
|
602
|
+
'627': IL
|
603
|
+
'628': IL
|
604
|
+
'629': IL
|
605
|
+
'630': MO
|
606
|
+
'631': MO
|
607
|
+
'633': MO
|
608
|
+
'634': MO
|
609
|
+
'635': MO
|
610
|
+
'636': MO
|
611
|
+
'637': MO
|
612
|
+
'638': MO
|
613
|
+
'639': MO
|
614
|
+
'640': MO
|
615
|
+
'641': MO
|
616
|
+
'644': MO
|
617
|
+
'645': MO
|
618
|
+
'646': MO
|
619
|
+
'647': MO
|
620
|
+
'648': MO
|
621
|
+
'649': MO
|
622
|
+
'650': MO
|
623
|
+
'651': MO
|
624
|
+
'652': MO
|
625
|
+
'653': MO
|
626
|
+
'654': MO
|
627
|
+
'655': MO
|
628
|
+
'656': MO
|
629
|
+
'657': MO
|
630
|
+
'658': MO
|
631
|
+
'660': KS
|
632
|
+
'661': KS
|
633
|
+
'662': KS
|
634
|
+
'664': KS
|
635
|
+
'665': KS
|
636
|
+
'666': KS
|
637
|
+
'667': KS
|
638
|
+
'668': KS
|
639
|
+
'669': KS
|
640
|
+
'670': KS
|
641
|
+
'671': KS
|
642
|
+
'672': KS
|
643
|
+
'673': KS
|
644
|
+
'674': KS
|
645
|
+
'675': KS
|
646
|
+
'676': KS
|
647
|
+
'677': KS
|
648
|
+
'678': KS
|
649
|
+
'679': KS
|
650
|
+
'680': NE
|
651
|
+
'681': NE
|
652
|
+
'683': NE
|
653
|
+
'684': NE
|
654
|
+
'685': NE
|
655
|
+
'686': NE
|
656
|
+
'687': NE
|
657
|
+
'688': NE
|
658
|
+
'689': NE
|
659
|
+
'690': NE
|
660
|
+
'691': NE
|
661
|
+
'692': NE
|
662
|
+
'693': NE
|
663
|
+
'700': LA
|
664
|
+
'701': LA
|
665
|
+
'703': LA
|
666
|
+
'704': LA
|
667
|
+
'705': LA
|
668
|
+
'706': LA
|
669
|
+
'707': LA
|
670
|
+
'708': LA
|
671
|
+
'710': LA
|
672
|
+
'711': LA
|
673
|
+
'712': LA
|
674
|
+
'713': LA
|
675
|
+
'714': LA
|
676
|
+
'716': AR
|
677
|
+
'717': AR
|
678
|
+
'718': AR
|
679
|
+
'719': AR
|
680
|
+
'720': AR
|
681
|
+
'721': AR
|
682
|
+
'722': AR
|
683
|
+
'723': AR
|
684
|
+
'724': AR
|
685
|
+
'725': AR
|
686
|
+
'726': AR
|
687
|
+
'727': AR
|
688
|
+
'728': AR
|
689
|
+
'729': AR
|
690
|
+
'730': OK
|
691
|
+
'731': OK
|
692
|
+
'733': TX
|
693
|
+
'734': OK
|
694
|
+
'735': OK
|
695
|
+
'736': OK
|
696
|
+
'737': OK
|
697
|
+
'738': OK
|
698
|
+
'739': OK
|
699
|
+
'740': OK
|
700
|
+
'741': OK
|
701
|
+
'743': OK
|
702
|
+
'744': OK
|
703
|
+
'745': OK
|
704
|
+
'746': OK
|
705
|
+
'747': OK
|
706
|
+
'748': OK
|
707
|
+
'749': OK
|
708
|
+
'750': TX
|
709
|
+
'751': TX
|
710
|
+
'752': TX
|
711
|
+
'753': TX
|
712
|
+
'754': TX
|
713
|
+
'755': TX
|
714
|
+
'756': TX
|
715
|
+
'757': TX
|
716
|
+
'758': TX
|
717
|
+
'759': TX
|
718
|
+
'760': TX
|
719
|
+
'761': TX
|
720
|
+
'762': TX
|
721
|
+
'763': TX
|
722
|
+
'764': TX
|
723
|
+
'765': TX
|
724
|
+
'766': TX
|
725
|
+
'767': TX
|
726
|
+
'768': TX
|
727
|
+
'769': TX
|
728
|
+
'770': TX
|
729
|
+
'772': TX
|
730
|
+
'773': TX
|
731
|
+
'774': TX
|
732
|
+
'775': TX
|
733
|
+
'776': TX
|
734
|
+
'777': TX
|
735
|
+
'778': TX
|
736
|
+
'779': TX
|
737
|
+
'780': TX
|
738
|
+
'781': TX
|
739
|
+
'782': TX
|
740
|
+
'783': TX
|
741
|
+
'784': TX
|
742
|
+
'785': TX
|
743
|
+
'786': TX
|
744
|
+
'787': TX
|
745
|
+
'788': TX
|
746
|
+
'789': TX
|
747
|
+
'790': TX
|
748
|
+
'791': TX
|
749
|
+
'792': TX
|
750
|
+
'793': TX
|
751
|
+
'794': TX
|
752
|
+
'795': TX
|
753
|
+
'796': TX
|
754
|
+
'797': TX
|
755
|
+
'798': TX
|
756
|
+
'799': TX
|
757
|
+
'800': CO
|
758
|
+
'801': CO
|
759
|
+
'802': CO
|
760
|
+
'803': CO
|
761
|
+
'804': CO
|
762
|
+
'805': CO
|
763
|
+
'806': CO
|
764
|
+
'807': CO
|
765
|
+
'808': CO
|
766
|
+
'809': CO
|
767
|
+
'810': CO
|
768
|
+
'811': CO
|
769
|
+
'812': CO
|
770
|
+
'813': CO
|
771
|
+
'814': CO
|
772
|
+
'815': CO
|
773
|
+
'816': CO
|
774
|
+
'820': WY
|
775
|
+
'821': WY
|
776
|
+
'822': WY
|
777
|
+
'823': WY
|
778
|
+
'824': WY
|
779
|
+
'825': WY
|
780
|
+
'826': WY
|
781
|
+
'827': WY
|
782
|
+
'828': WY
|
783
|
+
'829': WY
|
784
|
+
'830': WY
|
785
|
+
'831': WY
|
786
|
+
'832': ID
|
787
|
+
'833': ID
|
788
|
+
'834': ID
|
789
|
+
'835': ID
|
790
|
+
'836': ID
|
791
|
+
'837': ID
|
792
|
+
'838': ID
|
793
|
+
'840': UT
|
794
|
+
'841': UT
|
795
|
+
'842': UT
|
796
|
+
'843': UT
|
797
|
+
'844': UT
|
798
|
+
'845': UT
|
799
|
+
'846': UT
|
800
|
+
'847': UT
|
801
|
+
'850': AZ
|
802
|
+
'851': AZ
|
803
|
+
'852': AZ
|
804
|
+
'853': AZ
|
805
|
+
'855': AZ
|
806
|
+
'856': AZ
|
807
|
+
'857': AZ
|
808
|
+
'859': AZ
|
809
|
+
'860': AZ
|
810
|
+
'863': AZ
|
811
|
+
'864': AZ
|
812
|
+
'865': AZ
|
813
|
+
'870': NM
|
814
|
+
'871': NM
|
815
|
+
'872': NM
|
816
|
+
'873': NM
|
817
|
+
'874': NM
|
818
|
+
'875': NM
|
819
|
+
'877': NM
|
820
|
+
'878': NM
|
821
|
+
'879': NM
|
822
|
+
'880': NM
|
823
|
+
'881': NM
|
824
|
+
'882': NM
|
825
|
+
'883': NM
|
826
|
+
'884': NM
|
827
|
+
'885': TX
|
828
|
+
'889': NV
|
829
|
+
'890': NV
|
830
|
+
'891': NV
|
831
|
+
'893': NV
|
832
|
+
'894': NV
|
833
|
+
'895': NV
|
834
|
+
'897': NV
|
835
|
+
'898': NV
|
836
|
+
'900': CA
|
837
|
+
'901': CA
|
838
|
+
'902': CA
|
839
|
+
'903': CA
|
840
|
+
'904': CA
|
841
|
+
'905': CA
|
842
|
+
'906': CA
|
843
|
+
'907': CA
|
844
|
+
'908': CA
|
845
|
+
'910': CA
|
846
|
+
'911': CA
|
847
|
+
'912': CA
|
848
|
+
'913': CA
|
849
|
+
'914': CA
|
850
|
+
'915': CA
|
851
|
+
'916': CA
|
852
|
+
'917': CA
|
853
|
+
'918': CA
|
854
|
+
'919': CA
|
855
|
+
'920': CA
|
856
|
+
'921': CA
|
857
|
+
'922': CA
|
858
|
+
'923': CA
|
859
|
+
'924': CA
|
860
|
+
'925': CA
|
861
|
+
'926': CA
|
862
|
+
'927': CA
|
863
|
+
'928': CA
|
864
|
+
'930': CA
|
865
|
+
'931': CA
|
866
|
+
'932': CA
|
867
|
+
'933': CA
|
868
|
+
'934': CA
|
869
|
+
'935': CA
|
870
|
+
'936': CA
|
871
|
+
'937': CA
|
872
|
+
'938': CA
|
873
|
+
'939': CA
|
874
|
+
'940': CA
|
875
|
+
'941': CA
|
876
|
+
'942': CA
|
877
|
+
'943': CA
|
878
|
+
'944': CA
|
879
|
+
'945': CA
|
880
|
+
'946': CA
|
881
|
+
'947': CA
|
882
|
+
'948': CA
|
883
|
+
'949': CA
|
884
|
+
'950': CA
|
885
|
+
'951': CA
|
886
|
+
'952': CA
|
887
|
+
'953': CA
|
888
|
+
'954': CA
|
889
|
+
'955': CA
|
890
|
+
'956': CA
|
891
|
+
'957': CA
|
892
|
+
'958': CA
|
893
|
+
'959': CA
|
894
|
+
'960': CA
|
895
|
+
'961': CA
|
896
|
+
'962': AP
|
897
|
+
'963': AP
|
898
|
+
'964': AP
|
899
|
+
'965': AP
|
900
|
+
'966': AP
|
901
|
+
'967': HI
|
902
|
+
'968': HI
|
903
|
+
'969': GU
|
904
|
+
'970': OR
|
905
|
+
'971': OR
|
906
|
+
'972': OR
|
907
|
+
'973': OR
|
908
|
+
'974': OR
|
909
|
+
'975': OR
|
910
|
+
'976': OR
|
911
|
+
'977': OR
|
912
|
+
'978': OR
|
913
|
+
'979': OR
|
914
|
+
'980': WA
|
915
|
+
'981': WA
|
916
|
+
'982': WA
|
917
|
+
'983': WA
|
918
|
+
'984': WA
|
919
|
+
'985': WA
|
920
|
+
'986': WA
|
921
|
+
'988': WA
|
922
|
+
'989': WA
|
923
|
+
'990': WA
|
924
|
+
'991': WA
|
925
|
+
'992': WA
|
926
|
+
'993': WA
|
927
|
+
'994': WA
|
928
|
+
'995': AK
|
929
|
+
'996': AK
|
930
|
+
'997': AK
|
931
|
+
'998': AK
|
932
|
+
'999': AK
|
933
|
+
'96941': FM
|
934
|
+
'96942': FM
|
935
|
+
'96943': FM
|
936
|
+
'96944': FM
|
937
|
+
'41901': KY
|
938
|
+
'41902': KY
|
939
|
+
'41903': KY
|
940
|
+
'41904': KY
|
941
|
+
'41905': KY
|
942
|
+
'41906': KY
|
943
|
+
'96960': MH
|
944
|
+
'96970': MH
|
945
|
+
'96951': MP
|
946
|
+
'96950': MP
|
947
|
+
'96952': MP
|
948
|
+
'00210': NH
|
949
|
+
'00211': NH
|
950
|
+
'00212': NH
|
951
|
+
'00213': NH
|
952
|
+
'00214': NH
|
953
|
+
'00215': NH
|
954
|
+
'87654': NM
|
955
|
+
'06390': NY
|
956
|
+
'00401': NY
|
957
|
+
'96940': PW
|
958
|
+
'83414': WY
|
data/lib/state_by_zip.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
|
3
|
+
class StateByZip
|
4
|
+
DATA_PATH = File.join(__dir__, '..', 'data', 'state_by_zip.yml')
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def find(zip)
|
8
|
+
zip_string = "%05d" % zip.to_i
|
9
|
+
data[zip_string] || data[zip_string[0..2]]
|
10
|
+
end
|
11
|
+
|
12
|
+
def data
|
13
|
+
@data ||= YAML.safe_load_file(DATA_PATH)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
describe 'StateByZip' do
|
2
|
+
describe 'find' do
|
3
|
+
it 'correctly finds the state using a 3-digit match' do
|
4
|
+
expect(StateByZip.find('99123')).to eq('WA')
|
5
|
+
end
|
6
|
+
|
7
|
+
it 'correctly finds the state using a 5-digit match' do
|
8
|
+
expect(StateByZip.find('06390')).to eq('NY')
|
9
|
+
end
|
10
|
+
|
11
|
+
it 'correctly finds the state for an integer' do
|
12
|
+
expect(StateByZip.find(99123)).to eq('WA')
|
13
|
+
end
|
14
|
+
|
15
|
+
it 'correctly finds the state for a short integer by supplying the leading zeroes' do
|
16
|
+
expect(StateByZip.find(401)).to eq('NY')
|
17
|
+
end
|
18
|
+
|
19
|
+
it 'returns nil if no match is found' do
|
20
|
+
expect(StateByZip.find('00100')).to be_nil
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
s.name = "state_by_zip"
|
3
|
+
s.version = "0.0.1"
|
4
|
+
s.summary = "Find US state by ZIP code"
|
5
|
+
s.authors = ["Mariusz Pruszyński"]
|
6
|
+
s.email = "mpruszynski@gmail.com"
|
7
|
+
s.files = %w[
|
8
|
+
Gemfile
|
9
|
+
Gemfile.lock
|
10
|
+
README.md
|
11
|
+
data/state_by_zip.yml
|
12
|
+
lib/state_by_zip.rb
|
13
|
+
spec/spec_helper.rb
|
14
|
+
spec/state_by_zip_spec.rb
|
15
|
+
state_by_zip.gemspec
|
16
|
+
]
|
17
|
+
s.homepage = "https://github.com/snicky/state_by_zip"
|
18
|
+
s.license = "MIT"
|
19
|
+
s.add_development_dependency 'rspec', '> 3'
|
20
|
+
end
|
metadata
ADDED
@@ -0,0 +1,64 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: state_by_zip
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mariusz Pruszyński
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2023-12-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3'
|
27
|
+
description:
|
28
|
+
email: mpruszynski@gmail.com
|
29
|
+
executables: []
|
30
|
+
extensions: []
|
31
|
+
extra_rdoc_files: []
|
32
|
+
files:
|
33
|
+
- Gemfile
|
34
|
+
- Gemfile.lock
|
35
|
+
- README.md
|
36
|
+
- data/state_by_zip.yml
|
37
|
+
- lib/state_by_zip.rb
|
38
|
+
- spec/spec_helper.rb
|
39
|
+
- spec/state_by_zip_spec.rb
|
40
|
+
- state_by_zip.gemspec
|
41
|
+
homepage: https://github.com/snicky/state_by_zip
|
42
|
+
licenses:
|
43
|
+
- MIT
|
44
|
+
metadata: {}
|
45
|
+
post_install_message:
|
46
|
+
rdoc_options: []
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
55
|
+
requirements:
|
56
|
+
- - ">="
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
requirements: []
|
60
|
+
rubygems_version: 3.3.26
|
61
|
+
signing_key:
|
62
|
+
specification_version: 4
|
63
|
+
summary: Find US state by ZIP code
|
64
|
+
test_files: []
|