geocoder 1.6.4 → 1.8.2

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 (62) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +61 -0
  3. data/LICENSE +1 -1
  4. data/README.md +329 -235
  5. data/examples/app_defined_lookup_services.rb +22 -0
  6. data/lib/generators/geocoder/config/templates/initializer.rb +6 -1
  7. data/lib/geocoder/cache.rb +16 -33
  8. data/lib/geocoder/cache_stores/base.rb +40 -0
  9. data/lib/geocoder/cache_stores/generic.rb +35 -0
  10. data/lib/geocoder/cache_stores/redis.rb +34 -0
  11. data/lib/geocoder/configuration.rb +17 -4
  12. data/lib/geocoder/ip_address.rb +9 -0
  13. data/lib/geocoder/lookup.rb +33 -4
  14. data/lib/geocoder/lookups/abstract_api.rb +46 -0
  15. data/lib/geocoder/lookups/amap.rb +2 -2
  16. data/lib/geocoder/lookups/amazon_location_service.rb +55 -0
  17. data/lib/geocoder/lookups/ban_data_gouv_fr.rb +1 -1
  18. data/lib/geocoder/lookups/base.rb +2 -1
  19. data/lib/geocoder/lookups/bing.rb +1 -1
  20. data/lib/geocoder/lookups/esri.rb +18 -5
  21. data/lib/geocoder/lookups/freegeoip.rb +8 -6
  22. data/lib/geocoder/lookups/geoapify.rb +78 -0
  23. data/lib/geocoder/lookups/geoip2.rb +4 -0
  24. data/lib/geocoder/lookups/geoportail_lu.rb +1 -1
  25. data/lib/geocoder/lookups/google_places_details.rb +20 -0
  26. data/lib/geocoder/lookups/google_places_search.rb +20 -3
  27. data/lib/geocoder/lookups/here.rb +25 -20
  28. data/lib/geocoder/lookups/ip2location.rb +10 -6
  29. data/lib/geocoder/lookups/ipbase.rb +49 -0
  30. data/lib/geocoder/lookups/ipdata_co.rb +1 -1
  31. data/lib/geocoder/lookups/ipqualityscore.rb +50 -0
  32. data/lib/geocoder/lookups/location_iq.rb +5 -1
  33. data/lib/geocoder/lookups/maxmind_local.rb +7 -1
  34. data/lib/geocoder/lookups/melissa_street.rb +41 -0
  35. data/lib/geocoder/lookups/pc_miler.rb +85 -0
  36. data/lib/geocoder/lookups/photon.rb +89 -0
  37. data/lib/geocoder/lookups/test.rb +5 -0
  38. data/lib/geocoder/lookups/twogis.rb +58 -0
  39. data/lib/geocoder/lookups/uk_ordnance_survey_names.rb +1 -1
  40. data/lib/geocoder/lookups/yandex.rb +3 -3
  41. data/lib/geocoder/results/abstract_api.rb +146 -0
  42. data/lib/geocoder/results/amazon_location_service.rb +57 -0
  43. data/lib/geocoder/results/ban_data_gouv_fr.rb +27 -2
  44. data/lib/geocoder/results/esri.rb +5 -2
  45. data/lib/geocoder/results/geoapify.rb +179 -0
  46. data/lib/geocoder/results/here.rb +20 -25
  47. data/lib/geocoder/results/ipbase.rb +40 -0
  48. data/lib/geocoder/results/ipqualityscore.rb +54 -0
  49. data/lib/geocoder/results/ipregistry.rb +4 -8
  50. data/lib/geocoder/results/mapbox.rb +10 -4
  51. data/lib/geocoder/results/melissa_street.rb +46 -0
  52. data/lib/geocoder/results/nationaal_georegister_nl.rb +1 -1
  53. data/lib/geocoder/results/nominatim.rb +24 -16
  54. data/lib/geocoder/results/pc_miler.rb +98 -0
  55. data/lib/geocoder/results/photon.rb +119 -0
  56. data/lib/geocoder/results/twogis.rb +76 -0
  57. data/lib/geocoder/version.rb +1 -1
  58. data/lib/maxmind_database.rb +8 -8
  59. data/lib/tasks/maxmind.rake +1 -1
  60. metadata +28 -8
  61. data/examples/autoexpire_cache_dalli.rb +0 -62
  62. data/examples/autoexpire_cache_redis.rb +0 -30
