geocoder 1.6.3 → 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 (53) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +39 -0
  3. data/LICENSE +1 -1
  4. data/README.md +328 -231
  5. data/lib/generators/geocoder/config/templates/initializer.rb +7 -1
  6. data/lib/geocoder/cache.rb +16 -33
  7. data/lib/geocoder/cache_stores/base.rb +40 -0
  8. data/lib/geocoder/cache_stores/generic.rb +35 -0
  9. data/lib/geocoder/cache_stores/redis.rb +34 -0
  10. data/lib/geocoder/configuration.rb +11 -4
  11. data/lib/geocoder/configuration_hash.rb +4 -4
  12. data/lib/geocoder/ip_address.rb +6 -0
  13. data/lib/geocoder/lookup.rb +16 -2
  14. data/lib/geocoder/lookups/abstract_api.rb +46 -0
  15. data/lib/geocoder/lookups/amazon_location_service.rb +54 -0
  16. data/lib/geocoder/lookups/ban_data_gouv_fr.rb +1 -1
  17. data/lib/geocoder/lookups/base.rb +8 -2
  18. data/lib/geocoder/lookups/bing.rb +1 -1
  19. data/lib/geocoder/lookups/esri.rb +4 -0
  20. data/lib/geocoder/lookups/geoapify.rb +72 -0
  21. data/lib/geocoder/lookups/geocodio.rb +1 -1
  22. data/lib/geocoder/lookups/geoip2.rb +4 -0
  23. data/lib/geocoder/lookups/google.rb +7 -2
  24. data/lib/geocoder/lookups/google_places_details.rb +8 -14
  25. data/lib/geocoder/lookups/google_places_search.rb +28 -2
  26. data/lib/geocoder/lookups/google_premier.rb +4 -0
  27. data/lib/geocoder/lookups/ip2location.rb +10 -6
  28. data/lib/geocoder/lookups/ipdata_co.rb +1 -1
  29. data/lib/geocoder/lookups/ipqualityscore.rb +50 -0
  30. data/lib/geocoder/lookups/maxmind_local.rb +7 -1
  31. data/lib/geocoder/lookups/melissa_street.rb +41 -0
  32. data/lib/geocoder/lookups/photon.rb +89 -0
  33. data/lib/geocoder/lookups/test.rb +4 -0
  34. data/lib/geocoder/lookups/uk_ordnance_survey_names.rb +1 -1
  35. data/lib/geocoder/results/abstract_api.rb +146 -0
  36. data/lib/geocoder/results/amazon_location_service.rb +57 -0
  37. data/lib/geocoder/results/ban_data_gouv_fr.rb +26 -1
  38. data/lib/geocoder/results/db_ip_com.rb +1 -1
  39. data/lib/geocoder/results/esri.rb +5 -2
  40. data/lib/geocoder/results/geoapify.rb +179 -0
  41. data/lib/geocoder/results/ipqualityscore.rb +54 -0
  42. data/lib/geocoder/results/ipregistry.rb +4 -8
  43. data/lib/geocoder/results/mapbox.rb +10 -4
  44. data/lib/geocoder/results/melissa_street.rb +46 -0
  45. data/lib/geocoder/results/nationaal_georegister_nl.rb +1 -1
  46. data/lib/geocoder/results/nominatim.rb +27 -15
  47. data/lib/geocoder/results/photon.rb +119 -0
  48. data/lib/geocoder/util.rb +29 -0
  49. data/lib/geocoder/version.rb +1 -1
  50. metadata +18 -5
  51. data/examples/autoexpire_cache_dalli.rb +0 -62
  52. data/examples/autoexpire_cache_redis.rb +0 -30
  53. data/lib/hash_recursive_merge.rb +0 -73
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.3
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-04-30 00:00:00.000000000 Z
11
+ date: 2022-01-17 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,6 @@ 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
30
28
  - examples/cache_bypass.rb
31
29
  - examples/reverse_geocode_job.rb
32
30
  - lib/easting_northing.rb
@@ -39,6 +37,9 @@ files:
39
37
  - lib/generators/geocoder/migration_version.rb
40
38
  - lib/geocoder.rb
41
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
42
43
  - lib/geocoder/calculations.rb
43
44
  - lib/geocoder/cli.rb
44
45
  - lib/geocoder/configuration.rb
@@ -49,7 +50,9 @@ files:
49
50
  - lib/geocoder/kernel_logger.rb
50
51
  - lib/geocoder/logger.rb
51
52
  - lib/geocoder/lookup.rb
53
+ - lib/geocoder/lookups/abstract_api.rb
52
54
  - lib/geocoder/lookups/amap.rb
55
+ - lib/geocoder/lookups/amazon_location_service.rb
53
56
  - lib/geocoder/lookups/baidu.rb
54
57
  - lib/geocoder/lookups/baidu_ip.rb
55
58
  - lib/geocoder/lookups/ban_data_gouv_fr.rb
