Indirizzo 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -1,3 +1,12 @@
1
1
  source :rubygems
2
2
 
3
- gemspec
3
+ gem 'rake'
4
+
5
+ group :test, :development do
6
+ gem 'cover_me'
7
+ gem 'awesome_print'
8
+ end
9
+
10
+ group :test do
11
+ gem 'test-unit'
12
+ end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = %q{Indirizzo}
3
- s.version = "0.1.0"
3
+ s.version = "0.1.1"
4
4
 
5
5
  s.authors = [%q{Dave Worth}]
6
6
  s.date = %q{2011-12-14}
data/Rakefile CHANGED
@@ -26,6 +26,6 @@ namespace :cover_me do
26
26
  end
27
27
  end
28
28
 
29
- task :test do
30
- Rake::Task['cover_me:report'].invoke
31
- end
29
+ #task :test do
30
+ #Rake::Task['cover_me:report'].invoke
31
+ #end
@@ -1 +1 @@
1
- require 'Indirizzo/Address'
1
+ require 'indirizzo/address'
@@ -1,4 +1,5 @@
1
1
  require 'indirizzo/constants'
2
+ require 'awesome_print'
2
3
 
3
4
  module Indirizzo
4
5
  # Defines the matching of parsed address tokens.
@@ -6,9 +7,9 @@ module Indirizzo
6
7
  # FIXME: shouldn't have to anchor :number and :zip at start/end
7
8
  :number => /^(\d+\W|[a-z]+)?(\d+)([a-z]?)\b/io,