@@ -0,0 +1,46 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class MelissaStreet < Base
5
+ def address(format = :full)
6
+ @data['FormattedAddress']
7
+ end
8
+
9
+ def street_address
10
+ @data['AddressLine1']
11
+ end
12
+
13
+ def suffix
14
+ @data['ThoroughfareTrailingType']
15
+ end
16
+
17
+ def number
18
+ @data['PremisesNumber']
19
+ end
20
+
21
+ def city
22
+ @data['Locality']
23
+ end
24
+
25
+ def state_code
26
+ @data['AdministrativeArea']
27
+ end
28
+ alias_method :state, :state_code
29
+
30
+ def country
31
+ @data['CountryName']
32
+ end
33
+
34
+ def country_code
35
+ @data['CountryISO3166_1_Alpha2']
36
+ end
37
+
38
+ def postal_code
39
+ @data['PostalCode']
40
+ end
41
+
42
+ def coordinates
43
+ [@data['Latitude'].to_f, @data['Longitude'].to_f]
44
+ end
45
+ end
46
+ end
@@ -8,7 +8,7 @@ module Geocoder::Result
8
8
  end
9
9
 
10
10
  def coordinates
11
- @data['centroide_ll'][6..-2].split(' ').map(&:to_f)
11
+ @data['centroide_ll'][6..-2].split(' ').map(&:to_f).reverse
12
12
  end
13
13
 
14
14
  def formatted_address
@@ -4,12 +4,12 @@ module Geocoder::Result
4
4
  class Nominatim < Base
5
5
 
6
6
  def poi
7
- return @data['address'][place_type] if @data['address'].key?(place_type)
7
+ return address_data[place_type] if address_data.key?(place_type)
8
8
  return nil
9
9
  end
10
10
 
11
11
  def house_number
12
- @data['address']['house_number']
12
+ address_data['house_number']
13
13
  end
14
14
 
15
15
  def address
@@ -18,69 +18,71 @@ module Geocoder::Result
18
18
 
19
19
  def street
20
20
  %w[road pedestrian highway].each do |key|
21
- return @data['address'][key] if @data['address'].key?(key)
21
+ return address_data[key] if address_data.key?(key)
22
22
  end
23
23
  return nil
24
24
  end
25
25
 
26
26
  def city
27
27
  %w[city town village hamlet].each do |key|
28
- return @data['address'][key] if @data['address'].key?(key)
28
+ return address_data[key] if address_data.key?(key)
29
29
  end
30
30
  return nil
31
31
  end
32
32
 
33
33
  def village
34
- @data['address']['village']
34
+ address_data['village']
35
35
  end
36
36
 
37
37
  def town
38
- @data['address']['town']
38
+ address_data['town']
39
39
  end
40
40
 
41
41
  def state
42
- @data['address']['state']
42
+ address_data['state']
43
43
  end
44
44
 
45
45
  alias_method :state_code, :state
46
46
 
47
47
  def postal_code
48
- @data['address']['postcode']
48
+ address_data['postcode']
49
49
  end
50
50
 
51
51
  def county
52
- @data['address']['county']
52
+ address_data['county']
53
53
  end
54
54
 
55
55
  def country
56
- @data['address']['country']
56
+ address_data['country']
57
57
  end
58
58
 
59
59
  def country_code
60
- @data['address']['country_code']
60
+ address_data['country_code']
61
61
  end
62
62
 
63
63
  def suburb
64
- @data['address']['suburb']
64
+ address_data['suburb']
65
65
  end
66
66
 
67
67
  def city_district
68
- @data['address']['city_district']
68
+ address_data['city_district']
69
69
  end
70
70
 
71
71
  def state_district
72
- @data['address']['state_district']
72
+ address_data['state_district']
73
73
  end
74
74
 
75
75
  def neighbourhood
76
- @data['address']['neighbourhood']
76
+ address_data['neighbourhood']
77
77
  end
78
78
 
79
79
  def municipality
80
- @data['address']['municipality']
80
+ address_data['municipality']
81
81
  end
82
82
 
83
83
  def coordinates
84
+ return [] unless @data['lat'] && @data['lon']
85
+
84
86
  [@data['lat'].to_f, @data['lon'].to_f]
85
87
  end
86
88
 
@@ -109,5 +111,11 @@ module Geocoder::Result
109
111
  end
110
112
  end
111
113
  end
114
+
115
+ private
116
+
117
+ def address_data
118
+ @data['address'] || {}
119
+ end
112
120
  end
