geocoder 1.6.7 → 1.7.5

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 (36) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +29 -0
  3. data/README.md +323 -205
  4. data/examples/app_defined_lookup_services.rb +22 -0
  5. data/lib/generators/geocoder/config/templates/initializer.rb +7 -1
  6. data/lib/geocoder/cache.rb +12 -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 +9 -3
  11. data/lib/geocoder/ip_address.rb +6 -0
  12. data/lib/geocoder/lookup.rb +29 -4
  13. data/lib/geocoder/lookups/amazon_location_service.rb +54 -0
  14. data/lib/geocoder/lookups/base.rb +8 -2
  15. data/lib/geocoder/lookups/bing.rb +1 -1
  16. data/lib/geocoder/lookups/freegeoip.rb +8 -6
  17. data/lib/geocoder/lookups/geoapify.rb +72 -0
  18. data/lib/geocoder/lookups/geoip2.rb +4 -0
  19. data/lib/geocoder/lookups/ip2location.rb +10 -6
  20. data/lib/geocoder/lookups/ipdata_co.rb +1 -1
  21. data/lib/geocoder/lookups/ipqualityscore.rb +50 -0
  22. data/lib/geocoder/lookups/location_iq.rb +5 -1
  23. data/lib/geocoder/lookups/melissa_street.rb +41 -0
  24. data/lib/geocoder/lookups/photon.rb +89 -0
  25. data/lib/geocoder/results/amazon_location_service.rb +57 -0
  26. data/lib/geocoder/results/esri.rb +5 -2
  27. data/lib/geocoder/results/geoapify.rb +179 -0
  28. data/lib/geocoder/results/ipqualityscore.rb +54 -0
  29. data/lib/geocoder/results/mapbox.rb +10 -4
  30. data/lib/geocoder/results/melissa_street.rb +46 -0
  31. data/lib/geocoder/results/nominatim.rb +24 -16
  32. data/lib/geocoder/results/photon.rb +119 -0
  33. data/lib/geocoder/version.rb +1 -1
  34. metadata +16 -4
  35. data/examples/autoexpire_cache_dalli.rb +0 -62
  36. data/examples/autoexpire_cache_redis.rb +0 -30
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Geocoder
2
- VERSION = "1.6.7"
2
+ VERSION = "1.7.5"
3
3
  end
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.7
4
+ version: 1.7.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alex Reisner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-17 00:00:00.000000000 Z
11
+ date: 2022-03-14 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
@@ -51,6 +53,7 @@ files:
51
53
  - lib/geocoder/lookup.rb
52
54
  - lib/geocoder/lookups/abstract_api.rb
53
55
  - lib/geocoder/lookups/amap.rb
56
+ - lib/geocoder/lookups/amazon_location_service.rb
54
57
  - lib/geocoder/lookups/baidu.rb
55
58
  - lib/geocoder/lookups/baidu_ip.rb
56
59
  - lib/geocoder/lookups/ban_data_gouv_fr.rb
@@ -60,6 +63,7 @@ files:
60
63
  - lib/geocoder/lookups/dstk.rb
61
64
  - lib/geocoder/lookups/esri.rb
62
65
  - lib/geocoder/lookups/freegeoip.rb
66
+ - lib/geocoder/lookups/geoapify.rb
63
67
  - lib/geocoder/lookups/geocoder_ca.rb
64
68
  - lib/geocoder/lookups/geocodio.rb
65
69
  - lib/geocoder/lookups/geoip2.rb
@@ -74,6 +78,7 @@ files:
74
78
  - lib/geocoder/lookups/ipdata_co.rb
75
79
  - lib/geocoder/lookups/ipgeolocation.rb
76
80
  - lib/geocoder/lookups/ipinfo_io.rb
81
+ - lib/geocoder/lookups/ipqualityscore.rb
77
82
  - lib/geocoder/lookups/ipregistry.rb
78
83
  - lib/geocoder/lookups/ipstack.rb
79
84
  - lib/geocoder/lookups/latlon.rb
@@ -83,11 +88,13 @@ files:
83
88
  - lib/geocoder/lookups/maxmind.rb
84
89
  - lib/geocoder/lookups/maxmind_geoip2.rb
85
90
  - lib/geocoder/lookups/maxmind_local.rb
91
+ - lib/geocoder/lookups/melissa_street.rb
86
92
  - lib/geocoder/lookups/nationaal_georegister_nl.rb
87
93
  - lib/geocoder/lookups/nominatim.rb
88
94
  - lib/geocoder/lookups/opencagedata.rb
89
95
  - lib/geocoder/lookups/osmnames.rb
90
96
  - lib/geocoder/lookups/pelias.rb
97
+ - lib/geocoder/lookups/photon.rb
91
98
  - lib/geocoder/lookups/pickpoint.rb
92
99
  - lib/geocoder/lookups/pointpin.rb
93
100
  - lib/geocoder/lookups/postcode_anywhere_uk.rb
@@ -108,6 +115,7 @@ files:
108
115
  - lib/geocoder/request.rb
109
116
  - lib/geocoder/results/abstract_api.rb
110
117
  - lib/geocoder/results/amap.rb
118
+ - lib/geocoder/results/amazon_location_service.rb
111
119
  - lib/geocoder/results/baidu.rb
112
120
  - lib/geocoder/results/baidu_ip.rb
113
121
  - lib/geocoder/results/ban_data_gouv_fr.rb
@@ -117,6 +125,7 @@ files:
117
125
  - lib/geocoder/results/dstk.rb
118
126
  - lib/geocoder/results/esri.rb
119
127
  - lib/geocoder/results/freegeoip.rb
128
+ - lib/geocoder/results/geoapify.rb
120
129
  - lib/geocoder/results/geocoder_ca.rb
121
130
  - lib/geocoder/results/geocodio.rb
122
131
  - lib/geocoder/results/geoip2.rb
@@ -131,6 +140,7 @@ files:
131
140
  - lib/geocoder/results/ipdata_co.rb
132
141
  - lib/geocoder/results/ipgeolocation.rb
133
142
  - lib/geocoder/results/ipinfo_io.rb
143
+ - lib/geocoder/results/ipqualityscore.rb
134
144
  - lib/geocoder/results/ipregistry.rb
135
145
  - lib/geocoder/results/ipstack.rb
136
146
  - lib/geocoder/results/latlon.rb
@@ -140,11 +150,13 @@ files:
140
150
  - lib/geocoder/results/maxmind.rb
141
151
  - lib/geocoder/results/maxmind_geoip2.rb
142
152
  - lib/geocoder/results/maxmind_local.rb
153
+ - lib/geocoder/results/melissa_street.rb
143
154
  - lib/geocoder/results/nationaal_georegister_nl.rb
144
155
  - lib/geocoder/results/nominatim.rb
145
156
  - lib/geocoder/results/opencagedata.rb
146
157
  - lib/geocoder/results/osmnames.rb
147
158
  - lib/geocoder/results/pelias.rb
159
+ - lib/geocoder/results/photon.rb
148
160
  - lib/geocoder/results/pickpoint.rb
149
161
  - lib/geocoder/results/pointpin.rb
150
162
  - lib/geocoder/results/postcode_anywhere_uk.rb
@@ -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))