geocoder 1.5.1 → 1.8.5

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 (100) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +107 -0
  3. data/LICENSE +1 -1
  4. data/README.md +364 -243
  5. data/bin/console +13 -0
  6. data/examples/app_defined_lookup_services.rb +22 -0
  7. data/lib/easting_northing.rb +171 -0
  8. data/lib/generators/geocoder/config/templates/initializer.rb +6 -1
  9. data/lib/geocoder/cache.rb +16 -33
  10. data/lib/geocoder/cache_stores/base.rb +40 -0
  11. data/lib/geocoder/cache_stores/generic.rb +35 -0
  12. data/lib/geocoder/cache_stores/redis.rb +34 -0
  13. data/lib/geocoder/configuration.rb +19 -5
  14. data/lib/geocoder/configuration_hash.rb +4 -4
  15. data/lib/geocoder/ip_address.rb +11 -1
  16. data/lib/geocoder/lookup.rb +42 -6
  17. data/lib/geocoder/lookups/abstract_api.rb +46 -0
  18. data/lib/geocoder/lookups/amap.rb +2 -2
  19. data/lib/geocoder/lookups/amazon_location_service.rb +58 -0
  20. data/lib/geocoder/lookups/azure.rb +56 -0
  21. data/lib/geocoder/lookups/ban_data_gouv_fr.rb +15 -2
  22. data/lib/geocoder/lookups/base.rb +4 -1
  23. data/lib/geocoder/lookups/bing.rb +2 -2
  24. data/lib/geocoder/lookups/esri.rb +24 -5
  25. data/lib/geocoder/lookups/freegeoip.rb +12 -10
  26. data/lib/geocoder/lookups/geoapify.rb +78 -0
  27. data/lib/geocoder/lookups/geocodio.rb +1 -1
  28. data/lib/geocoder/lookups/geoip2.rb +4 -0
  29. data/lib/geocoder/lookups/geoportail_lu.rb +1 -1
  30. data/lib/geocoder/lookups/google.rb +7 -2
  31. data/lib/geocoder/lookups/google_places_details.rb +26 -12
  32. data/lib/geocoder/lookups/google_places_search.rb +44 -2
  33. data/lib/geocoder/lookups/google_premier.rb +4 -0
  34. data/lib/geocoder/lookups/here.rb +27 -31
  35. data/lib/geocoder/lookups/ip2location.rb +10 -14
  36. data/lib/geocoder/lookups/ip2location_io.rb +62 -0
  37. data/lib/geocoder/lookups/ip2location_lite.rb +40 -0
  38. data/lib/geocoder/lookups/ipbase.rb +49 -0
  39. data/lib/geocoder/lookups/ipdata_co.rb +1 -1
  40. data/lib/geocoder/lookups/ipgeolocation.rb +51 -0
  41. data/lib/geocoder/lookups/ipqualityscore.rb +50 -0
  42. data/lib/geocoder/lookups/ipregistry.rb +68 -0
  43. data/lib/geocoder/lookups/latlon.rb +1 -2
  44. data/lib/geocoder/lookups/location_iq.rb +5 -1
  45. data/lib/geocoder/lookups/mapbox.rb +3 -3
  46. data/lib/geocoder/lookups/maxmind_local.rb +7 -1
  47. data/lib/geocoder/lookups/melissa_street.rb +41 -0
  48. data/lib/geocoder/lookups/nationaal_georegister_nl.rb +38 -0
  49. data/lib/geocoder/lookups/osmnames.rb +57 -0
  50. data/lib/geocoder/lookups/pc_miler.rb +85 -0
  51. data/lib/geocoder/lookups/pdok_nl.rb +43 -0
  52. data/lib/geocoder/lookups/photon.rb +89 -0
  53. data/lib/geocoder/lookups/pickpoint.rb +1 -1
  54. data/lib/geocoder/lookups/smarty_streets.rb +6 -1
  55. data/lib/geocoder/lookups/telize.rb +1 -1
  56. data/lib/geocoder/lookups/tencent.rb +9 -9
  57. data/lib/geocoder/lookups/test.rb +5 -0
  58. data/lib/geocoder/lookups/twogis.rb +58 -0
  59. data/lib/geocoder/lookups/uk_ordnance_survey_names.rb +59 -0
  60. data/lib/geocoder/lookups/yandex.rb +6 -7
  61. data/lib/geocoder/query.rb +1 -1
  62. data/lib/geocoder/results/abstract_api.rb +146 -0
  63. data/lib/geocoder/results/amazon_location_service.rb +62 -0
  64. data/lib/geocoder/results/azure.rb +65 -0
  65. data/lib/geocoder/results/baidu.rb +0 -4
  66. data/lib/geocoder/results/ban_data_gouv_fr.rb +28 -3
  67. data/lib/geocoder/results/db_ip_com.rb +1 -1
  68. data/lib/geocoder/results/esri.rb +5 -2
  69. data/lib/geocoder/results/geoapify.rb +179 -0
  70. data/lib/geocoder/results/here.rb +20 -22
  71. data/lib/geocoder/results/ip2location_io.rb +21 -0
  72. data/lib/geocoder/results/ip2location_lite.rb +47 -0
  73. data/lib/geocoder/results/ipbase.rb +40 -0
  74. data/lib/geocoder/results/ipgeolocation.rb +59 -0
  75. data/lib/geocoder/results/ipqualityscore.rb +54 -0
  76. data/lib/geocoder/results/ipregistry.rb +304 -0
  77. data/lib/geocoder/results/mapbox.rb +34 -10
  78. data/lib/geocoder/results/melissa_street.rb +46 -0
  79. data/lib/geocoder/results/nationaal_georegister_nl.rb +62 -0
  80. data/lib/geocoder/results/nominatim.rb +27 -15
  81. data/lib/geocoder/results/osmnames.rb +56 -0
  82. data/lib/geocoder/results/pc_miler.rb +98 -0
  83. data/lib/geocoder/results/pdok_nl.rb +62 -0
  84. data/lib/geocoder/results/photon.rb +119 -0
  85. data/lib/geocoder/results/twogis.rb +76 -0
  86. data/lib/geocoder/results/uk_ordnance_survey_names.rb +59 -0
  87. data/lib/geocoder/results/yandex.rb +217 -59
  88. data/lib/geocoder/sql.rb +4 -4
  89. data/lib/geocoder/util.rb +29 -0
  90. data/lib/geocoder/version.rb +1 -1
  91. data/lib/maxmind_database.rb +12 -12
  92. data/lib/tasks/maxmind.rake +1 -1
  93. metadata +81 -23
  94. data/examples/autoexpire_cache_dalli.rb +0 -62
  95. data/examples/autoexpire_cache_redis.rb +0 -28
  96. data/lib/geocoder/lookups/dstk.rb +0 -22
  97. data/lib/geocoder/lookups/geocoder_us.rb +0 -51
  98. data/lib/geocoder/results/dstk.rb +0 -6
  99. data/lib/geocoder/results/geocoder_us.rb +0 -39
  100. data/lib/hash_recursive_merge.rb +0 -74
