fips_lookup 0.3.0 → 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 (135) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +1 -1
  3. data/Gemfile.lock +39 -30
  4. data/README.md +82 -138
  5. data/db/schema.sql +45 -0
  6. data/lib/data/fips.sqlite3 +0 -0
  7. data/lib/fips/county.rb +98 -0
  8. data/lib/fips/database.rb +55 -0
  9. data/lib/fips/state.rb +67 -0
  10. data/lib/fips/subdivision.rb +160 -0
  11. data/lib/fips/version.rb +5 -0
  12. data/lib/fips.rb +69 -0
  13. data/sig/fips.rbs +50 -0
  14. metadata +56 -125
  15. data/lib/data/county/AK.csv +0 -30
  16. data/lib/data/county/AL.csv +0 -67
  17. data/lib/data/county/AR.csv +0 -75
  18. data/lib/data/county/AS.csv +0 -5
  19. data/lib/data/county/AZ.csv +0 -15
  20. data/lib/data/county/CA.csv +0 -58
  21. data/lib/data/county/CO.csv +0 -64
  22. data/lib/data/county/CT.csv +0 -8
  23. data/lib/data/county/DC.csv +0 -1
  24. data/lib/data/county/DE.csv +0 -3
  25. data/lib/data/county/FL.csv +0 -67
  26. data/lib/data/county/GA.csv +0 -159
  27. data/lib/data/county/GU.csv +0 -1
  28. data/lib/data/county/HI.csv +0 -5
  29. data/lib/data/county/IA.csv +0 -99
  30. data/lib/data/county/ID.csv +0 -44
  31. data/lib/data/county/IL.csv +0 -102
  32. data/lib/data/county/IN.csv +0 -92
  33. data/lib/data/county/KS.csv +0 -105
  34. data/lib/data/county/KY.csv +0 -120
  35. data/lib/data/county/LA.csv +0 -64
  36. data/lib/data/county/MA.csv +0 -14
  37. data/lib/data/county/MD.csv +0 -24
  38. data/lib/data/county/ME.csv +0 -16
  39. data/lib/data/county/MI.csv +0 -83
  40. data/lib/data/county/MN.csv +0 -87
  41. data/lib/data/county/MO.csv +0 -115
  42. data/lib/data/county/MP.csv +0 -4
  43. data/lib/data/county/MS.csv +0 -82
  44. data/lib/data/county/MT.csv +0 -56
  45. data/lib/data/county/NC.csv +0 -100
  46. data/lib/data/county/ND.csv +0 -53
  47. data/lib/data/county/NE.csv +0 -93
  48. data/lib/data/county/NH.csv +0 -10
  49. data/lib/data/county/NJ.csv +0 -21
  50. data/lib/data/county/NM.csv +0 -33
  51. data/lib/data/county/NV.csv +0 -17
  52. data/lib/data/county/NY.csv +0 -62
  53. data/lib/data/county/OH.csv +0 -88
  54. data/lib/data/county/OK.csv +0 -77
  55. data/lib/data/county/OR.csv +0 -36
  56. data/lib/data/county/PA.csv +0 -67
  57. data/lib/data/county/PR.csv +0 -78
  58. data/lib/data/county/RI.csv +0 -5
  59. data/lib/data/county/SC.csv +0 -46
  60. data/lib/data/county/SD.csv +0 -66
  61. data/lib/data/county/TN.csv +0 -95
  62. data/lib/data/county/TX.csv +0 -254
  63. data/lib/data/county/UM.csv +0 -1
  64. data/lib/data/county/UT.csv +0 -29
  65. data/lib/data/county/VA.csv +0 -133
  66. data/lib/data/county/VI.csv +0 -3
  67. data/lib/data/county/VT.csv +0 -14
  68. data/lib/data/county/WA.csv +0 -39
  69. data/lib/data/county/WI.csv +0 -72
  70. data/lib/data/county/WV.csv +0 -55
  71. data/lib/data/county/WY.csv +0 -23
  72. data/lib/data/state.csv +0 -57
  73. data/lib/data/subdivision/AK.csv +0 -37
  74. data/lib/data/subdivision/AL.csv +0 -390
  75. data/lib/data/subdivision/AR.csv +0 -1210
  76. data/lib/data/subdivision/AS.csv +0 -16
  77. data/lib/data/subdivision/AZ.csv +0 -80
  78. data/lib/data/subdivision/CA.csv +0 -404
  79. data/lib/data/subdivision/CO.csv +0 -209
  80. data/lib/data/subdivision/CT.csv +0 -173
  81. data/lib/data/subdivision/DC.csv +0 -1
  82. data/lib/data/subdivision/DE.csv +0 -27
  83. data/lib/data/subdivision/FL.csv +0 -316
  84. data/lib/data/subdivision/GA.csv +0 -586
  85. data/lib/data/subdivision/GU.csv +0 -20
  86. data/lib/data/subdivision/HI.csv +0 -44
  87. data/lib/data/subdivision/IA.csv +0 -1662
  88. data/lib/data/subdivision/ID.csv +0 -170
  89. data/lib/data/subdivision/IL.csv +0 -1708
  90. data/lib/data/subdivision/IN.csv +0 -1012
  91. data/lib/data/subdivision/KS.csv +0 -1531
  92. data/lib/data/subdivision/KY.csv +0 -493
  93. data/lib/data/subdivision/LA.csv +0 -576
  94. data/lib/data/subdivision/MA.csv +0 -357
  95. data/lib/data/subdivision/MD.csv +0 -290
  96. data/lib/data/subdivision/ME.csv +0 -530
  97. data/lib/data/subdivision/MI.csv +0 -1579
  98. data/lib/data/subdivision/MN.csv +0 -2761
  99. data/lib/data/subdivision/MO.csv +0 -1394
  100. data/lib/data/subdivision/MP.csv +0 -12
  101. data/lib/data/subdivision/MS.csv +0 -410
  102. data/lib/data/subdivision/MT.csv +0 -194
  103. data/lib/data/subdivision/NC.csv +0 -1041
  104. data/lib/data/subdivision/ND.csv +0 -1762
  105. data/lib/data/subdivision/NE.csv +0 -1193
  106. data/lib/data/subdivision/NH.csv +0 -260
  107. data/lib/data/subdivision/NJ.csv +0 -570
  108. data/lib/data/subdivision/NM.csv +0 -130
  109. data/lib/data/subdivision/NV.csv +0 -71
  110. data/lib/data/subdivision/NY.csv +0 -1023
  111. data/lib/data/subdivision/OH.csv +0 -1606
  112. data/lib/data/subdivision/OK.csv +0 -305
  113. data/lib/data/subdivision/OR.csv +0 -212
  114. data/lib/data/subdivision/PA.csv +0 -2573
  115. data/lib/data/subdivision/PR.csv +0 -939
  116. data/lib/data/subdivision/RI.csv +0 -40
  117. data/lib/data/subdivision/SC.csv +0 -299
  118. data/lib/data/subdivision/SD.csv +0 -1331
  119. data/lib/data/subdivision/TN.csv +0 -844
  120. data/lib/data/subdivision/TX.csv +0 -862
  121. data/lib/data/subdivision/UM.csv +0 -1
  122. data/lib/data/subdivision/UT.csv +0 -93
  123. data/lib/data/subdivision/VA.csv +0 -552
  124. data/lib/data/subdivision/VI.csv +0 -23
  125. data/lib/data/subdivision/VT.csv +0 -255
  126. data/lib/data/subdivision/WA.csv +0 -242
  127. data/lib/data/subdivision/WI.csv +0 -1922
  128. data/lib/data/subdivision/WV.csv +0 -228
  129. data/lib/data/subdivision/WY.csv +0 -71
  130. data/lib/fips_lookup/county.rb +0 -65
  131. data/lib/fips_lookup/state.rb +0 -46
  132. data/lib/fips_lookup/subdivision.rb +0 -48
  133. data/lib/fips_lookup/version.rb +0 -5
  134. data/lib/fips_lookup.rb +0 -25
  135. data/sig/fips_lookup.rbs +0 -4
