geocoder 1.6.2 → 1.7.3

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 (58) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +44 -0
  3. data/LICENSE +1 -1
  4. data/README.md +328 -231
  5. data/bin/console +6 -0
  6. data/lib/generators/geocoder/config/templates/initializer.rb +7 -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 +11 -4
  12. data/lib/geocoder/configuration_hash.rb +4 -4
  13. data/lib/geocoder/ip_address.rb +8 -1
  14. data/lib/geocoder/lookup.rb +16 -2
  15. data/lib/geocoder/lookups/abstract_api.rb +46 -0
  16. data/lib/geocoder/lookups/amazon_location_service.rb +54 -0
  17. data/lib/geocoder/lookups/ban_data_gouv_fr.rb +1 -1
  18. data/lib/geocoder/lookups/base.rb +8 -2
  19. data/lib/geocoder/lookups/bing.rb +1 -1
  20. data/lib/geocoder/lookups/esri.rb +6 -0
  21. data/lib/geocoder/lookups/geoapify.rb +72 -0
  22. data/lib/geocoder/lookups/geocodio.rb +1 -1
  23. data/lib/geocoder/lookups/geoip2.rb +4 -0
  24. data/lib/geocoder/lookups/google.rb +7 -2
  25. data/lib/geocoder/lookups/google_places_details.rb +8 -14
  26. data/lib/geocoder/lookups/google_places_search.rb +28 -2
  27. data/lib/geocoder/lookups/google_premier.rb +4 -0
  28. data/lib/geocoder/lookups/ip2location.rb +10 -6
  29. data/lib/geocoder/lookups/ipdata_co.rb +1 -1
  30. data/lib/geocoder/lookups/ipqualityscore.rb +50 -0
  31. data/lib/geocoder/lookups/latlon.rb +1 -2
  32. data/lib/geocoder/lookups/maxmind_local.rb +7 -1
  33. data/lib/geocoder/lookups/melissa_street.rb +41 -0
  34. data/lib/geocoder/lookups/photon.rb +89 -0
  35. data/lib/geocoder/lookups/smarty_streets.rb +6 -1
  36. data/lib/geocoder/lookups/telize.rb +1 -1
  37. data/lib/geocoder/lookups/test.rb +4 -0
  38. data/lib/geocoder/lookups/uk_ordnance_survey_names.rb +1 -1
  39. data/lib/geocoder/lookups/yandex.rb +1 -2
  40. data/lib/geocoder/results/abstract_api.rb +146 -0
  41. data/lib/geocoder/results/amazon_location_service.rb +57 -0
  42. data/lib/geocoder/results/ban_data_gouv_fr.rb +26 -1
  43. data/lib/geocoder/results/db_ip_com.rb +1 -1
  44. data/lib/geocoder/results/esri.rb +5 -2
  45. data/lib/geocoder/results/geoapify.rb +179 -0
  46. data/lib/geocoder/results/ipqualityscore.rb +54 -0
  47. data/lib/geocoder/results/ipregistry.rb +4 -8
  48. data/lib/geocoder/results/mapbox.rb +10 -4
  49. data/lib/geocoder/results/melissa_street.rb +46 -0
  50. data/lib/geocoder/results/nationaal_georegister_nl.rb +1 -1
  51. data/lib/geocoder/results/nominatim.rb +27 -15
  52. data/lib/geocoder/results/photon.rb +119 -0
  53. data/lib/geocoder/util.rb +29 -0
  54. data/lib/geocoder/version.rb +1 -1
  55. metadata +22 -10
  56. data/examples/autoexpire_cache_dalli.rb +0 -62
  57. data/examples/autoexpire_cache_redis.rb +0 -30
  58. data/lib/hash_recursive_merge.rb +0 -73
metadata CHANGED
@@ -1,19 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geocoder
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.6.2
4
+ version: 1.7.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Reisner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-16 00:00:00.000000000 Z
11
+ date: 2022-01-17 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Provides object geocoding (by street or IP address), reverse geocoding
14
- (coordinates to street address), distance queries for ActiveRecord and Mongoid,
15
- result caching, and more. Designed for Rails but works with Sinatra and other Rack
16
- frameworks too.
13
+ description: Object geocoding (by street or IP address), reverse geocoding (coordinates
14
+ to street address), distance queries for ActiveRecord and Mongoid, result caching,
15
+ and more. Designed for Rails but works with Sinatra and other Rack frameworks too.
17
16
  email:
18
17
  - alex@alexreisner.com
19
18
  executables:
@@ -26,8 +25,6 @@ files:
26
25
  - README.md
27
26
  - bin/console
28
27
  - bin/geocode
29
- - examples/autoexpire_cache_dalli.rb
30
- - examples/autoexpire_cache_redis.rb
31
28
  - examples/cache_bypass.rb
32
29
  - examples/reverse_geocode_job.rb
33
30
  - lib/easting_northing.rb
@@ -40,6 +37,9 @@ files:
40
37
  - lib/generators/geocoder/migration_version.rb
41
38
  - lib/geocoder.rb
42
39
  - lib/geocoder/cache.rb
40
+ - lib/geocoder/cache_stores/base.rb
41
+ - lib/geocoder/cache_stores/generic.rb
42
+ - lib/geocoder/cache_stores/redis.rb
43
43
  - lib/geocoder/calculations.rb
44
44
  - lib/geocoder/cli.rb
45
45
  - lib/geocoder/configuration.rb
@@ -50,7 +50,9 @@ files:
50
50
  - lib/geocoder/kernel_logger.rb
51
51
  - lib/geocoder/logger.rb
52
52
  - lib/geocoder/lookup.rb
53
+ - lib/geocoder/lookups/abstract_api.rb
53
54
  - lib/geocoder/lookups/amap.rb
55
+ - lib/geocoder/lookups/amazon_location_service.rb
54
56
  - lib/geocoder/lookups/baidu.rb
55
57
  - lib/geocoder/lookups/baidu_ip.rb
56
58
  - lib/geocoder/lookups/ban_data_gouv_fr.rb
@@ -60,6 +62,7 @@ files:
60
62
  - lib/geocoder/lookups/dstk.rb
61
63
  - lib/geocoder/lookups/esri.rb
62
64
  - lib/geocoder/lookups/freegeoip.rb
65
+ - lib/geocoder/lookups/geoapify.rb
63
66
  - lib/geocoder/lookups/geocoder_ca.rb
64
67
  - lib/geocoder/lookups/geocodio.rb
65
68
  - lib/geocoder/lookups/geoip2.rb
@@ -74,6 +77,7 @@ files:
74
77
  - lib/geocoder/lookups/ipdata_co.rb
75
78
  - lib/geocoder/lookups/ipgeolocation.rb
76
79
  - lib/geocoder/lookups/ipinfo_io.rb
80
+ - lib/geocoder/lookups/ipqualityscore.rb
77
81
  - lib/geocoder/lookups/ipregistry.rb
78
82
  - lib/geocoder/lookups/ipstack.rb
79
83
  - lib/geocoder/lookups/latlon.rb
@@ -83,11 +87,13 @@ files:
83
87
  - lib/geocoder/lookups/maxmind.rb
84
88
  - lib/geocoder/lookups/maxmind_geoip2.rb
85
89
  - lib/geocoder/lookups/maxmind_local.rb
90
+ - lib/geocoder/lookups/melissa_street.rb
86
91
  - lib/geocoder/lookups/nationaal_georegister_nl.rb
87
92
  - lib/geocoder/lookups/nominatim.rb
88
93
  - lib/geocoder/lookups/opencagedata.rb
89
94
  - lib/geocoder/lookups/osmnames.rb
90
95
  - lib/geocoder/lookups/pelias.rb
96
+ - lib/geocoder/lookups/photon.rb
91
97
  - lib/geocoder/lookups/pickpoint.rb
92
98
  - lib/geocoder/lookups/pointpin.rb
93
99
  - lib/geocoder/lookups/postcode_anywhere_uk.rb
@@ -106,7 +112,9 @@ files:
106
112
  - lib/geocoder/query.rb
107
113
  - lib/geocoder/railtie.rb
108
114
  - lib/geocoder/request.rb
115
+ - lib/geocoder/results/abstract_api.rb
109
116
  - lib/geocoder/results/amap.rb
117
+ - lib/geocoder/results/amazon_location_service.rb
110
118
  - lib/geocoder/results/baidu.rb
111
119
  - lib/geocoder/results/baidu_ip.rb
112
120
  - lib/geocoder/results/ban_data_gouv_fr.rb
@@ -116,6 +124,7 @@ files:
116
124
  - lib/geocoder/results/dstk.rb
117
125
  - lib/geocoder/results/esri.rb