@@ -2,78 +2,223 @@ require 'geocoder/results/base'
2
2
 
3
3
  module Geocoder::Result
4
4
  class Yandex < Base
5
+ # Yandex result has difficult tree structure,
6
+ # and presence of some nodes depends on exact search case.
7
+
8
+ # Also Yandex lacks documentation about it.
9
+ # See https://tech.yandex.com/maps/doc/geocoder/desc/concepts/response_structure-docpage/
10
+
11
+ # Ultimatly, we need to find Locality and/or Thoroughfare data.
12
+
13
+ # It may resides on the top (ADDRESS_DETAILS) level.
14
+ # example: 'Baltic Sea'
15
+ # "AddressDetails": {
16
+ # "Locality": {
17
+ # "Premise": {
18
+ # "PremiseName": "Baltic Sea"
19
+ # }
20
+ # }
21
+ # }
22
+
23
+ ADDRESS_DETAILS = %w[
24
+ GeoObject metaDataProperty GeocoderMetaData
25
+ AddressDetails
26
+ ].freeze
27
+
28
+ # On COUNTRY_LEVEL.
29
+ # example: 'Potomak'
30
+ # "AddressDetails": {
31
+ # "Country": {
32
+ # "AddressLine": "reka Potomak",
33
+ # "CountryNameCode": "US",
34
+ # "CountryName": "United States of America",
35
+ # "Locality": {
36
+ # "Premise": {
37
+ # "PremiseName": "reka Potomak"
38
+ # }
39
+ # }
40
+ # }
41
+ # }
42
+
43
+ COUNTRY_LEVEL = %w[
44
+ GeoObject metaDataProperty GeocoderMetaData
45
+ AddressDetails Country
46
+ ].freeze
47
+
48
+ # On ADMIN_LEVEL (usually state or city)
49
+ # example: 'Moscow, Tverskaya'
50
+ # "AddressDetails": {
51
+ # "Country": {
52
+ # "AddressLine": "Moscow, Tverskaya Street",
53
+ # "CountryNameCode": "RU",
54
+ # "CountryName": "Russia",
55
+ # "AdministrativeArea": {
56
+ # "AdministrativeAreaName": "Moscow",
57
+ # "Locality": {
58
+ # "LocalityName": "Moscow",
59
+ # "Thoroughfare": {
60
+ # "ThoroughfareName": "Tverskaya Street"
61
+ # }
62
+ # }
63
+ # }
64
+ # }
65
+ # }
66
+
67
+ ADMIN_LEVEL = %w[
68
+ GeoObject metaDataProperty GeocoderMetaData
69
+ AddressDetails Country
70
+ AdministrativeArea
71
+ ].freeze
72
+
73
+ # On SUBADMIN_LEVEL (may refer to urban district)
74
+ # example: 'Moscow Region, Krasnogorsk'
75
+ # "AddressDetails": {
76
+ # "Country": {
77
+ # "AddressLine": "Moscow Region, Krasnogorsk",
78
+ # "CountryNameCode": "RU",
79
+ # "CountryName": "Russia",
80
+ # "AdministrativeArea": {
81
+ # "AdministrativeAreaName": "Moscow Region",
82
+ # "SubAdministrativeArea": {
83
+ # "SubAdministrativeAreaName": "gorodskoy okrug Krasnogorsk",
84
+ # "Locality": {
85
+ # "LocalityName": "Krasnogorsk"
86
+ # }
87
+ # }
88
+ # }
89
+ # }
90
+ # }
91
+
92
+ SUBADMIN_LEVEL = %w[
93
+ GeoObject metaDataProperty GeocoderMetaData
94
+ AddressDetails Country
95
+ AdministrativeArea
96
+ SubAdministrativeArea
97
+ ].freeze
98
+
99
+ # On DEPENDENT_LOCALITY_1 (may refer to district of city)
100
+ # example: 'Paris, Etienne Marcel'
101
+ # "AddressDetails": {
102
+ # "Country": {
103
+ # "AddressLine": "Île-de-France, Paris, 1er Arrondissement, Rue Étienne Marcel",
104
+ # "CountryNameCode": "FR",
105
+ # "CountryName": "France",
106
+ # "AdministrativeArea": {
107
+ # "AdministrativeAreaName": "Île-de-France",
108
+ # "Locality": {
109
+ # "LocalityName": "Paris",
110
+ # "DependentLocality": {
111
+ # "DependentLocalityName": "1er Arrondissement",
112
+ # "Thoroughfare": {
113
+ # "ThoroughfareName": "Rue Étienne Marcel"
114
+ # }
115
+ # }
116
+ # }
117
+ # }
118
+ # }
119
+ # }
120
+
121
+ DEPENDENT_LOCALITY_1 = %w[
122
+ GeoObject metaDataProperty GeocoderMetaData
123
+ AddressDetails Country
124
+ AdministrativeArea Locality
125
+ DependentLocality
126
+ ].freeze
127
+
128
+ # On DEPENDENT_LOCALITY_2 (for special cases like turkish "mahalle")
129
+ # https://en.wikipedia.org/wiki/Mahalle
130
+ # example: 'Istanbul Mabeyinci Yokuşu 17'
131
+
132
+ # "AddressDetails": {
133
+ # "Country": {
134
+ # "AddressLine": "İstanbul, Fatih, Saraç İshak Mah., Mabeyinci Yokuşu, 17",
135
+ # "CountryNameCode": "TR",
136
+ # "CountryName": "Turkey",
137
+ # "AdministrativeArea": {
138
+ # "AdministrativeAreaName": "İstanbul",
139
+ # "SubAdministrativeArea": {
140
+ # "SubAdministrativeAreaName": "Fatih",
141
+ # "Locality": {
142
+ # "DependentLocality": {
143
+ # "DependentLocalityName": "Saraç İshak Mah.",
144
+ # "Thoroughfare": {
145
+ # "ThoroughfareName": "Mabeyinci Yokuşu",
146
+ # "Premise": {
147
+ # "PremiseNumber": "17"
148
+ # }
149
+ # }
150
+ # }
151
+ # }
152
+ # }
153
+ # }
154
+ # }
155
+ # }
156
+
157
+ DEPENDENT_LOCALITY_2 = %w[
158
+ GeoObject metaDataProperty GeocoderMetaData
159
+ AddressDetails Country
160
+ AdministrativeArea
161
+ SubAdministrativeArea Locality
162
+ DependentLocality
163
+ ].freeze
5
164
 