data/lib/fips/state.rb ADDED
@@ -0,0 +1,67 @@
1
+ # frozen_string_literal: true
2
+
3
+ # FIPS::State
4
+ module FIPS
5
+ class State
6
+ extend FIPS::Database::Access
7
+
8
+ class << self
9
+ def lookup(**params)
10
+ fips = params.fetch(:fips, nil)
11
+ state = params.fetch(:state, nil)
12
+
13
+ unless fips.nil?
14
+ raise ArgumentError, "FIPS input must be a 2 digit string" unless fips.is_a?(String) && fips.match?(/\A\d{2}\z/)
15
+
16
+ return by_fips(fips)
17
+ end
18
+
19
+ unless state.nil?
20
+ raise ArgumentError, "State input must be a non-empty string" unless state.is_a?(String) && !state.strip.empty?
21
+
22
+ return by_name(state)
23
+ end
24
+
25
+ raise ArgumentError, "Could not identify state with parameters provided: #{params.inspect}"
26
+ end
27
+
28
+ def all
29
+ db_all(
30
+ "SELECT state_fips AS fips, state_abbr AS abbr, name, ansi FROM states ORDER BY state_fips"
31
+ ).map { |state_row| formatted_state(state_row) }
32
+ end
33
+
34
+ private
35
+
36
+ def by_fips(fips)
37
+ state = db_first(
38
+ "SELECT state_fips AS fips, state_abbr AS abbr, name, ansi FROM states WHERE state_fips = ?",
39
+ [fips]
40
+ )
41
+ return formatted_state(state) unless state.nil?
42
+
43
+ raise FIPS::NotFoundError, "No state found with fips #{fips}"
44
+ end
45
+
46
+ def by_name(state)
47
+ state_upcase = state.upcase
48
+ state_row = db_first(
49
+ "SELECT state_fips AS fips, state_abbr AS abbr, name, ansi FROM states WHERE state_abbr = ? OR name_key = ? OR ansi = ? OR state_fips = ? LIMIT 1",
50
+ [state_upcase, state_upcase, state, state]
51
+ )
52
+ return formatted_state(state_row) unless state_row.nil?
53
+
54
+ raise FIPS::NotFoundError, "No state found matching: #{state}"
55
+ end
56
+
57
+ def formatted_state(row)
58
+ {
59
+ fips: row["fips"],
60
+ abbr: row["abbr"],
61
+ name: row["name"],
62
+ ansi: row["ansi"]
63
+ }
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,160 @@
1
+ # frozen_string_literal: true
2
+
3
+ # FIPS::Subdivision
4
+ module FIPS
5
+ class Subdivision
6
+ extend FIPS::Database::Access
7
+
8
+ class << self
9
+ def lookup(**params)
10
+ fips = params.fetch(:fips, nil)
11
+ state = params.fetch(:state, nil)
12
+ county = params.fetch(:county, nil)
13
+ subdivision = params.fetch(:subdivision, nil)
14
+
15
+ unless fips.nil? || (fips.is_a?(String) && fips.match?(/\A(?:\d{2}|\d{3}|\d{5}|\d{10})\z/))
16
+ raise ArgumentError, "FIPS input must be a 2, 3, 5, or 10 digit string"
17
+ end
18
+ raise ArgumentError, "State input must be a non-empty string" unless state.nil? || (state.is_a?(String) && !state.strip.empty?)
19
+ raise ArgumentError, "County input must be a non-empty string" unless county.nil? || (county.is_a?(String) && !county.strip.empty?)
20
+ unless subdivision.nil? || (subdivision.is_a?(String) && !subdivision.strip.empty?)
21
+ raise ArgumentError, "Subdivision input must be a non-empty string"
22
+ end
23
+
24
+ location = identify_with_fips(fips, state, county, subdivision)
25
+ return location unless location.nil?
26
+
27
+ if %i[state county subdivision].all? { |key| !params[key].nil? }
28
+ state_fips = FIPS::State.lookup(state: state)[:fips]
29
+ return by_name(state_fips, county, subdivision) unless state_fips.nil?
30
+ end
31
+
32
+ raise ArgumentError, "cannot determine subdivision: no valid parameters provided"
33
+ end
34
+
35
+ def all(state:, county: nil)
36
+ raise ArgumentError, "State input must be a non-empty string" unless state.is_a?(String) && !state.strip.empty?
37
+ raise ArgumentError, "County input must be a non-empty string" unless county.nil? || (county.is_a?(String) && !county.strip.empty?)
38
+
39
+ state_fips = FIPS::State.lookup(state: state)[:fips]
40
+ where_clause = "subdivisions.state_fips = ?"
41
+ bind_vars = [state_fips]
42
+ unless county.nil?
43
+ where_clause += " AND counties.name_key = ?"
44
+ bind_vars << county.upcase
45
+ end
46
+ select_subdivisions(where_clause, bind_vars)
47
+ end
48
+
49
+ private
50
+
51
+ def identify_with_fips(fips, state, county, subdivision)
52
+ return nil if fips.nil?
53
+
54
+ case fips.length
55
+ when 2
56
+ return nil if county.nil? || subdivision.nil?
57
+
58
+ by_name(fips, county, subdivision)
59
+ when 3
60
+ return nil if state.nil? || subdivision.nil?
61
+
62
+ state_fips = FIPS::State.lookup(state: state)[:fips]
63
+ by_fips_and_sub_name(state_fips + fips, subdivision)
64
+ when 5
65
+ return by_fips_and_sub_name(fips, subdivision) unless subdivision.nil?
66
+ return nil if state.nil?
67
+
68
+ by_state_and_sub_fips(state, fips)
69
+ when 10
70
+ by_fips(fips)
71
+ end
72
+ end
73
+
74
+ def by_state_and_sub_fips(state, fips)
75
+ state_fips = FIPS::State.lookup(state: state)[:fips]
76
+ subdivision_row = select_subdivision(
77
+ "subdivisions.state_fips = ? AND subdivisions.subdivision_fips = ?",
78
+ [state_fips, fips]
79
+ )
80
+ return subdivision_row unless subdivision_row.nil?
81
+
82
+ raise FIPS::NotFoundError, "No subdivision found matching fips: #{fips}"
83
+ end
84
+
85
+ def by_fips_and_sub_name(fips, subdivision)
86
+ subdivision_row = by_county_fips_and_sub_name(fips[0, 2], fips[2, 3], subdivision)
87
+ return subdivision_row unless subdivision_row.nil?
88
+
89
+ raise FIPS::NotFoundError, "No subdivision found matching fips: #{fips} and name: #{subdivision}"
90
+ end
91
+
92
+ def by_fips(fips)
93
+ subdivision_row = select_subdivision("subdivisions.full_fips = ?", [fips])
94
+ return subdivision_row unless subdivision_row.nil?
95
+
96
+ raise FIPS::NotFoundError, "No subdivision found matching fips: #{fips}"
97
+ end
98
+
99
+ def by_name(state_fips, county, subdivision)
100
+ row = db_first(
101
+ "SELECT states.state_abbr AS state_abbr, subdivisions.full_fips AS fips, counties.name AS county_name, " \
102
+ "subdivisions.gnis AS gnis, subdivisions.name AS name, subdivisions.class_code AS class_code, subdivisions.status AS status " \
103
+ "FROM counties INDEXED BY counties_state_name_idx " \
104
+ "JOIN subdivisions INDEXED BY subdivisions_county_name_idx USING (state_fips, county_fips) " \
105
+ "JOIN states USING (state_fips) " \
106
+ "WHERE counties.state_fips = ? AND counties.name_key = ? AND subdivisions.name_key = ? LIMIT 1",
107
+ [state_fips, county.upcase, subdivision.upcase]
108
+ )
109
+ subdivision_row = formatted_subdivision(row)
110
+ return subdivision_row unless subdivision_row.nil?
111
+
112
+ raise FIPS::NotFoundError, "No subdivision found matching: #{subdivision} in #{county}"
113
+ end
114
+
115
+ def by_county_fips_and_sub_name(state_fips, county_fips, subdivision)
116
+ select_subdivision(
117
+ "subdivisions.state_fips = ? AND subdivisions.county_fips = ? AND subdivisions.name_key = ?",
118
+ [state_fips, county_fips, subdivision.upcase]
119
+ )
120
+ end
121
+
122
+ def select_subdivision(where_clause, bind_vars)
123
+ row = db_first(
124
+ "#{subdivision_select_sql(where_clause)} LIMIT 1",
125
+ bind_vars
126
+ )
127
+ formatted_subdivision(row)
128
+ end
129
+
130
+ def select_subdivisions(where_clause, bind_vars)
131
+ rows = db_all(
132
+ "#{subdivision_select_sql(where_clause)} ORDER BY subdivisions.full_fips",
133
+ bind_vars
134
+ )
135
+ rows.map { |row| formatted_subdivision(row) }
136
+ end
137
+
138
+ def subdivision_select_sql(where_clause)
139
+ "SELECT states.state_abbr AS state_abbr, subdivisions.full_fips AS fips, counties.name AS county_name, " \
140
+ "subdivisions.gnis AS gnis, subdivisions.name AS name, subdivisions.class_code AS class_code, subdivisions.status AS status " \
141
+ "FROM subdivisions JOIN states USING (state_fips) JOIN counties USING (state_fips, county_fips) " \
142
+ "WHERE #{where_clause}"
143
+ end
144
+
145
+ def formatted_subdivision(row)
146
+ return nil if row.nil?
147
+
148
+ {
149
+ state_abbr: row["state_abbr"],
150
+ fips: row["fips"],
151
+ county_name: row["county_name"],
152
+ gnis: row["gnis"],
153
+ name: row["name"],
154
+ class_code: row["class_code"],
155
+ status: row["status"]
156
+ }
157
+ end
158
+ end
159
+ end
160
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module FIPS
4
+ VERSION = "1.0.0"
5
+ end
data/lib/fips.rb ADDED
@@ -0,0 +1,69 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "zeitwerk"
4
+
5
+ module FIPS
6
+ loader = Zeitwerk::Loader.for_gem
7
+ loader.inflector.inflect("fips" => "FIPS")
8
+ loader.setup
9
+
10
+ class NotFoundError < StandardError
11
+ end
12
+
13
+ class << self
14
+ def lookup(**params)
15
+ # params: fips, state, county, subdivision, (add gnis?, etc.)
16
+ fips = params.fetch(:fips, nil)
17
+ state = params.fetch(:state, nil)
18
+ county = params.fetch(:county, nil)
19
+ subdivision = params.fetch(:subdivision, nil)
20
+ return identify_by_fips(fips, state, county, subdivision) unless fips.nil?
21
+
22
+ return FIPS::State.lookup(state: state) if !state.nil? && county.nil? && subdivision.nil?
23
+ return FIPS::County.lookup(state: state, county: county) if !state.nil? && !county.nil? && subdivision.nil?
24
+
25
+ if !state.nil? && !county.nil? && !subdivision.nil?
26
+ return FIPS::Subdivision.lookup(state: state, county: county,
27
+ subdivision: subdivision)
28
+ end
29
+
30
+ raise ArgumentError, "Insufficient parameters to identify a state, county, or subdivision: #{params.inspect}"
31
+ end
32
+
33
+ private
34
+
35
+ def identify_by_fips(fips, state, county, subdivision)
36
+ raise ArgumentError, "FIPS input must be a string" unless fips.is_a?(String)
37
+
38
+ case fips.length
39
+ when 2
40
+ return FIPS::Subdivision.lookup(fips: fips, county: county, subdivision: subdivision) if !county.nil? && !subdivision.nil?
41
+ return FIPS::County.lookup(fips: fips, county: county) if !county.nil? && subdivision.nil?
42
+ unless county.nil? && subdivision.nil?
43
+ raise ArgumentError, "A 2-digit FIPS code requires both county and subdivision names for subdivision lookup"
44
+ end
45
+
46
+ FIPS::State.lookup(fips: fips)
47
+ when 3
48
+ return FIPS::Subdivision.lookup(fips: fips, state: state, subdivision: subdivision) if !state.nil? && !subdivision.nil?
49
+ unless !state.nil? && county.nil? && subdivision.nil?
50
+ raise ArgumentError, "A 3-digit FIPS code requires a state for county lookup, or state and subdivision for subdivision lookup"
51
+ end
52
+
53
+ FIPS::County.lookup(fips: fips, state: state)
54
+ when 5
55
+ return FIPS::Subdivision.lookup(fips: fips, subdivision: subdivision) unless subdivision.nil?
56
+ return FIPS::Subdivision.lookup(fips: fips, state: state) if !state.nil? && county.nil?
57
+ unless state.nil? && county.nil? && subdivision.nil?
58
+ raise ArgumentError, "A 5-digit FIPS code accepts either state for subdivision FIPS or subdivision name for county FIPS"
59
+ end
60
+
61
+ FIPS::County.lookup(fips: fips)
62
+ when 10
63
+ FIPS::Subdivision.lookup(fips: fips)
64
+ else
65
+ raise ArgumentError, "FIPS code (#{fips}) must identify a state, county, or subdivision"
66
+ end
67
+ end
68
+ end
69
+ end
data/sig/fips.rbs ADDED
@@ -0,0 +1,50 @@
1
+ module FIPS
2
+ VERSION: String
3
+
4
+ type state_record = {
5
+ fips: String,
6
+ abbr: String,
7
+ name: String,
8
+ ansi: String
9
+ }
10
+
11
+ type county_record = {
12
+ state_abbr: String,
13
+ fips: String,
14
+ gnis: String,
15
+ name: String,
16
+ class_code: String,
17
+ status: String
18
+ }
19
+
20
+ type subdivision_record = {
21
+ state_abbr: String,
22
+ fips: String,
23
+ county_name: String,
24
+ gnis: String,
25
+ name: String,
26
+ class_code: String,
27
+ status: String
28
+ }
29
+
30
+ type lookup_record = state_record | county_record | subdivision_record
31
+ class NotFoundError < StandardError
32
+ end
33
+
34
+ def self.lookup: (?fips: String?, ?state: String?, ?county: String?, ?subdivision: String?) -> lookup_record
35
+
36
+ class State
37
+ def self.lookup: (?fips: String?, ?state: String?) -> state_record
38
+ def self.all: () -> Array[state_record]
39
+ end
40
+
41
+ class County
42
+ def self.lookup: (?fips: String?, ?state: String?, ?county: String?) -> county_record
43
+ def self.all: (state: String state) -> Array[county_record]
44
+ end
45
+
46
+ class Subdivision
47
+ def self.lookup: (?fips: String?, ?state: String?, ?county: String?, ?subdivision: String?) -> subdivision_record
48
+ def self.all: (state: String state, ?county: String?) -> Array[subdivision_record]
49
+ end
50
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fips_lookup
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Erik Barroso
@@ -9,6 +9,34 @@ bindir: exe
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: sqlite3
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.0'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.0'
26
+ - !ruby/object:Gem::Dependency
27
+ name: zeitwerk
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '2.8'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '2.8'
12
40
  - !ruby/object:Gem::Dependency
