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.
- checksums.yaml +4 -4
- data/.rubocop.yml +1 -1
- data/Gemfile +1 -7
- data/Gemfile.lock +66 -29
- data/README.md +82 -138
- data/db/schema.sql +45 -0
- data/lib/data/fips.sqlite3 +0 -0
- data/lib/fips/county.rb +98 -0
- data/lib/fips/database.rb +55 -0
- data/lib/fips/state.rb +67 -0
- data/lib/fips/subdivision.rb +160 -0
- data/lib/fips/version.rb +5 -0
- data/lib/fips.rb +69 -0
- data/sig/fips.rbs +50 -0
- metadata +128 -71
- data/lib/data/county/AK.csv +0 -29
- data/lib/data/county/AL.csv +0 -67
- data/lib/data/county/AR.csv +0 -75
- data/lib/data/county/AS.csv +0 -5
- data/lib/data/county/AZ.csv +0 -15
- data/lib/data/county/CA.csv +0 -58
- data/lib/data/county/CO.csv +0 -64
- data/lib/data/county/CT.csv +0 -8
- data/lib/data/county/DC.csv +0 -1
- data/lib/data/county/DE.csv +0 -3
- data/lib/data/county/FL.csv +0 -67
- data/lib/data/county/GA.csv +0 -159
- data/lib/data/county/GU.csv +0 -1
- data/lib/data/county/HI.csv +0 -5
- data/lib/data/county/IA.csv +0 -99
- data/lib/data/county/ID.csv +0 -44
- data/lib/data/county/IL.csv +0 -102
- data/lib/data/county/IN.csv +0 -92
- data/lib/data/county/KS.csv +0 -105
- data/lib/data/county/KY.csv +0 -120
- data/lib/data/county/LA.csv +0 -64
- data/lib/data/county/MA.csv +0 -14
- data/lib/data/county/MD.csv +0 -24
- data/lib/data/county/ME.csv +0 -16
- data/lib/data/county/MI.csv +0 -83
- data/lib/data/county/MN.csv +0 -87
- data/lib/data/county/MO.csv +0 -115
- data/lib/data/county/MP.csv +0 -4
- data/lib/data/county/MS.csv +0 -82
- data/lib/data/county/MT.csv +0 -56
- data/lib/data/county/NC.csv +0 -100
- data/lib/data/county/ND.csv +0 -53
- data/lib/data/county/NE.csv +0 -93
- data/lib/data/county/NH.csv +0 -10
- data/lib/data/county/NJ.csv +0 -21
- data/lib/data/county/NM.csv +0 -33
- data/lib/data/county/NV.csv +0 -17
- data/lib/data/county/NY.csv +0 -62
- data/lib/data/county/OH.csv +0 -88
- data/lib/data/county/OK.csv +0 -77
- data/lib/data/county/OR.csv +0 -36
- data/lib/data/county/PA.csv +0 -67
- data/lib/data/county/PR.csv +0 -78
- data/lib/data/county/RI.csv +0 -5
- data/lib/data/county/SC.csv +0 -46
- data/lib/data/county/SD.csv +0 -66
- data/lib/data/county/TN.csv +0 -95
- data/lib/data/county/TX.csv +0 -254
- data/lib/data/county/UM.csv +0 -1
- data/lib/data/county/UT.csv +0 -29
- data/lib/data/county/VA.csv +0 -134
- data/lib/data/county/VI.csv +0 -3
- data/lib/data/county/VT.csv +0 -14
- data/lib/data/county/WA.csv +0 -39
- data/lib/data/county/WI.csv +0 -72
- data/lib/data/county/WV.csv +0 -55
- data/lib/data/county/WY.csv +0 -23
- data/lib/data/state.csv +0 -57
- data/lib/fips_lookup/version.rb +0 -5
- data/lib/fips_lookup.rb +0 -91
- 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