6
165
  def coordinates
7
166
  @data['GeoObject']['Point']['pos'].split(' ').reverse.map(&:to_f)
8
167
  end
9
168
 
10
- def address(format = :full)
169
+ def address(_format = :full)
11
170
  @data['GeoObject']['metaDataProperty']['GeocoderMetaData']['text']
12
171
  end
13
172
 
14
173
  def city
15
- if state.empty? and address_details and address_details.has_key? 'Locality'
16
- address_details['Locality']['LocalityName']
17
- elsif sub_state.empty? and address_details and address_details.has_key? 'AdministrativeArea' and
18
- address_details['AdministrativeArea'].has_key? 'Locality'
19
- address_details['AdministrativeArea']['Locality']['LocalityName']
20
- elsif not sub_state_city.empty?
21
- sub_state_city
22
- else
23
- ""
24
- end
174
+ result =
175
+ if state.empty?
176
+ find_in_hash(@data, *COUNTRY_LEVEL, 'Locality', 'LocalityName')
177
+ elsif sub_state.empty?
178
+ find_in_hash(@data, *ADMIN_LEVEL, 'Locality', 'LocalityName')
179
+ else
180
+ find_in_hash(@data, *SUBADMIN_LEVEL, 'Locality', 'LocalityName')
181
+ end
182
+
183
+ result || ""
25
184
  end