118
126
  - lib/geocoder/results/freegeoip.rb
127
+ - lib/geocoder/results/geoapify.rb
119
128
  - lib/geocoder/results/geocoder_ca.rb
120
129
  - lib/geocoder/results/geocodio.rb
121
130
  - lib/geocoder/results/geoip2.rb
@@ -130,6 +139,7 @@ files:
130
139
  - lib/geocoder/results/ipdata_co.rb
131
140
  - lib/geocoder/results/ipgeolocation.rb
132
141
  - lib/geocoder/results/ipinfo_io.rb
142
+ - lib/geocoder/results/ipqualityscore.rb
133
143
  - lib/geocoder/results/ipregistry.rb
134
144
  - lib/geocoder/results/ipstack.rb
135
145
  - lib/geocoder/results/latlon.rb
@@ -139,11 +149,13 @@ files:
139
149
  - lib/geocoder/results/maxmind.rb
140
150
  - lib/geocoder/results/maxmind_geoip2.rb
141
151
  - lib/geocoder/results/maxmind_local.rb
152
+ - lib/geocoder/results/melissa_street.rb
142
153
  - lib/geocoder/results/nationaal_georegister_nl.rb
143
154
  - lib/geocoder/results/nominatim.rb
144
155
  - lib/geocoder/results/opencagedata.rb
145
156
  - lib/geocoder/results/osmnames.rb
146
157
  - lib/geocoder/results/pelias.rb
158
+ - lib/geocoder/results/photon.rb
147
159
  - lib/geocoder/results/pickpoint.rb
148
160
  - lib/geocoder/results/pointpin.rb
149
161
  - lib/geocoder/results/postcode_anywhere_uk.rb
@@ -160,8 +172,8 @@ files:
160
172
  - lib/geocoder/stores/mongo_base.rb
161
173
  - lib/geocoder/stores/mongo_mapper.rb
162
174
  - lib/geocoder/stores/mongoid.rb
175
+ - lib/geocoder/util.rb
163
176
  - lib/geocoder/version.rb
164
- - lib/hash_recursive_merge.rb
165
177
  - lib/maxmind_database.rb
166
178
  - lib/tasks/geocoder.rake
167
179
  - lib/tasks/maxmind.rake
@@ -186,7 +198,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
198
  - !ruby/object:Gem::Version
187
199
  version: '0'
188
200
  requirements: []
189
- rubygems_version: 3.0.1
201
+ rubygems_version: 3.1.2
190
202
  signing_key:
191
203
  specification_version: 4
192
204
  summary: Complete geocoding solution for Ruby.