113
121
  end
@@ -0,0 +1,98 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class PcMiler < Base
5
+ # sample response:
6
+ # https://singlesearch.alk.com/na/api/search?authToken=<TOKEN>&include=Meta&query=Feasterville
7
+ #
8
+ # {
9
+ # "Err": 0,
10
+ # "ErrString": "OK",
11
+ # "QueryConfidence": 1,
12
+ # "TimeInMilliseconds": 93,
13
+ # "GridDataVersion": "GRD_ALK.NA.2023.01.18.29.1.1",
14
+ # "CommitID": "pcmws-22.08.11.0-1778-g586da49bd1b: 05/30/2023 20:14",
15
+ # "Locations": [
16
+ # {
17
+ # "Address": {
18
+ # "StreetAddress": "",
19
+ # "LocalArea": "",
20
+ # "City": "Feasterville",
21
+ # "State": "PA",
22
+ # "StateName": "Pennsylvania",
23
+ # "Zip": "19053",
24
+ # "County": "Bucks",
25
+ # "Country": "US",
26
+ # "CountryFullName": "United States",
27
+ # "SPLC": null
28
+ # },
29
+ # "Coords": {
30
+ # "Lat": "40.150025",
31
+ # "Lon": "-75.002511"
32
+ # },
33
+ # "StreetCoords": {
34
+ # "Lat": "40.150098",
35
+ # "Lon": "-75.002827"
36
+ # },
37
+ # "Region": 4,
38
+ # "POITypeID": 0,
39
+ # "PersistentPOIID": -1,
40
+ # "SiteID": -1,
41
+ # "ResultType": 4,
42
+ # "ShortString": "Feasterville",
43
+ # "GridID": 37172748,
44
+ # "LinkID": 188,
45
+ # "Percent": 6291,
46
+ # "TimeZone": "GMT-4:00 EDT"
47
+ # }
48
+ # ]
49
+ # }
50
+
51
+ def address(format=:unused)
52
+ [street, city, state, postal_code, country]
53
+ .map { |i| i == '' ? nil : i }
54
+ .compact
55
+ .join(', ')
56
+ end
57
+
58
+ def coordinates
59
+ coords = data["Coords"] || {}
60
+ [coords["Lat"].to_f, coords["Lon"].to_f]
61
+ end
62
+
63
+ def street
64
+ address_data["StreetAddress"]
65
+ end
66
+
67
+ def city
68
+ address_data["City"]
69
+ end
70
+
71
+ def state
72
+ address_data["StateName"]
73
+ end
74
+
75
+ def state_code
76
+ address_data["State"]
77
+ end
78
+
79
+ def postal_code
80
+ address_data["Zip"]
81
+ end
82
+
83
+ def country
84
+ address_data["CountryFullName"]
85
+ end
86
+
87
+ def country_code
88
+ address_data["Country"]
89
+ end
90
+
91
+ private
92
+
93
+ def address_data
94
+ data["Address"] || {}
95
+ end
96
+ end
97
+ end
98
+
@@ -0,0 +1,119 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class Photon < Base
5
+ def name
6
+ properties['name']
7
+ end
8
+
9
+ def address(_format = :full)
10
+ parts = []
11
+ parts << name if name
12
+ parts << street_address if street_address
13
+ parts << city
14
+ parts << state if state
15
+ parts << postal_code
16
+ parts << country
17
+
18
+ parts.join(', ')
19
+ end
20
+
21
+ def street_address
22
+ return unless street
23
+ return street unless house_number
24
+
25
+ "#{house_number} #{street}"
26
+ end
27
+
28
+ def house_number
29
+ properties['housenumber']
30
+ end
31
+
32
+ def street
33
+ properties['street']
34
+ end
35
+
36
+ def postal_code
37
+ properties['postcode']
38
+ end
39
+
40
+ def city
41
+ properties['city']
42
+ end
43
+
44
+ def state
45
+ properties['state']
46
+ end
47
+
48
+ def state_code
49
+ ''
50
+ end
51
+
52
+ def country
53
+ properties['country']
54
+ end
55
+
56
+ def country_code
57
+ ''
58
+ end
59
+
60
+ def coordinates
61
+ return unless geometry
62
+ return unless geometry[:coordinates]
63
+
64
+ geometry[:coordinates].reverse
65
+ end
66
+
67
+ def geometry
68
+ return unless data['geometry']
69
+
70
+ symbol_hash data['geometry']
71
+ end
72
+
73
+ def bounds
74
+ properties['extent']
75
+ end
76
+
77
+ # Type of the result (OSM object type), one of:
78
+ #
79
+ # :node
80
+ # :way
81
+ # :relation
82
+ #
83
+ def type
84
+ {
85
+ 'N' => :node,
86
+ 'W' => :way,
87
+ 'R' => :relation
88
+ }[properties['osm_type']]
89
+ end
90
+
91
+ def osm_id
92
+ properties['osm_id']
93
+ end
94
+
95
+ # See: https://wiki.openstreetmap.org/wiki/Tags
96
+ def osm_tag
97
+ return unless properties['osm_key']
98
+ return properties['osm_key'] unless properties['osm_value']
99
+
100
+ "#{properties['osm_key']}=#{properties['osm_value']}"
101
+ end
102
+
103
+ private
104
+
105
+ def properties
106
+ @properties ||= data['properties'] || {}
107
+ end
108
+
109
+ def symbol_hash(orig_hash)
110
+ {}.tap do |result|
111
+ orig_hash.each_key do |key|
112
+ next unless orig_hash[key]
113
+
114
+ result[key.to_sym] = orig_hash[key]
115
+ end
116
+ end
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,76 @@
1
+ require 'geocoder/results/base'
2
+
3
+ module Geocoder::Result
4
+ class Twogis < Base
5
+ def coordinates
6
+ ['lat', 'lon'].map{ |i| @data['point'][i] } if @data['point']
7
+ end
8
+
9
+ def address(_format = :full)
10
+ @data['full_address_name'] || ''
11
+ end
12
+
13
+ def city
14
+ return '' unless @data['adm_div']
15
+ @data['adm_div'].select{|u| u["type"] == "city"}.first.try(:[], 'name') || ''
16
+ end
17
+
18
+ def region
19
+ return '' unless @data['adm_div']
20
+ @data['adm_div'].select{|u| u["type"] == "region"}.first.try(:[], 'name') || ''
21
+ end
22
+
23
+ def country
24
+ return '' unless @data['adm_div']
25
+ @data['adm_div'].select{|u| u["type"] == "country"}.first.try(:[], 'name') || ''
26
+ end
27
+
28
+ def district
29
+ return '' unless @data['adm_div']
30
+ @data['adm_div'].select{|u| u["type"] == "district"}.first.try(:[], 'name') || ''
31
+ end
32
+
33
+ def district_area
34
+ return '' unless @data['adm_div']
35
+ @data['adm_div'].select{|u| u["type"] == "district_area"}.first.try(:[], 'name') || ''
36
+ end
37
+
38
+ def street_address
39
+ @data['address_name'] || ''
40
+ end
41
+
42
+ def street
43
+ return '' unless @data['address_name']
44
+ @data['address_name'].split(', ').first
45
+ end
46
+
47
+ def street_number
48
+ return '' unless @data['address_name']
49
+ @data['address_name'].split(', ')[1] || ''
50
+ end
51
+
52
+ def type
53
+ @data['type'] || ''
54
+ end
55
+
56
+ def purpose_name
57
+ @data['purpose_name'] || ''
58
+ end
59
+
60
+ def building_name
61
+ @data['building_name'] || ''
62
+ end
63
+
64
+ def subtype
65
+ @data['subtype'] || ''
66
+ end
67
+
68
+ def subtype_specification
69
+ @data['subtype_specification'] || ''
70
+ end
71
+
72
+ def name
73
+ @data['name'] || ''
74
+ end
75
+ end
76
+ end
@@ -1,3 +1,3 @@
1
1
  module Geocoder
