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 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
@@ -0,0 +1,2 @@
1
+ source "https://rubygems.org"
2
+ gemspec
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
@@ -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
@@ -0,0 +1,5 @@
1
+ require 'bundler/setup'
2
+ Bundler.setup
3
+
4
+ require 'state_by_zip'
5
+
@@ -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: []