26
185
 
27
186
  def country
28
- if address_details
29
- address_details['CountryName']
30
- else
31
- ""
32
- end
187
+ find_in_hash(@data, *COUNTRY_LEVEL, 'CountryName') || ""
33
188
  end
34
189
 
35
190
  def country_code
36
- if address_details
37
- address_details['CountryNameCode']
38
- else
39
- ""
40
- end
191
+ find_in_hash(@data, *COUNTRY_LEVEL, 'CountryNameCode') || ""
41
192
  end
42
193
 
43
194
  def state
44
- if address_details and address_details['AdministrativeArea']
45
- address_details['AdministrativeArea']['AdministrativeAreaName']
46
- else
47
- ""
48
- end
195
+ find_in_hash(@data, *ADMIN_LEVEL, 'AdministrativeAreaName') || ""
49
196
  end
50
197
 
51
198
  def sub_state
52
- if !state.empty? and address_details and address_details['AdministrativeArea']['SubAdministrativeArea']
53
- address_details['AdministrativeArea']['SubAdministrativeArea']['SubAdministrativeAreaName']
54
- else
55
- ""
56
- end
199
+ return "" if state.empty?
200
+ find_in_hash(@data, *SUBADMIN_LEVEL, 'SubAdministrativeAreaName') || ""
57
201
  end
58
202
 
59
203
  def state_code
60
204
  ""
61
205
  end
62
206
 
63
- def postal_code
64
- ""
207
+ def street
208
+ thoroughfare_data.is_a?(Hash) ? thoroughfare_data['ThoroughfareName'] : ""
65
209
  end
66
210
 
67
- def premise_name
68
- address_details['Locality']['Premise']['PremiseName']
211
+ def street_number
212
+ premise.is_a?(Hash) ? premise.fetch('PremiseNumber', "") : ""
69
213
  end
70
214
 
71
- def street
72
- thoroughfare_data && thoroughfare_data['ThoroughfareName']
215
+ def premise_name
216
+ premise.is_a?(Hash) ? premise.fetch('PremiseName', "") : ""
73
217
  end
74
218
 
75
- def street_number
76
- thoroughfare_data && thoroughfare_data['Premise'] && thoroughfare_data['Premise']['PremiseNumber']
219
+ def postal_code
220
+ return "" unless premise.is_a?(Hash)
221
+ find_in_hash(premise, 'PostalCode', 'PostalCodeNumber') || ""
77
222
  end