2
- VERSION = "1.6.4"
2
+ VERSION = "1.8.2"
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
@@ -94,16 +94,16 @@ module Geocoder
94
94
  base_url + archive_url_path(package)
95
95
  end
96
96
 
97
- def archive_url_path(package)
97
+ def archive_edition(package)
98
98
  {
99
- geolite_country_csv: "GeoLite2-Country-CSV.zip",
100
- geolite_city_csv: "GeoLite2-City-CSV.zip",
101
- geolite_asn_csv: "GeoLite2-ASN-CSV.zip"
99
+ geolite_country_csv: "GeoLite2-Country-CSV",
100
+ geolite_city_csv: "GeoLite2-City-CSV",
101
+ geolite_asn_csv: "GeoLite2-ASN-CSV"
102
102
  }[package]
103
103
  end
104
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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geocoder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.4
4
+ version: 1.8.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Reisner
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-10-06 00:00:00.000000000 Z
11
+ date: 2023-07-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Object geocoding (by street or IP address), reverse geocoding (coordinates
14
14
  to street address), distance queries for ActiveRecord and Mongoid, result caching,
@@ -25,8 +25,7 @@ files:
25
25
  - README.md
26
26
  - bin/console
27
27
  - bin/geocode
28
- - examples/autoexpire_cache_dalli.rb
29
- - examples/autoexpire_cache_redis.rb
28
+ - examples/app_defined_lookup_services.rb
30
29
  - examples/cache_bypass.rb