@@ -59,6 +62,7 @@ files:
59
62
  - lib/geocoder/lookups/dstk.rb
60
63
  - lib/geocoder/lookups/esri.rb
61
64
  - lib/geocoder/lookups/freegeoip.rb
65
+ - lib/geocoder/lookups/geoapify.rb
62
66
  - lib/geocoder/lookups/geocoder_ca.rb
63
67
  - lib/geocoder/lookups/geocodio.rb
64
68
  - lib/geocoder/lookups/geoip2.rb
@@ -73,6 +77,7 @@ files:
73
77
  - lib/geocoder/lookups/ipdata_co.rb
74
78
  - lib/geocoder/lookups/ipgeolocation.rb
75
79
  - lib/geocoder/lookups/ipinfo_io.rb
80
+ - lib/geocoder/lookups/ipqualityscore.rb
76
81
  - lib/geocoder/lookups/ipregistry.rb
77
82
  - lib/geocoder/lookups/ipstack.rb
78
83
  - lib/geocoder/lookups/latlon.rb
@@ -82,11 +87,13 @@ files:
82
87
  - lib/geocoder/lookups/maxmind.rb
83
88
  - lib/geocoder/lookups/maxmind_geoip2.rb
84
89
  - lib/geocoder/lookups/maxmind_local.rb
90
+ - lib/geocoder/lookups/melissa_street.rb
85
91
  - lib/geocoder/lookups/nationaal_georegister_nl.rb
86
92
  - lib/geocoder/lookups/nominatim.rb
87
93
  - lib/geocoder/lookups/opencagedata.rb
88
94
  - lib/geocoder/lookups/osmnames.rb
89
95
  - lib/geocoder/lookups/pelias.rb
96
+ - lib/geocoder/lookups/photon.rb
90
97
  - lib/geocoder/lookups/pickpoint.rb
91
98
  - lib/geocoder/lookups/pointpin.rb
92
99
  - lib/geocoder/lookups/postcode_anywhere_uk.rb
@@ -105,7 +112,9 @@ files:
105
112
  - lib/geocoder/query.rb
106
113
  - lib/geocoder/railtie.rb
107
114
  - lib/geocoder/request.rb
115
+ - lib/geocoder/results/abstract_api.rb
108
116
  - lib/geocoder/results/amap.rb
117
+ - lib/geocoder/results/amazon_location_service.rb
109
118
  - lib/geocoder/results/baidu.rb
110
119
  - lib/geocoder/results/baidu_ip.rb
111
120
  - lib/geocoder/results/ban_data_gouv_fr.rb
@@ -115,6 +124,7 @@ files:
115
124
  - lib/geocoder/results/dstk.rb
116
125
  - lib/geocoder/results/esri.rb
117
126
  - lib/geocoder/results/freegeoip.rb
127
+ - lib/geocoder/results/geoapify.rb
118
128
  - lib/geocoder/results/geocoder_ca.rb
119
129
  - lib/geocoder/results/geocodio.rb
120
130
  - lib/geocoder/results/geoip2.rb
@@ -129,6 +139,7 @@ files:
129
139
  - lib/geocoder/results/ipdata_co.rb
130
140
  - lib/geocoder/results/ipgeolocation.rb
131
141
  - lib/geocoder/results/ipinfo_io.rb
142
+ - lib/geocoder/results/ipqualityscore.rb
132
143
  - lib/geocoder/results/ipregistry.rb
133
144
  - lib/geocoder/results/ipstack.rb
134
145
  - lib/geocoder/results/latlon.rb
@@ -138,11 +149,13 @@ files:
138
149
  - lib/geocoder/results/maxmind.rb
139
150
  - lib/geocoder/results/maxmind_geoip2.rb
140
151
  - lib/geocoder/results/maxmind_local.rb
152
+ - lib/geocoder/results/melissa_street.rb
141
153
  - lib/geocoder/results/nationaal_georegister_nl.rb
142
154
  - lib/geocoder/results/nominatim.rb
143
155
  - lib/geocoder/results/opencagedata.rb
144
156
  - lib/geocoder/results/osmnames.rb
145
157
  - lib/geocoder/results/pelias.rb
158
+ - lib/geocoder/results/photon.rb
146
159
  - lib/geocoder/results/pickpoint.rb
147
160
  - lib/geocoder/results/pointpin.rb
148
161
  - lib/geocoder/results/postcode_anywhere_uk.rb
@@ -159,8 +172,8 @@ files:
159
172
  - lib/geocoder/stores/mongo_base.rb
160
173
  - lib/geocoder/stores/mongo_mapper.rb
161
174
  - lib/geocoder/stores/mongoid.rb
175
+ - lib/geocoder/util.rb
162
176
  - lib/geocoder/version.rb
163
- - lib/hash_recursive_merge.rb
164
177
  - lib/maxmind_database.rb
165
178
  - lib/tasks/geocoder.rake
166
179
  - lib/tasks/maxmind.rake
@@ -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