@@ -1,62 +0,0 @@
1
- # This class implements a cache with simple delegation to the the Dalli Memcached client
2
- # https://github.com/mperham/dalli
3
- #
4
- # A TTL is set on initialization
5
-
6
- class AutoexpireCacheDalli
7
- def initialize(store, ttl = 86400)
8
- @store = store
9
- @keys = 'GeocoderDalliClientKeys'
10
- @ttl = ttl
11
- end
12
-
13
- def [](url)
14
- res = @store.get(url)
15
- res = YAML::load(res) if res.present?
16
- res
17
- end
18
-
19
- def []=(url, value)
20
- if value.nil?
21
- del(url)
22
- else
23
- key_cache_add(url) if @store.add(url, YAML::dump(value), @ttl)
24
- end
25
- value
26
- end
27
-
28
- def keys
29
- key_cache
30
- end
31
-
32
- def del(url)
33
- key_cache_delete(url) if @store.delete(url)
34
- end
35
-
36
- private
37
-
38
- def key_cache
39
- the_keys = @store.get(@keys)
40
- if the_keys.nil?
41
- @store.add(@keys, YAML::dump([]))
42
- []
43
- else
44
- YAML::load(the_keys)
45
- end
46
- end
47
-
48
- def key_cache_add(key)
49
- @store.replace(@keys, YAML::dump(key_cache << key))
50
- end
51
-
52
- def key_cache_delete(key)
53
- tmp = key_cache
54
- tmp.delete(key)
55
- @store.replace(@keys, YAML::dump(tmp))
56
- end
57
- end
58
-
59
- # Here Dalli is set up as on Heroku using the Memcachier gem.
60
- # https://devcenter.heroku.com/articles/memcachier#ruby
61
- # On other setups you might have to specify your Memcached server in Dalli::Client.new
62
- Geocoder.configure(:cache => AutoexpireCacheDalli.new(Dalli::Client.new))
@@ -1,30 +0,0 @@
1
- # This class implements a cache with simple delegation to the Redis store, but
2
- # when it creates a key/value pair, it also sends an EXPIRE command with a TTL.
3
- # It should be fairly simple to do the same thing with Memcached.
4
- # Alternatively, this class could inherit from Redis, which would make most
5
- # of the below methods unnecessary.
6
- class AutoexpireCacheRedis
7
- def initialize(store, ttl = 86400)
8
- @store = store
9
- @ttl = ttl
10
- end
11
-
12
- def [](url)
13
- @store.get(url)
14
- end
15
-
16
- def []=(url, value)
17
- @store.set(url, value)
18
- @store.expire(url, @ttl)
19
- end
20
-
21
- def keys
22
- @store.keys
23
- end
24
-
25
- def del(url)
26
- @store.del(url)
27
- end
28
- end
29
-
30
- Geocoder.configure(:cache => AutoexpireCacheRedis.new(Redis.new))
@@ -1,73 +0,0 @@
1
- #
2
- # = Hash Recursive Merge
3
- #
4
- # Merges a Ruby Hash recursively, Also known as deep merge.
5
- # Recursive version of Hash#merge and Hash#merge!.
6
- #
7
- # Category:: Ruby
8
- # Package:: Hash
9
- # Author:: Simone Carletti <weppos@weppos.net>
10
- # Copyright:: 2007-2008 The Authors
11
- # License:: MIT License
12
- # Link:: http://www.simonecarletti.com/
13
- # Source:: http://gist.github.com/gists/6391/
14
- #
15
- module HashRecursiveMerge
16
-
17
- #
18
- # Recursive version of Hash#merge!
19
- #
20
- # Adds the contents of +other_hash+ to +hsh+,
21
- # merging entries in +hsh+ with duplicate keys with those from +other_hash+.
22
- #
23
- # Compared with Hash#merge!, this method supports nested hashes.
24
- # When both +hsh+ and +other_hash+ contains an entry with the same key,
25
- # it merges and returns the values from both arrays.
26
- #
27
- # h1 = {"a" => 100, "b" => 200, "c" => {"c1" => 12, "c2" => 14}}
28
- # h2 = {"b" => 254, "c" => {"c1" => 16, "c3" => 94}}
29
- # h1.rmerge!(h2) #=> {"a" => 100, "b" => 254, "c" => {"c1" => 16, "c2" => 14, "c3" => 94}}
30
- #
31
- # Simply using Hash#merge! would return
32
- #
33
- # h1.merge!(h2) #=> {"a" => 100, "b" = >254, "c" => {"c1" => 16, "c3" => 94}}
34
- #
35
- def rmerge!(other_hash)
36
- merge!(other_hash) do |key, oldval, newval|
37
- oldval.class == self.class ? oldval.rmerge!(newval) : newval
38
- end
39
- end
40
-
41
- #
42
- # Recursive version of Hash#merge
43
- #
44
- # Compared with Hash#merge!, this method supports nested hashes.
45
- # When both +hsh+ and +other_hash+ contains an entry with the same key,
46
- # it merges and returns the values from both arrays.
47
- #
48
- # Compared with Hash#merge, this method provides a different approch
49
- # for merging nasted hashes.
50
- # If the value of a given key is an Hash and both +other_hash+ abd +hsh
51
- # includes the same key, the value is merged instead replaced with
52
- # +other_hash+ value.
53
- #
54
- # h1 = {"a" => 100, "b" => 200, "c" => {"c1" => 12, "c2" => 14}}
55
- # h2 = {"b" => 254, "c" => {"c1" => 16, "c3" => 94}}
56
- # h1.rmerge(h2) #=> {"a" => 100, "b" => 254, "c" => {"c1" => 16, "c2" => 14, "c3" => 94}}
57
- #
58
- # Simply using Hash#merge would return
59
- #
60
- # h1.merge(h2) #=> {"a" => 100, "b" = >254, "c" => {"c1" => 16, "c3" => 94}}
61
- #
62
- def rmerge(other_hash)
63
- merge(other_hash) do |key, oldval, newval|
64
- oldval.class == self.class ? oldval.rmerge(newval) : newval
65
- end
66
- end
67
-
68
- end
69
-
70
-
71
- class Hash
72
- include HashRecursiveMerge
73
- end