31
30
  - examples/reverse_geocode_job.rb
32
31
  - lib/easting_northing.rb
@@ -39,6 +38,9 @@ files:
39
38
  - lib/generators/geocoder/migration_version.rb
40
39
  - lib/geocoder.rb
41
40
  - lib/geocoder/cache.rb
41
+ - lib/geocoder/cache_stores/base.rb
42
+ - lib/geocoder/cache_stores/generic.rb
43
+ - lib/geocoder/cache_stores/redis.rb
42
44
  - lib/geocoder/calculations.rb
43
45
  - lib/geocoder/cli.rb
44
46
  - lib/geocoder/configuration.rb
@@ -49,7 +51,9 @@ files:
49
51
  - lib/geocoder/kernel_logger.rb
50
52
  - lib/geocoder/logger.rb
51
53
  - lib/geocoder/lookup.rb
54
+ - lib/geocoder/lookups/abstract_api.rb
52
55
  - lib/geocoder/lookups/amap.rb
56
+ - lib/geocoder/lookups/amazon_location_service.rb
53
57
  - lib/geocoder/lookups/baidu.rb
54
58
  - lib/geocoder/lookups/baidu_ip.rb
55
59
  - lib/geocoder/lookups/ban_data_gouv_fr.rb
@@ -59,6 +63,7 @@ files:
59
63
  - lib/geocoder/lookups/dstk.rb
60
64
  - lib/geocoder/lookups/esri.rb
61
65
  - lib/geocoder/lookups/freegeoip.rb
66
+ - lib/geocoder/lookups/geoapify.rb
62
67
  - lib/geocoder/lookups/geocoder_ca.rb
63
68
  - lib/geocoder/lookups/geocodio.rb
64
69
  - lib/geocoder/lookups/geoip2.rb
@@ -70,9 +75,11 @@ files:
70
75
  - lib/geocoder/lookups/here.rb
71
76
  - lib/geocoder/lookups/ip2location.rb
72
77
  - lib/geocoder/lookups/ipapi_com.rb
78
+ - lib/geocoder/lookups/ipbase.rb
73
79
  - lib/geocoder/lookups/ipdata_co.rb
74
80
  - lib/geocoder/lookups/ipgeolocation.rb
75
81
  - lib/geocoder/lookups/ipinfo_io.rb
82
+ - lib/geocoder/lookups/ipqualityscore.rb
76
83
  - lib/geocoder/lookups/ipregistry.rb
77
84
  - lib/geocoder/lookups/ipstack.rb
78
85
  - lib/geocoder/lookups/latlon.rb
@@ -82,11 +89,14 @@ files:
82
89
  - lib/geocoder/lookups/maxmind.rb
83
90
  - lib/geocoder/lookups/maxmind_geoip2.rb
84
91
  - lib/geocoder/lookups/maxmind_local.rb
92
+ - lib/geocoder/lookups/melissa_street.rb
85
93
  - lib/geocoder/lookups/nationaal_georegister_nl.rb
86
94
  - lib/geocoder/lookups/nominatim.rb
87
95
  - lib/geocoder/lookups/opencagedata.rb
88
96
  - lib/geocoder/lookups/osmnames.rb
97
+ - lib/geocoder/lookups/pc_miler.rb
89
98
  - lib/geocoder/lookups/pelias.rb
99
+ - lib/geocoder/lookups/photon.rb
90
100
  - lib/geocoder/lookups/pickpoint.rb
91
101
  - lib/geocoder/lookups/pointpin.rb
92
102
  - lib/geocoder/lookups/postcode_anywhere_uk.rb
@@ -95,6 +105,7 @@ files:
95
105
  - lib/geocoder/lookups/telize.rb