8
9
  :street => /(?:\b(?:\d+\w*|[a-z'-]+)\s*)+/io,
9
- :city => /(?:\b[a-z'-]+\s*)+/io,
10
- :state => Regexp.new(State.regexp.source + "\s*$", Regexp::IGNORECASE),
11
- :zip => /(\d{5})(?:-\d{4})?\s*$/o,
10
+ :city => /(?:\b[a-z][a-z'-]+\s*)+/io,
11
+ :state => State.regexp,
12
+ :zip => /\b(\d{5})(?:-(\d{4}))?\b/o,
12
13
  :at => /\s(at|@|and|&)\s/io,
13
14
  :po_box => /\b[P|p]*(OST|ost)*\.*\s*[O|o|0]*(ffice|FFICE)*\.*\s*[B|b][O|o|0][X|x]\b/
14
15
  }
@@ -23,6 +24,7 @@ module Indirizzo
23
24
  attr_accessor :city
24
25
  attr_accessor :state
25
26
  attr_accessor :zip, :plus4
27
+ attr_accessor :country
26
28
 
27
29
  # Takes an address or place name string as its sole argument.
28
30
  def initialize (text)
@@ -122,55 +124,51 @@ module Indirizzo
122
124
  strings
123
125
  end
124
126
 
125
- def parse_zip(regex_match, text)
126
- idx = text.rindex(regex_match)
127
- text[idx...idx+regex_match.length] = ""
128
- text.sub! /\s*,?\s*$/o, ""
129
- @zip, @plus4 = @zip.map {|s|s.strip}
130
- text
131
- end
132
-
133
127
  def parse_state(regex_match, text)
134
128
  idx = text.rindex(regex_match)
135
- text[idx...idx+regex_match.length] = ""
136
- text.sub! /\s*,?\s*$/o, ""
137
129
  @full_state = @state[0].strip # special case: New York
138
130
  @state = State[@full_state]
139
- text
140
- end
141
-
142
- def parse_number(regex_match, text)
143
- # FIXME: What if this string appears twice?
144
- idx = text.index(regex_match)
145
- text[idx...idx+regex_match.length] = ""
146
- text.sub! /^\s*,?\s*/o, ""
147
- @prenum, @number, @sufnum = @number.map {|s| s and s.strip}
131
+ @city = "Washington" if @state == "DC" && text[idx...idx+regex_match.length] =~ /washington\s+d\.?c\.?/i
148
132
  text
149
133
  end
150
134
 
151
135
  def parse
152
136
  text = @text.clone.downcase
153
137
 
154
- @zip = text.scan(Match[:zip])[-1]
138
+ @zip = text.scan(Match[:zip]).last
155
139
  if @zip
156
- text = parse_zip($&, text)
140
+ last_match = $&
141
+ zip_index = text.rindex(last_match)
142
+ zip_end_index = zip_index + last_match.length - 1
143
+ @zip, @plus4 = @zip.map {|s| s and s.strip }
157
144
  else
158
145
  @zip = @plus4 = ""
146
+ zip_index = text.length
147
+ zip_end_index = -1
159
148
  end
160
149
 
161
- @state = text.scan(Match[:state])[-1]
150
+ @country = @text[zip_end_index+1..-1].sub(/^\s*,\s*/, '').strip
151
+ @country = nil if @country == text
152
+
153
+ @state = text.scan(Match[:state]).last
162
154
  if @state
163
- text = parse_state($&, text)
155
+ last_match = $&
156
+ state_index = text.rindex(last_match)
157
+ text = parse_state(last_match, text)
164
158
  else
165
159
  @full_state = ""
166
160
  @state = ""
167
161
  end
168
162
 
169
- @number = text.scan(Match[:number])[0]
163
+ @number = text.scan(Match[:number]).first
170
164
  # FIXME: 230 Fish And Game Rd, Hudson NY 12534
171
165
  if @number # and not intersection?
172
- text = parse_number($&, text)
166
+ last_match = $&
167
+ number_index = text.index(last_match)
168
+ number_end_index = number_index + last_match.length - 1
169
+ @prenum, @number, @sufnum = @number.map {|s| s and s.strip}
173
170
  else
171
+ number_end_index = -1
174
172
  @prenum = @number = @sufnum = ""
175
173
  end
176
174
 
@@ -179,24 +177,32 @@ module Indirizzo
179
177
  # Sault Ste. Marie
180
178
 
181
179
  # FIXME: PO Box should geocode to ZIP
182
- @street = text.scan(Match[:street])
180
+ street_search_end_index = [state_index,zip_index,text.length].reject(&:nil?).min-1
181
+ @street = text[number_end_index+1..street_search_end_index].scan(Match[:street]).map { |s| s and s.strip }
182
+
183
183
  @street = expand_streets(@street)
184
184
  # SPECIAL CASE: 1600 Pennsylvania 20050
185
185
  @street << @full_state if @street.empty? and @state.downcase != @full_state.downcase
186
186
 
187
- @city = text.scan(Match[:city])
188
- if !@city.empty?
189
- @city = [@city[-1].strip]
190
- add = @city.map {|item| item.gsub(Name_Abbr.regexp) {|m| Name_Abbr[m]}}
191
- @city |= add
192
- @city.map! {|s| s.downcase}
193
- @city.uniq!
194
- else
195
- @city = []
187
+ street_end_index = @street.map { |s| text.rindex(s) }.reject(&:nil?).min||0
188
+
189
+ if @city.nil? || @city.empty?
190
+ @city = text[street_end_index..street_search_end_index+1].scan(Match[:city])
191
+ if !@city.empty?
192
+ #@city = [@city[-1].strip]
193
+ @city = [@city.last.strip]
194
+ add = @city.map {|item| item.gsub(Name_Abbr.regexp) {|m| Name_Abbr[m]}}
195
+ @city |= add
196
+ @city.map! {|s| s.downcase}
197
+ @city.uniq!
198
+ else
199
+ @city = []
200
+ end
201
+
202
+ # SPECIAL CASE: no city, but a state with the same name. e.g. "New York"
203
+ @city << @full_state if @state.downcase != @full_state.downcase
196
204
  end
197
205
 
198
- # SPECIAL CASE: no city, but a state with the same name. e.g. "New York"
199
- @city << @full_state if @state.downcase != @full_state.downcase
200
206
  end
201
207
 
202
208
  def expand_streets(street)
@@ -20,10 +20,10 @@ module Indirizzo
20
20
  # whitespace-delimited prefixes to keys and values in the two-way Map.
21
21
  def build_partial
22
22
  @partial = Set.new()
23
- [keys, values].flatten.each {|item|
23
+ [keys, values].flatten.each do |item|
24
24
  @partial << item.downcase
25
25
  item.downcase.split.each {|token| @partial << token}
26
- }
26
+ end
27
27
  end
28
28
  def build_match
29
29
  @regexp = Regexp.new(
@@ -612,6 +612,8 @@ module Indirizzo
612
612
  "Connecticut" => "CT",
613
613
  "Delaware" => "DE",
614
614
  "District of Columbia" => "DC",
615
+ "Washington DC" => "DC",
616
+ "Washington D.C." => "DC",
615
617
  "Federated States of Micronesia" => "FM",
616
618
  "Florida" => "FL",
617
619
  "Georgia" => "GA",
@@ -9,18 +9,6 @@ class TestAddress < Test::Unit::TestCase
9
9
  addr = Address.new("1600 Pennsylvania Av., Washington DC")
10
10
  assert_equal "1600 Pennsylvania Av, Washington DC", addr.text
11
11
  end
12
- def test_clean
13
- fixtures = [
14
- [ "cleaned text", "cleaned: text!" ],
15
- [ "cleaned-text 2", "cleaned-text: #2?" ],
16
- [ "it's working 1/2", "~it's working 1/2~" ],
17
- [ "it's working, yes", "it's working, yes...?" ],
18
- [ "it's working & well", "it's working & well?" ]
19
- ]
20
- fixtures.each {|output, given|
21
- assert_equal output, Address.new(given).text
22
- }
23
- end
24
12
  def test_expand_numbers
25
13
  num_list = ["5", "fifth", "five"]
26
14
  num_list.each {|n|
@@ -28,146 +16,12 @@ class TestAddress < Test::Unit::TestCase
28
16
  assert_equal num_list, addr.expand_numbers(n).to_a.sort
29
17
  }
30
18
  end
31
- def test_city_parse
32
- places = [
33
- [ "New York, NY", "New York", "NY", "" ],
34
- [ "NY", "", "NY", "" ],
35
- [ "New York", "New York", "NY", "" ],
36
- [ "Philadelphia", "Philadelphia", "", "" ],
37
- [ "Philadelphia PA", "Philadelphia", "PA", "" ],
38
- [ "Philadelphia, PA", "Philadelphia", "PA", "" ],
39
- [ "Philadelphia, Pennsylvania", "Philadelphia", "PA", "" ],
40
- [ "Philadelphia, Pennsylvania 19131", "Philadelphia", "PA", "19131" ],
41
- [ "Philadelphia 19131", "Philadelphia", "", "19131" ],
42
- [ "Pennsylvania 19131", "Pennsylvania", "PA", "19131" ], # kind of a misfeature
43
- [ "19131", "", "", "19131" ],
44
- [ "19131-9999", "", "", "19131" ],
45
- ]
46
- for fixture in places
47
- addr = Address.new fixture[0]
48
- [:city, :state, :zip].zip(fixture[1..3]).each {|key,val|
49
- result = addr.send key
50
- result = [result.downcase] unless result.kind_of? Array
51
- if result.empty?
52
- assert_equal val, "", key.to_s + " test no result " + fixture.join("/")
53
- else
54
- assert result.member?(val.downcase), key.to_s + " test " + result.inspect + fixture.join("/")
55
- end
56
- }
57
- end
58
- end
59
19
 
60
20
  def test_po_box
61
21
  addr_po = Address.new "PO Box 1111 Herndon VA 20171"
62
22
  assert addr_po.po_box?
63
23
  end
64
24
 
65
- def test_parse
66
- addrs = [
67
- {:text => "1600 Pennsylvania Av., Washington DC 20050",
68
- :number => "1600",
69
- :street => "Pennsylvania Ave",
70
- :city => "Washington",
71
- :state => "DC",
72
- :zip => "20050"},
73
-
74
- {:text => "1600 Pennsylvania, Washington DC",
75
- :number => "1600",
76
- :street => "Pennsylvania",
77
- :city => "Washington",
78
- :state => "DC"},
79
-
80
- {:text => "1600 Pennsylvania Washington DC",
81
- :number => "1600",
82
- :street => "Pennsylvania Washington",
83
- :city => "Pennsylvania Washington", # FIXME
84
- :state => "DC"},
85
-
86
- {:text => "1600 Pennsylvania Washington",
87
- :number => "1600",
88
- :street => "Pennsylvania",
89
- :city => "Washington",
90
- :state => "WA"}, # FIXME
91
-
92
- {:text => "1600 Pennsylvania 20050",
93
- :number => "1600",
94
- :street => "Pennsylvania", # FIXME
95
- :zip => "20050"},
96
-
97
- {:text => "1600 Pennsylvania Av, 20050-9999",
98
- :number => "1600",
99
- :street => "Pennsylvania Ave",
100
- :zip => "20050"},
101
-
102
- {:text => "1005 Gravenstein Highway North, Sebastopol CA",
103
- :number => "1005",
104
- :street => "Gravenstein Hwy N",
105
- :city => "Sebastopol",
106
- :state => "CA"},
107
-
108
- {:text => "100 N 7th St, Brooklyn",
109
- :number => "100",
110
- :street => "N 7 St",
111
- :city => "Brooklyn"},
112
-
113
- {:text => "100 N Seventh St, Brooklyn",
114
- :number => "100",
115
- :street => "N 7 St",
116
- :city => "Brooklyn"},
117
-
118
- {:text => "100 Central Park West, New York, NY",
119
- :number => "100",
120
- :street => "Central Park W",
121
- :city => "New York",
122
- :state => "NY"},
123
-
124
- {:text => "100 Central Park West, 10010",
125
- :number => "100",
126
- :street => "Central Park W",
127
- :zip => "10010"},
128
-
129
- {:text => "1400 Avenue of the Americas, New York, NY 10019",
130
- :number => "1400",
131
- :street => "Ave of the Americas",
132
- :city => "New York",
133
- :state => "NY"},
134
-
135
- {:text => "1400 Avenue of the Americas, New York",
136
- :number => "1400",
137
- :street => "Ave of the Americas",
138
- :city => "New York"},
139
-
140
- {:text => "1400 Ave of the Americas, New York",
141
- :number => "1400",
142
- :street => "Ave of the Americas",
143
- :city => "New York"},
144
-
145
- {:text => "1400 Av of the Americas, New York",
146
- :number => "1400",
147
- :street => "Ave of the Americas",
148
- :city => "New York"},
149
-
150
- {:text => "1400 Av of the Americas New York",
151
- :number => "1400",
152
- :street => "Ave of the Americas",
153
- :city => "New York"},
154
-
155
- ]
156
- for fixture in addrs
157
- text = fixture.delete(:text)
158
- addr = Address.new(text)
159
- for key, val in fixture
160
- result = addr.send key
161
- if result.kind_of? Array
162
- result.map! {|str| str.downcase}
163
- assert result.member?(val.downcase), "#{text} (#{key}) = #{result.inspect}"
164
- else
165
- assert_equal val, result, "#{text} (#{key}) = #{result.inspect}"
166
- end
167
- end
168
- end
169
- end
170
-
171
25
  def test_skip_parse
172
26
  addresses = [
173
27
  {:street => "1233 Main St", :city => "Springfield", :region => "VA", :postal_code => "12345", :final_number => "1233", :parsed_street => "main st"},
@@ -225,4 +79,201 @@ class TestAddress < Test::Unit::TestCase
225
79
  assert_equal preparsed_address[:country],address_for_geocode.state
226
80
  end
227
81
  end
82
+
83
+ # test cleaning code
84
+ [
85
+ [ "cleaned text", "cleaned: text!" ],
86
+ [ "cleaned-text 2", "cleaned-text: #2?" ],
87
+ [ "it's working 1/2", "~it's working 1/2~" ],
88
+ [ "it's working, yes", "it's working, yes...?" ],
89
+ [ "it's working & well", "it's working & well?" ]
90
+ ].each do |output, given|
91
+ define_method "test_clean_#{output.tr('-/\'&', '').gsub(/\s+/, '_')}" do
92
+ assert_equal output, Address.new(given).text
93
+ end
94
+ end
95
+
96
+ # test the city parsing code
97
+ [
98
+ [ "New York, NY", "New York", "NY", "" ],
99
+ [ "NY", "", "NY", "" ],
100
+ [ "New York", "New York", "NY", "" ],
101
+ [ "Philadelphia", "Philadelphia", "", "" ],
102
+ [ "Philadelphia PA", "Philadelphia", "PA", "" ],
103
+ [ "Philadelphia, PA", "Philadelphia", "PA", "" ],
104
+ [ "Philadelphia, Pennsylvania", "Philadelphia", "PA", "" ],
105
+ [ "Philadelphia, Pennsylvania 19131", "Philadelphia", "PA", "19131" ],
106
+ [ "Philadelphia 19131", "Philadelphia", "", "19131" ],
107
+ [ "Pennsylvania 19131", "Pennsylvania", "PA", "19131" ], # kind of a misfeature
108
+ [ "19131", "", "", "19131" ],
109
+ [ "19131-9999", "", "", "19131" ],
110
+ ].each do |fixture|
111
+ define_method "test_city_parse_#{fixture[0].gsub(/(?:\s+|[,])/,'_')}" do
112
+ check_city(fixture)
113
+ end
114
+ end
115
+
116
+ def check_city(fixture)
117
+ addr = Address.new(fixture[0])
118
+ [:city, :state, :zip].zip(fixture[1..3]).each do |key,val|
119
+ result = addr.send(key)
120
+ result = [result.downcase] unless result.kind_of?(Array)
121
+ if result.empty?
122
+ assert_equal val, "", key.to_s + " test no result " + fixture.join("/")
123
+ else
124
+ assert result.member?(val.downcase), key.to_s + " test " + result.inspect + fixture.join("/")
125
+ end
126
+ end
127
+ end
128
+
129
+ # test address parsing code
130
+ [
131
+ {:text => "1600 Pennsylvania Av., Washington DC 20050",
132
+ :number => "1600",
133
+ :street => "Pennsylvania Ave",
134
+ :city => "Washington",
135
+ :state => "DC",
136
+ :zip => "20050"},
137
+
138
+ {:text => "1600 Pennsylvania, Washington DC",
139
+ :number => "1600",
140
+ :street => "Pennsylvania",
141
+ :city => "Washington",
142
+ :state => "DC"},
143
+
144
+ {:text => "1600 Pennsylvania Washington DC",
145
+ :number => "1600",
146
+ :city => "Washington",
147
+ :street => "Pennsylvania",
148
+ :state => "DC"},
149
+
150
+ {:text => "1600 Pennsylvania Washington",
151
+ :pending => true,
152
+ :number => "1600",
153
+ :street => "Pennsylvania",
154
+ :city => "Washington",
155
+ :state => "DC"},
156
+
157
+ {:text => "1600 Pennsylvania 20050",
158
+ :number => "1600",
159
+ :state => "PA",
160
+ :zip => "20050"},
161
+
162
+ {:text => "1600 Pennsylvania Av, Washington DC 20050-9999",
163
+ :number => "1600",
164
+ :state => "DC",
165
+ :street => "Pennsylvania Ave",
166
+ :plus4 => "9999",
167
+ :zip => "20050"},
168
+
169
+ {:text => "1600 Pennsylvania Av, 20050-9999",
170
+ :pending => true,
171
+ :number => "1600",
172
+ #:state => "PA",
173
+ :street => "Pennsylvania Ave",
174
+ :plus4 => "9999",
175
+ :zip => "20050"},
176
+
177
+ {:text => "1005 Gravenstein Highway North, Sebastopol CA",
178
+ :number => "1005",
179
+ :street => "Gravenstein Hwy N",
180
+ :city => "Sebastopol",
181
+ :state => "CA"},
182
+
183
+ {:text => "100 N 7th St, Brooklyn",
184
+ :number => "100",
185
+ :street => "N 7 St",
186
+ :city => "Brooklyn"},
187
+
188
+ {:text => "100 N Seventh St, Brooklyn",
189
+ :number => "100",
190
+ :street => "N 7 St",
191
+ :city => "Brooklyn"},
192
+
193
+ {:text => "100 Central Park West, New York, NY",
194
+ :number => "100",
195
+ :street => "Central Park W",
196
+ :city => "New York",
197
+ :state => "NY"},
198
+
199
+ {:text => "100 Central Park West, 10010",
200
+ :number => "100",
201
+ :street => "Central Park W",
202
+ :zip => "10010"},
203
+
204
+ {:text => "1400 Avenue of the Americas, New York, NY 10019, US",
205
+ :number => "1400",
206
+ :street => "Ave of the Americas",
207
+ :city => "New York",
208
+ :state => "NY",
209
+ :country => "US"},
210
+
211
+ {:text => "1400 Avenue of the Americas, New York, NY 10019, USA",
212
+ :number => "1400",
213
+ :street => "Ave of the Americas",
214
+ :city => "New York",
215
+ :state => "NY",
216
+ :country => "USA"},
217
+
218
+ {:text => "1400 Avenue of the Americas, New York, NY 10019, United States of America ",
219
+ :number => "1400",
220
+ :street => "Ave of the Americas",
221
+ :city => "New York",
222
+ :state => "NY",
223
+ :country => "United States of America"},
224
+
225
+ {:text => "1400 Avenue of the Americas, New York",
226
+ :number => "1400",
227
+ :street => "Ave of the Americas",
228
+ :city => "New York"},
229
+
230
+ {:text => "1400 Ave of the Americas, New York",
231
+ :number => "1400",
232
+ :street => "Ave of the Americas",
233
+ :city => "New York"},
234
+
235
+ {:text => "1400 Av of the Americas, New York",
236
+ :number => "1400",
237
+ :street => "Ave of the Americas",
238
+ :city => "New York"},
239
+
240
+ {:text => "1400 Av of the Americas New York",
241
+ :number => "1400",
242
+ :street => "Ave of the Americas",
243
+ :city => "New York"},
244
+
245
+ {:text => "23 Home St, Hometown PA, 12345 US",
246
+ :number => "23",
247
+ :state => "PA",
248
+ :street => "Home St",
249
+ :city => "Hometown",
250
+ :zip => "12345"},
251
+
252
+ {:text => "23 Home St, Apt. A, Hometown PA, 12345 US",
253
+ :number => "23",
254
+ :state => "PA",
255
+ :street => "Home St",
256
+ :city => "Hometown",
257
+ :zip => "12345",
258
+ :country => "US"}
259
+ ].each do |fixture|
260
+ define_method "test_parse_#{fixture[:text].gsub(/(?:\s+|[.,])/,'_')}" do
261
+ pend if fixture[:pending]
262
+ check_addr(fixture)
263
+ end
264
+ end
265
+
266
+ def check_addr(fixture)
267
+ text = fixture[:text]
268
+ addr = Address.new(text)
269
+ fixture.reject{|k,v| k == :text}.each do |key, val|
270
+ result = addr.send key
271
+ if result.kind_of? Array
272
+ result.map! {|str| str.downcase}
273
+ assert result.member?(val.downcase), "#{text} (#{key}) = #{result.inspect}"
274
+ else
275
+ assert_equal val, result, "#{text} (#{key}) = #{result.inspect}"
276
+ end
277
+ end
278
+ end
228
279
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: Indirizzo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-12-14 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rake
16
- requirement: &70182937832940 !ruby/object:Gem::Requirement
16
+ requirement: &70302219305600 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70182937832940
24
+ version_requirements: *70302219305600
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: cover_me
27
- requirement: &70182937832500 !ruby/object:Gem::Requirement
27
+ requirement: &70302219305160 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70182937832500
35
+ version_requirements: *70302219305160
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: awesome_print
38
- requirement: &70182937832080 !ruby/object:Gem::Requirement
38
+ requirement: &70302219304740 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,7 +43,7 @@ dependencies:
43
43
  version: '0'
44
44
  type: :development
45
45
  prerelease: false
46
- version_requirements: *70182937832080
46
+ version_requirements: *70302219304740
47
47
  description: Indirizzo is simply an extraction of the US Street Address parsing code
48
48
  from Geocoder::US
49
49
  email: dave@highgroove.com