geocoder 1.6.3 → 1.7.3

Sign up to get free protection for your applications and to get access to all the features.
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