96
106
  - lib/geocoder/lookups/tencent.rb
97
107
  - lib/geocoder/lookups/test.rb
108
+ - lib/geocoder/lookups/twogis.rb
98
109
  - lib/geocoder/lookups/uk_ordnance_survey_names.rb
99
110
  - lib/geocoder/lookups/yandex.rb
100
111
  - lib/geocoder/models/active_record.rb
@@ -105,7 +116,9 @@ files:
105
116
  - lib/geocoder/query.rb
106
117
  - lib/geocoder/railtie.rb
107
118
  - lib/geocoder/request.rb
119
+ - lib/geocoder/results/abstract_api.rb
108
120
  - lib/geocoder/results/amap.rb
121
+ - lib/geocoder/results/amazon_location_service.rb
109
122
  - lib/geocoder/results/baidu.rb
110
123
  - lib/geocoder/results/baidu_ip.rb
111
124
  - lib/geocoder/results/ban_data_gouv_fr.rb
@@ -115,6 +128,7 @@ files:
115
128
  - lib/geocoder/results/dstk.rb
116
129
  - lib/geocoder/results/esri.rb
117
130
  - lib/geocoder/results/freegeoip.rb
131
+ - lib/geocoder/results/geoapify.rb
118
132
  - lib/geocoder/results/geocoder_ca.rb
119
133
  - lib/geocoder/results/geocodio.rb
120
134
  - lib/geocoder/results/geoip2.rb
@@ -126,9 +140,11 @@ files:
126
140
  - lib/geocoder/results/here.rb
127
141
  - lib/geocoder/results/ip2location.rb
128
142
  - lib/geocoder/results/ipapi_com.rb
143
+ - lib/geocoder/results/ipbase.rb
129
144
  - lib/geocoder/results/ipdata_co.rb
130
145
  - lib/geocoder/results/ipgeolocation.rb
131
146
  - lib/geocoder/results/ipinfo_io.rb
147
+ - lib/geocoder/results/ipqualityscore.rb
132
148
  - lib/geocoder/results/ipregistry.rb
133
149
  - lib/geocoder/results/ipstack.rb
134
150
  - lib/geocoder/results/latlon.rb
@@ -138,11 +154,14 @@ files:
138
154
  - lib/geocoder/results/maxmind.rb
139
155
  - lib/geocoder/results/maxmind_geoip2.rb
140
156
  - lib/geocoder/results/maxmind_local.rb
157
+ - lib/geocoder/results/melissa_street.rb
141
158
  - lib/geocoder/results/nationaal_georegister_nl.rb
142
159
  - lib/geocoder/results/nominatim.rb
143
160
  - lib/geocoder/results/opencagedata.rb
144
161
  - lib/geocoder/results/osmnames.rb
162
+ - lib/geocoder/results/pc_miler.rb
145
163
  - lib/geocoder/results/pelias.rb
164
+ - lib/geocoder/results/photon.rb
146
165
  - lib/geocoder/results/pickpoint.rb
147
166
  - lib/geocoder/results/pointpin.rb
148
167
  - lib/geocoder/results/postcode_anywhere_uk.rb
@@ -151,6 +170,7 @@ files:
151
170
  - lib/geocoder/results/telize.rb
152
171
  - lib/geocoder/results/tencent.rb
153
172
  - lib/geocoder/results/test.rb
173
+ - lib/geocoder/results/twogis.rb
154
174
  - lib/geocoder/results/uk_ordnance_survey_names.rb
155
175
  - lib/geocoder/results/yandex.rb
156
176
  - lib/geocoder/sql.rb
@@ -170,7 +190,7 @@ licenses:
170
190
  metadata:
171
191
  source_code_uri: https://github.com/alexreisner/geocoder
172
192
  changelog_uri: https://github.com/alexreisner/geocoder/blob/master/CHANGELOG.md
173
- post_install_message:
193
+ post_install_message:
174
194
  rdoc_options: []
175
195
  require_paths:
176
196
  - lib
@@ -185,8 +205,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
205
  - !ruby/object:Gem::Version
186
206
  version: '0'
187
207
  requirements: []
188
- rubygems_version: 3.1.2
189
- signing_key:
208
+ rubygems_version: 3.3.26
209
+ signing_key:
190
210
  specification_version: 4
191
211
  summary: Complete geocoding solution for Ruby.
192
212
  test_files: []