fips_lookup 0.2.1 → 1.0.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.
Files changed (76) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/Gemfile +1 -7
  4. data/Gemfile.lock +66 -29
  5. data/README.md +82 -138
  6. data/db/schema.sql +45 -0
  7. data/lib/data/fips.sqlite3 +0 -0
  8. data/lib/fips/county.rb +98 -0
  9. data/lib/fips/database.rb +55 -0
  10. data/lib/fips/state.rb +67 -0
  11. data/lib/fips/subdivision.rb +160 -0
  12. data/lib/fips/version.rb +5 -0
  13. data/lib/fips.rb +69 -0
  14. data/sig/fips.rbs +50 -0
  15. metadata +128 -71
  16. data/lib/data/county/AK.csv +0 -29
  17. data/lib/data/county/AL.csv +0 -67
  18. data/lib/data/county/AR.csv +0 -75
  19. data/lib/data/county/AS.csv +0 -5
  20. data/lib/data/county/AZ.csv +0 -15
  21. data/lib/data/county/CA.csv +0 -58
  22. data/lib/data/county/CO.csv +0 -64
  23. data/lib/data/county/CT.csv +0 -8
  24. data/lib/data/county/DC.csv +0 -1
  25. data/lib/data/county/DE.csv +0 -3
  26. data/lib/data/county/FL.csv +0 -67
  27. data/lib/data/county/GA.csv +0 -159
  28. data/lib/data/county/GU.csv +0 -1
  29. data/lib/data/county/HI.csv +0 -5
  30. data/lib/data/county/IA.csv +0 -99
  31. data/lib/data/county/ID.csv +0 -44
  32. data/lib/data/county/IL.csv +0 -102
  33. data/lib/data/county/IN.csv +0 -92
  34. data/lib/data/county/KS.csv +0 -105
  35. data/lib/data/county/KY.csv +0 -120
  36. data/lib/data/county/LA.csv +0 -64
  37. data/lib/data/county/MA.csv +0 -14
  38. data/lib/data/county/MD.csv +0 -24
  39. data/lib/data/county/ME.csv +0 -16
  40. data/lib/data/county/MI.csv +0 -83
  41. data/lib/data/county/MN.csv +0 -87
  42. data/lib/data/county/MO.csv +0 -115
  43. data/lib/data/county/MP.csv +0 -4
  44. data/lib/data/county/MS.csv +0 -82
  45. data/lib/data/county/MT.csv +0 -56
  46. data/lib/data/county/NC.csv +0 -100
  47. data/lib/data/county/ND.csv +0 -53
  48. data/lib/data/county/NE.csv +0 -93
  49. data/lib/data/county/NH.csv +0 -10
  50. data/lib/data/county/NJ.csv +0 -21
  51. data/lib/data/county/NM.csv +0 -33
  52. data/lib/data/county/NV.csv +0 -17
  53. data/lib/data/county/NY.csv +0 -62
  54. data/lib/data/county/OH.csv +0 -88
  55. data/lib/data/county/OK.csv +0 -77
  56. data/lib/data/county/OR.csv +0 -36
  57. data/lib/data/county/PA.csv +0 -67
  58. data/lib/data/county/PR.csv +0 -78
  59. data/lib/data/county/RI.csv +0 -5
  60. data/lib/data/county/SC.csv +0 -46
  61. data/lib/data/county/SD.csv +0 -66
  62. data/lib/data/county/TN.csv +0 -95
  63. data/lib/data/county/TX.csv +0 -254
  64. data/lib/data/county/UM.csv +0 -1
  65. data/lib/data/county/UT.csv +0 -29
  66. data/lib/data/county/VA.csv +0 -134
  67. data/lib/data/county/VI.csv +0 -3
  68. data/lib/data/county/VT.csv +0 -14
  69. data/lib/data/county/WA.csv +0 -39
  70. data/lib/data/county/WI.csv +0 -72
  71. data/lib/data/county/WV.csv +0 -55
  72. data/lib/data/county/WY.csv +0 -23
  73. data/lib/data/state.csv +0 -57
  74. data/lib/fips_lookup/version.rb +0 -5
  75. data/lib/fips_lookup.rb +0 -91
  76. data/sig/fips_lookup.rbs +0 -4