13
41
  name: csv
14
42
  requirement: !ruby/object:Gem::Requirement
@@ -16,7 +44,7 @@ dependencies:
16
44
  - - "~>"
17
45
  - !ruby/object:Gem::Version
18
46
  version: '3.0'
19
- type: :runtime
47
+ type: :development
20
48
  prerelease: false
21
49
  version_requirements: !ruby/object:Gem::Requirement
22
50
  requirements:
@@ -51,6 +79,20 @@ dependencies:
51
79
  - - ">="
52
80
  - !ruby/object:Gem::Version
53
81
  version: '0'
82
+ - !ruby/object:Gem::Dependency
83
+ name: benchmark
84
+ requirement: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: '0.2'
89
+ type: :development
90
+ prerelease: false
91
+ version_requirements: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: '0.2'
54
96
  - !ruby/object:Gem::Dependency
55
97
  name: rake
56
98
  requirement: !ruby/object:Gem::Requirement
@@ -107,131 +149,20 @@ files:
107
149
  - LICENSE.txt
108
150
  - README.md
109
151
  - Rakefile
110
- - lib/data/county/AK.csv
111
- - lib/data/county/AL.csv
112
- - lib/data/county/AR.csv
113
- - lib/data/county/AS.csv
114
- - lib/data/county/AZ.csv
115
- - lib/data/county/CA.csv
116
- - lib/data/county/CO.csv
117
- - lib/data/county/CT.csv
118
- - lib/data/county/DC.csv
119
- - lib/data/county/DE.csv
120
- - lib/data/county/FL.csv
121
- - lib/data/county/GA.csv
122
- - lib/data/county/GU.csv
123
- - lib/data/county/HI.csv
124
- - lib/data/county/IA.csv
125
- - lib/data/county/ID.csv
126
- - lib/data/county/IL.csv
127
- - lib/data/county/IN.csv
128
- - lib/data/county/KS.csv
129
- - lib/data/county/KY.csv
130
- - lib/data/county/LA.csv
131
- - lib/data/county/MA.csv
132
- - lib/data/county/MD.csv
133
- - lib/data/county/ME.csv
134
- - lib/data/county/MI.csv
135
- - lib/data/county/MN.csv
136
- - lib/data/county/MO.csv
137
- - lib/data/county/MP.csv
138
- - lib/data/county/MS.csv
139
- - lib/data/county/MT.csv
140
- - lib/data/county/NC.csv
141
- - lib/data/county/ND.csv
142
- - lib/data/county/NE.csv
143
- - lib/data/county/NH.csv
144
- - lib/data/county/NJ.csv
145
- - lib/data/county/NM.csv
146
- - lib/data/county/NV.csv
147
- - lib/data/county/NY.csv
148
- - lib/data/county/OH.csv
149
- - lib/data/county/OK.csv
150
- - lib/data/county/OR.csv
151
- - lib/data/county/PA.csv
152
- - lib/data/county/PR.csv
153
- - lib/data/county/RI.csv
154
- - lib/data/county/SC.csv
155
- - lib/data/county/SD.csv
156
- - lib/data/county/TN.csv
157
- - lib/data/county/TX.csv
158
- - lib/data/county/UM.csv
159
- - lib/data/county/UT.csv
160
- - lib/data/county/VA.csv
161
- - lib/data/county/VI.csv
162
- - lib/data/county/VT.csv
163
- - lib/data/county/WA.csv
164
- - lib/data/county/WI.csv
165
- - lib/data/county/WV.csv
166
- - lib/data/county/WY.csv
167
- - lib/data/state.csv
168
- - lib/data/subdivision/AK.csv
169
- - lib/data/subdivision/AL.csv
170
- - lib/data/subdivision/AR.csv
171
- - lib/data/subdivision/AS.csv
172
- - lib/data/subdivision/AZ.csv
173
- - lib/data/subdivision/CA.csv
174
- - lib/data/subdivision/CO.csv
175
- - lib/data/subdivision/CT.csv
176
- - lib/data/subdivision/DC.csv
177
- - lib/data/subdivision/DE.csv
178
- - lib/data/subdivision/FL.csv
179
- - lib/data/subdivision/GA.csv
180
- - lib/data/subdivision/GU.csv
181
- - lib/data/subdivision/HI.csv
182
- - lib/data/subdivision/IA.csv
183
- - lib/data/subdivision/ID.csv
184
- - lib/data/subdivision/IL.csv
185
- - lib/data/subdivision/IN.csv
186
- - lib/data/subdivision/KS.csv
187
- - lib/data/subdivision/KY.csv
188
- - lib/data/subdivision/LA.csv
189
- - lib/data/subdivision/MA.csv
190
- - lib/data/subdivision/MD.csv
191
- - lib/data/subdivision/ME.csv
192
- - lib/data/subdivision/MI.csv
193
- - lib/data/subdivision/MN.csv
194
- - lib/data/subdivision/MO.csv
195
- - lib/data/subdivision/MP.csv
196
- - lib/data/subdivision/MS.csv
197
- - lib/data/subdivision/MT.csv
198
- - lib/data/subdivision/NC.csv
199
- - lib/data/subdivision/ND.csv
200
- - lib/data/subdivision/NE.csv
201
- - lib/data/subdivision/NH.csv
202
- - lib/data/subdivision/NJ.csv
203
- - lib/data/subdivision/NM.csv
204
- - lib/data/subdivision/NV.csv
205
- - lib/data/subdivision/NY.csv
206
- - lib/data/subdivision/OH.csv
207
- - lib/data/subdivision/OK.csv
208
- - lib/data/subdivision/OR.csv
209
- - lib/data/subdivision/PA.csv
210
- - lib/data/subdivision/PR.csv
211
- - lib/data/subdivision/RI.csv
212
- - lib/data/subdivision/SC.csv
213
- - lib/data/subdivision/SD.csv
214
- - lib/data/subdivision/TN.csv
215
- - lib/data/subdivision/TX.csv
216
- - lib/data/subdivision/UM.csv
217
- - lib/data/subdivision/UT.csv
218
- - lib/data/subdivision/VA.csv
219
- - lib/data/subdivision/VI.csv
220
- - lib/data/subdivision/VT.csv
221
- - lib/data/subdivision/WA.csv
222
- - lib/data/subdivision/WI.csv
223
- - lib/data/subdivision/WV.csv
224
- - lib/data/subdivision/WY.csv
225
- - lib/fips_lookup.rb
226
- - lib/fips_lookup/county.rb
227
- - lib/fips_lookup/state.rb
228
- - lib/fips_lookup/subdivision.rb
229
- - lib/fips_lookup/version.rb
230
- - sig/fips_lookup.rbs
152
+ - db/schema.sql
153
+ - lib/data/fips.sqlite3
154
+ - lib/fips.rb
155
+ - lib/fips/county.rb
156
+ - lib/fips/database.rb
157
+ - lib/fips/state.rb
158
+ - lib/fips/subdivision.rb
159
+ - lib/fips/version.rb
160
+ - sig/fips.rbs
231
161
  homepage: https://github.com/3barroso/fips_lookup