78
223
 
79
224
  def kind
@@ -93,42 +238,55 @@ module Geocoder::Result
93
238
 
94
239
  private # ----------------------------------------------------------------
95
240
 
96
- def thoroughfare_data
97
- locality_data && locality_data['Thoroughfare']
241
+ def top_level_locality
242
+ find_in_hash(@data, *ADDRESS_DETAILS, 'Locality')
98
243
  end
99
244
 
100
- def locality_data
101
- dependent_locality && subadmin_locality && admin_locality
245
+ def country_level_locality
246
+ find_in_hash(@data, *COUNTRY_LEVEL, 'Locality')
102
247
  end
103
248
 
104
249
  def admin_locality
105
- address_details && address_details['AdministrativeArea'] &&
106
- address_details['AdministrativeArea']['Locality']
250
+ find_in_hash(@data, *ADMIN_LEVEL, 'Locality')
107
251
  end
108
252
 
109
253
  def subadmin_locality
110
- address_details && address_details['AdministrativeArea'] &&
111
- address_details['AdministrativeArea']['SubAdministrativeArea'] &&
112
- address_details['AdministrativeArea']['SubAdministrativeArea']['Locality']
254
+ find_in_hash(@data, *SUBADMIN_LEVEL, 'Locality')
113
255
  end
114
256
 
115
257
  def dependent_locality
116
- address_details && address_details['AdministrativeArea'] &&
117
- address_details['AdministrativeArea']['SubAdministrativeArea'] &&
118
- address_details['AdministrativeArea']['SubAdministrativeArea']['Locality'] &&
119
- address_details['AdministrativeArea']['SubAdministrativeArea']['Locality']['DependentLocality']
258
+ find_in_hash(@data, *DEPENDENT_LOCALITY_1) ||
259
+ find_in_hash(@data, *DEPENDENT_LOCALITY_2)
260
+ end
261
+
262
+ def locality_data
263
+ dependent_locality || subadmin_locality || admin_locality ||
264
+ country_level_locality || top_level_locality
265
+ end
266
+
267
+ def thoroughfare_data
268
+ locality_data['Thoroughfare'] if locality_data.is_a?(Hash)
120
269
  end
121
270
 
122
- def address_details
123
- @data['GeoObject']['metaDataProperty']['GeocoderMetaData']['AddressDetails']['Country']
271
+ def premise
272
+ if thoroughfare_data.is_a?(Hash)
273
+ thoroughfare_data['Premise']
274
+ elsif locality_data.is_a?(Hash)
275
+ locality_data['Premise']
276
+ end
124
277
  end
125
278
 
126
- def sub_state_city
127
- if !sub_state.empty? and address_details and address_details['AdministrativeArea']['SubAdministrativeArea'].has_key? 'Locality'
128
- address_details['AdministrativeArea']['SubAdministrativeArea']['Locality']['LocalityName'] || ""
129
- else
130
- ""
279
+ def find_in_hash(source, *keys)
280
+ key = keys.shift
281
+ result = source[key]
282
+
283
+ if keys.empty?
284
+ return result
285
+ elsif !result.is_a?(Hash)
286
+ return nil
131
287
  end
288
+
289
+ find_in_hash(result, *keys)
132
290
  end
133
291
  end
134
292
  end
data/lib/geocoder/sql.rb CHANGED
@@ -44,13 +44,13 @@ module Geocoder
44
44
  end
45
45
 
46
46
  def within_bounding_box(sw_lat, sw_lng, ne_lat, ne_lng, lat_attr, lon_attr)
47
- spans = "#{lat_attr} BETWEEN #{sw_lat} AND #{ne_lat} AND "
47
+ spans = "#{lat_attr} BETWEEN #{sw_lat.to_f} AND #{ne_lat.to_f} AND "
48
48
  # handle box that spans 180 longitude
49
49
  if sw_lng.to_f > ne_lng.to_f
50
- spans + "(#{lon_attr} BETWEEN #{sw_lng} AND 180 OR " +
51
- "#{lon_attr} BETWEEN -180 AND #{ne_lng})"
50
+ spans + "(#{lon_attr} BETWEEN #{sw_lng.to_f} AND 180 OR " +
51
+ "#{lon_attr} BETWEEN -180 AND #{ne_lng.to_f})"
52
52
  else
