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
@@ -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))