232
162
  licenses:
233
163
  - MIT
234
- metadata: {}
164
+ metadata:
165
+ rubygems_mfa_required: 'true'
235
166
  rdoc_options: []
236
167
  require_paths:
237
168
  - lib
@@ -239,7 +170,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
239
170
  requirements:
240
171
  - - ">="
241
172
  - !ruby/object:Gem::Version
242
- version: '3.0'
173
+ version: '3.2'
243
174
  required_rubygems_version: !ruby/object:Gem::Requirement
244
175
  requirements:
245
176
  - - ">="
@@ -1,30 +0,0 @@
1
- AK,02,013,Aleutians East Borough,01419964,H1,A
2
- AK,02,016,Aleutians West Census Area,01419965,H5,S
3
- AK,02,020,Anchorage Municipality,01416061,H6,C
4
- AK,02,050,Bethel Census Area,01419966,H5,S
5
- AK,02,060,Bristol Bay Borough,01419967,H1,A
6
- AK,02,063,Chugach Census Area,02804400,H5,S
7
- AK,02,066,Copper River Census Area,02804401,H5,S
8
- AK,02,068,Denali Borough,01419988,H1,A
9
- AK,02,070,Dillingham Census Area,01419968,H5,S
10
- AK,02,090,Fairbanks North Star Borough,01419969,H1,A
11
- AK,02,100,Haines Borough,01419970,H1,A
12
- AK,02,105,Hoonah-Angoon Census Area,02371430,H5,S
13
- AK,02,110,Juneau City and Borough,01419971,H6,C
14
- AK,02,122,Kenai Peninsula Borough,01419972,H1,A
15
- AK,02,130,Ketchikan Gateway Borough,01419973,H1,A
16
- AK,02,150,Kodiak Island Borough,01419974,H1,A
17
- AK,02,158,Kusilvak Census Area,01419985,H5,S
18
- AK,02,164,Lake and Peninsula Borough,01419975,H1,A
19
- AK,02,170,Matanuska-Susitna Borough,01419976,H1,A
20
- AK,02,180,Nome Census Area,01419977,H5,S
21
- AK,02,185,North Slope Borough,01419978,H1,A
22
- AK,02,188,Northwest Arctic Borough,01419979,H1,A
23
- AK,02,195,Petersburg Borough,02516404,H1,A
24
- AK,02,198,Prince of Wales-Hyder Census Area,01419980,H5,S
25
- AK,02,220,Sitka City and Borough,01419981,H6,C
26
- AK,02,230,Skagway Municipality,02339479,H1,A
27
- AK,02,240,Southeast Fairbanks Census Area,01419983,H5,S
28
- AK,02,275,Wrangell City and Borough,02516402,H6,C
29
- AK,02,282,Yakutat City and Borough,01419986,H1,A
30
- AK,02,290,Yukon-Koyukuk Census Area,01419987,H5,S
@@ -1,67 +0,0 @@
1
- AL,01,001,Autauga County,00161526,H1,A
2
- AL,01,003,Baldwin County,00161527,H1,A
3
- AL,01,005,Barbour County,00161528,H1,A
4
- AL,01,007,Bibb County,00161529,H1,A
5
- AL,01,009,Blount County,00161530,H1,A
6
- AL,01,011,Bullock County,00161531,H1,A
7
- AL,01,013,Butler County,00161532,H1,A
8
- AL,01,015,Calhoun County,00161533,H1,A
9
- AL,01,017,Chambers County,00161534,H1,A
10
- AL,01,019,Cherokee County,00161535,H1,A
11
- AL,01,021,Chilton County,00161536,H1,A
12
- AL,01,023,Choctaw County,00161537,H1,A
13
- AL,01,025,Clarke County,00161538,H1,A
14
- AL,01,027,Clay County,00161539,H1,A
15
- AL,01,029,Cleburne County,00161540,H1,A
16
- AL,01,031,Coffee County,00161541,H1,A
17
- AL,01,033,Colbert County,00161542,H1,A
18
- AL,01,035,Conecuh County,00161543,H1,A
19
- AL,01,037,Coosa County,00161544,H1,A
20
- AL,01,039,Covington County,00161545,H1,A
21
- AL,01,041,Crenshaw County,00161546,H1,A
22
- AL,01,043,Cullman County,00161547,H1,A
23
- AL,01,045,Dale County,00161548,H1,A
24
- AL,01,047,Dallas County,00161549,H1,A
25
- AL,01,049,DeKalb County,00161550,H1,A
26
- AL,01,051,Elmore County,00161551,H1,A
27
- AL,01,053,Escambia County,00161552,H1,A
28
- AL,01,055,Etowah County,00161553,H1,A
29
- AL,01,057,Fayette County,00161554,H1,A
30
- AL,01,059,Franklin County,00161555,H1,A
31
- AL,01,061,Geneva County,00161556,H1,A
32
- AL,01,063,Greene County,00161557,H1,A
33
- AL,01,065,Hale County,00161558,H1,A
34
- AL,01,067,Henry County,00161559,H1,A
35
- AL,01,069,Houston County,00161560,H1,A
36
- AL,01,071,Jackson County,00161561,H1,A
37
- AL,01,073,Jefferson County,00161562,H1,A
38
- AL,01,075,Lamar County,00161563,H1,A
39
- AL,01,077,Lauderdale County,00161564,H1,A
40
- AL,01,079,Lawrence County,00161565,H1,A
41
- AL,01,081,Lee County,00161566,H1,A
42
- AL,01,083,Limestone County,00161567,H1,A
43
- AL,01,085,Lowndes County,00161568,H1,A
44
- AL,01,087,Macon County,00161569,H1,A
45
- AL,01,089,Madison County,00161570,H1,A
46
- AL,01,091,Marengo County,00161572,H1,A
47
- AL,01,093,Marion County,00161573,H1,A
48
- AL,01,095,Marshall County,00161574,H1,A
49
- AL,01,097,Mobile County,00161575,H1,A
50
- AL,01,099,Monroe County,00161576,H1,A
51
- AL,01,101,Montgomery County,00161577,H1,A
52
- AL,01,103,Morgan County,00161578,H1,A
53
- AL,01,105,Perry County,00161579,H1,A
54
- AL,01,107,Pickens County,00161580,H1,A
55
- AL,01,109,Pike County,00161581,H1,A
56
- AL,01,111,Randolph County,00161582,H1,A
57
- AL,01,113,Russell County,00161583,H1,A
58
- AL,01,115,St. Clair County,00164997,H1,A
59
- AL,01,117,Shelby County,00161584,H1,A
60
- AL,01,119,Sumter County,00161585,H1,A
61
- AL,01,121,Talladega County,00161586,H1,A
62
- AL,01,123,Tallapoosa County,00161587,H1,A
63
- AL,01,125,Tuscaloosa County,00161588,H1,A
64
- AL,01,127,Walker County,00161589,H1,A
65
- AL,01,129,Washington County,00161590,H1,A
66
- AL,01,131,Wilcox County,00161591,H1,A
67
- AL,01,133,Winston County,00161592,H1,A