53
- spans + "#{lon_attr} BETWEEN #{sw_lng} AND #{ne_lng}"
53
+ spans + "#{lon_attr} BETWEEN #{sw_lng.to_f} AND #{ne_lng.to_f}"
54
54
  end
55
55
  end
56
56
 
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Geocoder
4
+ module Util
5
+ #
6
+ # Recursive version of Hash#merge!
7
+ #
8
+ # Adds the contents of +h2+ to +h1+,
9
+ # merging entries in +h1+ with duplicate keys with those from +h2+.
10
+ #
11
+ # Compared with Hash#merge!, this method supports nested hashes.
12
+ # When both +h1+ and +h2+ contains an entry with the same key,
13
+ # it merges and returns the values from both hashes.
14
+ #
15
+ # h1 = {"a" => 100, "b" => 200, "c" => {"c1" => 12, "c2" => 14}}
16
+ # h2 = {"b" => 254, "c" => {"c1" => 16, "c3" => 94}}
17
+ # recursive_hash_merge(h1, h2) #=> {"a" => 100, "b" => 254, "c" => {"c1" => 16, "c2" => 14, "c3" => 94}}
18
+ #
19
+ # Simply using Hash#merge! would return
20
+ #
21
+ # h1.merge!(h2) #=> {"a" => 100, "b" = >254, "c" => {"c1" => 16, "c3" => 94}}
22
+ #
23
+ def self.recursive_hash_merge(h1, h2)
24
+ h1.merge!(h2) do |_key, oldval, newval|
25
+ oldval.class == h1.class ? self.recursive_hash_merge(oldval, newval) : newval
26
+ end
27
+ end
28
+ end
29
+ end
@@ -1,3 +1,3 @@
1
1
  module Geocoder
2
- VERSION = "1.5.1"
2
+ VERSION = "1.8.5"
3
3
  end
@@ -6,9 +6,9 @@ module Geocoder
6
6
  extend self
7
7
 
8
8
  def download(package, dir = "tmp")
9
- filepath = File.expand_path(File.join(dir, archive_filename(package)))
9
+ filepath = File.expand_path(File.join(dir, "#{archive_edition(package)}.zip"))
10
10
  open(filepath, 'wb') do |file|
11
- uri = URI.parse(archive_url(package))
11
+ uri = URI.parse(base_url(package))
12
12
  Net::HTTP.start(uri.host, uri.port) do |http|
13
13
  http.request_get(uri.path) do |resp|
14
14
  # TODO: show progress
@@ -35,6 +35,14 @@ module Geocoder
35
35
  p[s..-1]
36
36
  end
37
37
 
38
+ def archive_edition(package)
39
+ {
40
+ geolite_country_csv: "GeoLite2-Country-CSV",
41
+ geolite_city_csv: "GeoLite2-City-CSV",
42
+ geolite_asn_csv: "GeoLite2-ASN-CSV"
43
+ }[package]
44
+ end
45
+
38
46
  private # -------------------------------------------------------------
39
47
 
40
48
  def table_columns(table_name)
@@ -94,16 +102,8 @@ module Geocoder
94
102
  base_url + archive_url_path(package)
95
103
  end
96
104
 
97
- def archive_url_path(package)
98
- {
99
- geolite_country_csv: "GeoIPCountryCSV.zip",
100
- geolite_city_csv: "GeoLiteCity_CSV/GeoLiteCity-latest.zip",
101
- geolite_asn_csv: "asnum/GeoIPASNum2.zip"
102
- }[package]
103
- end
104
-
105
- def base_url
106
- "http://geolite.maxmind.com/download/geoip/database/"
105
+ def base_url(edition)
106
+ "https://download.maxmind.com/app/geoip_download?edition_id=#{edition}&license_key=#{ENV['LICENSE_KEY']}&suffix=zip"
107
107
  end
108
108
  end
109
109
  end
@@ -54,7 +54,7 @@ module MaxmindTask
54
54
  end
55
55
  require 'fileutils'
56
56
  p = "geolite_#{package}_csv".intern
57
- archive_filename = Geocoder::MaxmindDatabase.archive_filename(p)
57
+ archive_filename = "#{Geocoder::MaxmindDatabase.archive_edition(p)}.zip"
58
58
  Zip::File.open(File.join(options[:dir], archive_filename)).each do |entry|
59
59
  filepath = File.join(options[:dir], entry.name)
60
60
  if File.exist? filepath