data/lib/fips_lookup.rb DELETED
@@ -1,91 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "fips_lookup/version"
4
- require "csv"
5
-
6
- # worker for county, state, fips lookups
7
- module FipsLookup
8
- STATE_CODES = { "AL" => "01", "AK" => "02", "AZ" => "04", "AR" => "05", "CA" => "06", "CO" => "08",
9
- "CT" => "09", "DE" => "10", "DC" => "11", "FL" => "12", "GA" => "13", "HI" => "15",
10
- "ID" => "16", "IL" => "17", "IN" => "18", "IA" => "19", "KS" => "20", "KY" => "21",
11
- "LA" => "22", "ME" => "23", "MD" => "24", "MA" => "25", "MI" => "26", "MN" => "27",
12
- "MS" => "28", "MO" => "29", "MT" => "30", "NE" => "31", "NV" => "32", "NH" => "33",
13
- "NJ" => "34", "NM" => "35", "NY" => "36", "NC" => "37", "ND" => "38", "OH" => "39",
14
- "OK" => "40", "OR" => "41", "PA" => "42", "RI" => "44", "SC" => "45", "SD" => "46",
15
- "TN" => "47", "TX" => "48", "UT" => "49", "VT" => "50", "VA" => "51", "WA" => "53",
16
- "WV" => "54", "WI" => "55", "WY" => "56", "AS" => "60", "GU" => "66", "MP" => "69",
17
- "PR" => "72", "UM" => "74", "VI" => "78"
18
- }.freeze
19
-
20
- class << self
21
- attr_accessor :county_fips, :state_fips
22
-
23
- def county(state_param:, county_name:, return_nil: false)
24
- state_code = find_state_code(state_param: state_param, return_nil: return_nil)
25
- return {} if state_code.nil?
26
-
27
- lookup = [state_code, county_name.upcase]
28
- @county_fips ||= {}
29
- @county_fips[lookup] ||= county_lookup(state_code, county_name, return_nil)
30
- end
31
-
32
- def state(state_param:, return_nil: false)
33
- @state_fips ||= {}
34
- @state_fips[state_param] ||= state_lookup(state_param, return_nil)
35
- end
36
-
37
- def fips_county(fips:, return_nil: false)
38
- unless fips.is_a?(String) && fips.length == 5
39
- return_nil ? (return nil) : (raise StandardError, "FIPS input must be 5 digit string")
40
- end
41
-
42
- state_code = find_state_code(state_param: fips[0..1], return_nil: return_nil)
43
- return nil if state_code.nil?
44
-
45
- CSV.foreach(county_file(state_code: state_code)) do |county_row|
46
- return [county_row[3], state_code] if county_row[2] == fips[2..4]
47
- end
48
-
49
- raise StandardError, "Could not find county with fips: #{fips[2..4]}, in: #{state_code}" unless return_nil
50
- end
51
-
52
- def find_state_code(state_param:, return_nil: false)
53
- return state_param.upcase if STATE_CODES.key?(state_param.upcase)
54
- return STATE_CODES.key(state_param) if STATE_CODES.value?(state_param)
55
-
56
- state(state_param: state_param, return_nil: return_nil)[:code]
57
- end
58
-
59
- def county_file(state_code:)
60
- file_path = "#{File.expand_path(__dir__)}/data/county/#{state_code}.csv"
61
- file_path if File.exist?(file_path)
62
- end
63
-
64
- def state_file
65
- "#{File.expand_path(__dir__)}/data/state.csv"
66
- end
67
-
68
- private
69
-
70
- def county_lookup(state_code, county_name_param, return_nil)
71
- CSV.foreach(county_file(state_code: state_code)) do |county_row|
72
- # county_row => state_code (AL), state fips (01), county fips (001), name (Augtauga County), class code (H1)
73
- if county_row[3].upcase == county_name_param.upcase
74
- return {state_code: county_row[0], fips: (county_row[1] + county_row[2]), name: county_row[3], class_code: county_row[4] }
75
- end
76
- end
77
- return_nil ? (return {}) : (raise StandardError, "No county found matching: #{county_name_param}" unless return_nil)
78
- end
79
-
80
- def state_lookup(state_param, return_nil = false)
81
- CSV.foreach(state_file) do |state_row|
82
- # state_row => state fips (01), state code (AL), state name (Alabama), ansi (01779775)
83
- if state_row[0] == state_param || state_row[1] == state_param.upcase ||
84
- state_row[2].upcase == state_param.upcase || state_row[3] == state_param
85
- return { fips: state_row[0], code: state_row[1], name: state_row[2], ansi: state_row[3] }
86
- end
87
- end
88
- return_nil ? (return {}) : (raise StandardError, "No state found matching: #{state_param}")
89
- end
90
- end
91
- end
data/sig/fips_lookup.rbs DELETED
@@ -1,4 +0,0 @@
1
- module FipsLookup
2
- VERSION: String
3
- # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
- end