geocoder 1.5.1 → 1.8.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.
- checksums.yaml +5 -5
- data/CHANGELOG.md +107 -0
- data/LICENSE +1 -1
- data/README.md +364 -243
- data/bin/console +13 -0
- data/examples/app_defined_lookup_services.rb +22 -0
- data/lib/easting_northing.rb +171 -0
- data/lib/generators/geocoder/config/templates/initializer.rb +6 -1
- data/lib/geocoder/cache.rb +16 -33
- data/lib/geocoder/cache_stores/base.rb +40 -0
- data/lib/geocoder/cache_stores/generic.rb +35 -0
- data/lib/geocoder/cache_stores/redis.rb +34 -0
- data/lib/geocoder/configuration.rb +19 -5
- data/lib/geocoder/configuration_hash.rb +4 -4
- data/lib/geocoder/ip_address.rb +11 -1
- data/lib/geocoder/lookup.rb +42 -6
- data/lib/geocoder/lookups/abstract_api.rb +46 -0
- data/lib/geocoder/lookups/amap.rb +2 -2
- data/lib/geocoder/lookups/amazon_location_service.rb +58 -0
- data/lib/geocoder/lookups/azure.rb +56 -0
- data/lib/geocoder/lookups/ban_data_gouv_fr.rb +15 -2
- data/lib/geocoder/lookups/base.rb +4 -1
- data/lib/geocoder/lookups/bing.rb +2 -2
- data/lib/geocoder/lookups/esri.rb +24 -5
- data/lib/geocoder/lookups/freegeoip.rb +12 -10
- data/lib/geocoder/lookups/geoapify.rb +78 -0
- data/lib/geocoder/lookups/geocodio.rb +1 -1
- data/lib/geocoder/lookups/geoip2.rb +4 -0
- data/lib/geocoder/lookups/geoportail_lu.rb +1 -1
- data/lib/geocoder/lookups/google.rb +7 -2
- data/lib/geocoder/lookups/google_places_details.rb +26 -12
- data/lib/geocoder/lookups/google_places_search.rb +44 -2
- data/lib/geocoder/lookups/google_premier.rb +4 -0
- data/lib/geocoder/lookups/here.rb +27 -31
- data/lib/geocoder/lookups/ip2location.rb +10 -14
- data/lib/geocoder/lookups/ip2location_io.rb +62 -0
- data/lib/geocoder/lookups/ip2location_lite.rb +40 -0
- data/lib/geocoder/lookups/ipbase.rb +49 -0
- data/lib/geocoder/lookups/ipdata_co.rb +1 -1
- data/lib/geocoder/lookups/ipgeolocation.rb +51 -0
- data/lib/geocoder/lookups/ipqualityscore.rb +50 -0
- data/lib/geocoder/lookups/ipregistry.rb +68 -0
- data/lib/geocoder/lookups/latlon.rb +1 -2
- data/lib/geocoder/lookups/location_iq.rb +5 -1
- data/lib/geocoder/lookups/mapbox.rb +3 -3
- data/lib/geocoder/lookups/maxmind_local.rb +7 -1
- data/lib/geocoder/lookups/melissa_street.rb +41 -0
- data/lib/geocoder/lookups/nationaal_georegister_nl.rb +38 -0
- data/lib/geocoder/lookups/osmnames.rb +57 -0
- data/lib/geocoder/lookups/pc_miler.rb +85 -0
- data/lib/geocoder/lookups/pdok_nl.rb +43 -0
- data/lib/geocoder/lookups/photon.rb +89 -0
- data/lib/geocoder/lookups/pickpoint.rb +1 -1
- data/lib/geocoder/lookups/smarty_streets.rb +6 -1
- data/lib/geocoder/lookups/telize.rb +1 -1
- data/lib/geocoder/lookups/tencent.rb +9 -9
- data/lib/geocoder/lookups/test.rb +5 -0
- data/lib/geocoder/lookups/twogis.rb +58 -0
- data/lib/geocoder/lookups/uk_ordnance_survey_names.rb +59 -0
- data/lib/geocoder/lookups/yandex.rb +6 -7
- data/lib/geocoder/query.rb +1 -1
- data/lib/geocoder/results/abstract_api.rb +146 -0
- data/lib/geocoder/results/amazon_location_service.rb +62 -0
- data/lib/geocoder/results/azure.rb +65 -0
- data/lib/geocoder/results/baidu.rb +0 -4
- data/lib/geocoder/results/ban_data_gouv_fr.rb +28 -3
- data/lib/geocoder/results/db_ip_com.rb +1 -1
- data/lib/geocoder/results/esri.rb +5 -2
- data/lib/geocoder/results/geoapify.rb +179 -0
- data/lib/geocoder/results/here.rb +20 -22
- data/lib/geocoder/results/ip2location_io.rb +21 -0
- data/lib/geocoder/results/ip2location_lite.rb +47 -0
- data/lib/geocoder/results/ipbase.rb +40 -0
- data/lib/geocoder/results/ipgeolocation.rb +59 -0
- data/lib/geocoder/results/ipqualityscore.rb +54 -0
- data/lib/geocoder/results/ipregistry.rb +304 -0
- data/lib/geocoder/results/mapbox.rb +34 -10
- data/lib/geocoder/results/melissa_street.rb +46 -0
- data/lib/geocoder/results/nationaal_georegister_nl.rb +62 -0
- data/lib/geocoder/results/nominatim.rb +27 -15
- data/lib/geocoder/results/osmnames.rb +56 -0
- data/lib/geocoder/results/pc_miler.rb +98 -0
- data/lib/geocoder/results/pdok_nl.rb +62 -0
- data/lib/geocoder/results/photon.rb +119 -0
- data/lib/geocoder/results/twogis.rb +76 -0
- data/lib/geocoder/results/uk_ordnance_survey_names.rb +59 -0
- data/lib/geocoder/results/yandex.rb +217 -59
- data/lib/geocoder/sql.rb +4 -4
- data/lib/geocoder/util.rb +29 -0
- data/lib/geocoder/version.rb +1 -1
- data/lib/maxmind_database.rb +12 -12
- data/lib/tasks/maxmind.rake +1 -1
- metadata +81 -23
- data/examples/autoexpire_cache_dalli.rb +0 -62
- data/examples/autoexpire_cache_redis.rb +0 -28
- data/lib/geocoder/lookups/dstk.rb +0 -22
- data/lib/geocoder/lookups/geocoder_us.rb +0 -51
- data/lib/geocoder/results/dstk.rb +0 -6
- data/lib/geocoder/results/geocoder_us.rb +0 -39
- data/lib/hash_recursive_merge.rb +0 -74
metadata
CHANGED
@@ -1,19 +1,46 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geocoder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.5
|
4
|
+
version: 1.8.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Alex Reisner
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
11
|
+
date: 2024-12-18 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: base64
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.1.0
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: csv
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 3.0.0
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 3.0.0
|
41
|
+
description: Object geocoding (by street or IP address), reverse geocoding (coordinates
|
42
|
+
to street address), distance queries for ActiveRecord and Mongoid, result caching,
|
43
|
+
and more. Designed for Rails but works with Sinatra and other Rack frameworks too.
|
17
44
|
email:
|
18
45
|
- alex@alexreisner.com
|
19
46
|
executables:
|
@@ -24,11 +51,12 @@ files:
|
|
24
51
|
- CHANGELOG.md
|
25
52
|
- LICENSE
|
26
53
|
- README.md
|
54
|
+
- bin/console
|
27
55
|
- bin/geocode
|
28
|
-
- examples/
|
29
|
-
- examples/autoexpire_cache_redis.rb
|
56
|
+
- examples/app_defined_lookup_services.rb
|
30
57
|
- examples/cache_bypass.rb
|
31
58
|
- examples/reverse_geocode_job.rb
|
59
|
+
- lib/easting_northing.rb
|
32
60
|
- lib/generators/geocoder/config/config_generator.rb
|
33
61
|
- lib/generators/geocoder/config/templates/initializer.rb
|
34
62
|
- lib/generators/geocoder/maxmind/geolite_city_generator.rb
|
@@ -38,6 +66,9 @@ files:
|
|
38
66
|
- lib/generators/geocoder/migration_version.rb
|
39
67
|
- lib/geocoder.rb
|
40
68
|
- lib/geocoder/cache.rb
|
69
|
+
- lib/geocoder/cache_stores/base.rb
|
70
|
+
- lib/geocoder/cache_stores/generic.rb
|
71
|
+
- lib/geocoder/cache_stores/redis.rb
|
41
72
|
- lib/geocoder/calculations.rb
|
42
73
|
- lib/geocoder/cli.rb
|
43
74
|
- lib/geocoder/configuration.rb
|
@@ -48,18 +79,20 @@ files:
|
|
48
79
|
- lib/geocoder/kernel_logger.rb
|
49
80
|
- lib/geocoder/logger.rb
|
50
81
|
- lib/geocoder/lookup.rb
|
82
|
+
- lib/geocoder/lookups/abstract_api.rb
|
51
83
|
- lib/geocoder/lookups/amap.rb
|
84
|
+
- lib/geocoder/lookups/amazon_location_service.rb
|
85
|
+
- lib/geocoder/lookups/azure.rb
|
52
86
|
- lib/geocoder/lookups/baidu.rb
|
53
87
|
- lib/geocoder/lookups/baidu_ip.rb
|
54
88
|
- lib/geocoder/lookups/ban_data_gouv_fr.rb
|
55
89
|
- lib/geocoder/lookups/base.rb
|
56
90
|
- lib/geocoder/lookups/bing.rb
|
57
91
|
- lib/geocoder/lookups/db_ip_com.rb
|
58
|
-
- lib/geocoder/lookups/dstk.rb
|
59
92
|
- lib/geocoder/lookups/esri.rb
|
60
93
|
- lib/geocoder/lookups/freegeoip.rb
|
94
|
+
- lib/geocoder/lookups/geoapify.rb
|
61
95
|
- lib/geocoder/lookups/geocoder_ca.rb
|
62
|
-
- lib/geocoder/lookups/geocoder_us.rb
|
63
96
|
- lib/geocoder/lookups/geocodio.rb
|
64
97
|
- lib/geocoder/lookups/geoip2.rb
|
65
98
|
- lib/geocoder/lookups/geoportail_lu.rb
|
@@ -69,9 +102,15 @@ files:
|
|
69
102
|
- lib/geocoder/lookups/google_premier.rb
|
70
103
|
- lib/geocoder/lookups/here.rb
|
71
104
|
- lib/geocoder/lookups/ip2location.rb
|
105
|
+
- lib/geocoder/lookups/ip2location_io.rb
|
106
|
+
- lib/geocoder/lookups/ip2location_lite.rb
|
72
107
|
- lib/geocoder/lookups/ipapi_com.rb
|
108
|
+
- lib/geocoder/lookups/ipbase.rb
|
73
109
|
- lib/geocoder/lookups/ipdata_co.rb
|
110
|
+
- lib/geocoder/lookups/ipgeolocation.rb
|
74
111
|
- lib/geocoder/lookups/ipinfo_io.rb
|
112
|
+
- lib/geocoder/lookups/ipqualityscore.rb
|
113
|
+
- lib/geocoder/lookups/ipregistry.rb
|
75
114
|
- lib/geocoder/lookups/ipstack.rb
|
76
115
|
- lib/geocoder/lookups/latlon.rb
|
77
116
|
- lib/geocoder/lookups/location_iq.rb
|
@@ -80,9 +119,15 @@ files:
|
|
80
119
|
- lib/geocoder/lookups/maxmind.rb
|
81
120
|
- lib/geocoder/lookups/maxmind_geoip2.rb
|
82
121
|
- lib/geocoder/lookups/maxmind_local.rb
|
122
|
+
- lib/geocoder/lookups/melissa_street.rb
|
123
|
+
- lib/geocoder/lookups/nationaal_georegister_nl.rb
|
83
124
|
- lib/geocoder/lookups/nominatim.rb
|
84
125
|
- lib/geocoder/lookups/opencagedata.rb
|
126
|
+
- lib/geocoder/lookups/osmnames.rb
|
127
|
+
- lib/geocoder/lookups/pc_miler.rb
|
128
|
+
- lib/geocoder/lookups/pdok_nl.rb
|
85
129
|
- lib/geocoder/lookups/pelias.rb
|
130
|
+
- lib/geocoder/lookups/photon.rb
|
86
131
|
- lib/geocoder/lookups/pickpoint.rb
|
87
132
|
- lib/geocoder/lookups/pointpin.rb
|
88
133
|
- lib/geocoder/lookups/postcode_anywhere_uk.rb
|
@@ -91,6 +136,8 @@ files:
|
|
91
136
|
- lib/geocoder/lookups/telize.rb
|
92
137
|
- lib/geocoder/lookups/tencent.rb
|
93
138
|
- lib/geocoder/lookups/test.rb
|
139
|
+
- lib/geocoder/lookups/twogis.rb
|
140
|
+
- lib/geocoder/lookups/uk_ordnance_survey_names.rb
|
94
141
|
- lib/geocoder/lookups/yandex.rb
|
95
142
|
- lib/geocoder/models/active_record.rb
|
96
143
|
- lib/geocoder/models/base.rb
|
@@ -100,18 +147,20 @@ files:
|
|
100
147
|
- lib/geocoder/query.rb
|
101
148
|
- lib/geocoder/railtie.rb
|
102
149
|
- lib/geocoder/request.rb
|
150
|
+
- lib/geocoder/results/abstract_api.rb
|
103
151
|
- lib/geocoder/results/amap.rb
|
152
|
+
- lib/geocoder/results/amazon_location_service.rb
|
153
|
+
- lib/geocoder/results/azure.rb
|
104
154
|
- lib/geocoder/results/baidu.rb
|
105
155
|
- lib/geocoder/results/baidu_ip.rb
|
106
156
|
- lib/geocoder/results/ban_data_gouv_fr.rb
|
107
157
|
- lib/geocoder/results/base.rb
|
108
158
|
- lib/geocoder/results/bing.rb
|
109
159
|
- lib/geocoder/results/db_ip_com.rb
|
110
|
-
- lib/geocoder/results/dstk.rb
|
111
160
|
- lib/geocoder/results/esri.rb
|
112
161
|
- lib/geocoder/results/freegeoip.rb
|
162
|
+
- lib/geocoder/results/geoapify.rb
|
113
163
|
- lib/geocoder/results/geocoder_ca.rb
|
114
|
-
- lib/geocoder/results/geocoder_us.rb
|
115
164
|
- lib/geocoder/results/geocodio.rb
|
116
165
|
- lib/geocoder/results/geoip2.rb
|
117
166
|
- lib/geocoder/results/geoportail_lu.rb
|
@@ -121,9 +170,15 @@ files:
|
|
121
170
|
- lib/geocoder/results/google_premier.rb
|
122
171
|
- lib/geocoder/results/here.rb
|
123
172
|
- lib/geocoder/results/ip2location.rb
|
173
|
+
- lib/geocoder/results/ip2location_io.rb
|
174
|
+
- lib/geocoder/results/ip2location_lite.rb
|
124
175
|
- lib/geocoder/results/ipapi_com.rb
|
176
|
+
- lib/geocoder/results/ipbase.rb
|
125
177
|
- lib/geocoder/results/ipdata_co.rb
|
178
|
+
- lib/geocoder/results/ipgeolocation.rb
|
126
179
|
- lib/geocoder/results/ipinfo_io.rb
|
180
|
+
- lib/geocoder/results/ipqualityscore.rb
|
181
|
+
- lib/geocoder/results/ipregistry.rb
|
127
182
|
- lib/geocoder/results/ipstack.rb
|
128
183
|
- lib/geocoder/results/latlon.rb
|
129
184
|
- lib/geocoder/results/location_iq.rb
|
@@ -132,9 +187,15 @@ files:
|
|
132
187
|
- lib/geocoder/results/maxmind.rb
|
133
188
|
- lib/geocoder/results/maxmind_geoip2.rb
|
134
189
|
- lib/geocoder/results/maxmind_local.rb
|
190
|
+
- lib/geocoder/results/melissa_street.rb
|
191
|
+
- lib/geocoder/results/nationaal_georegister_nl.rb
|
135
192
|
- lib/geocoder/results/nominatim.rb
|
136
193
|
- lib/geocoder/results/opencagedata.rb
|
194
|
+
- lib/geocoder/results/osmnames.rb
|
195
|
+
- lib/geocoder/results/pc_miler.rb
|
196
|
+
- lib/geocoder/results/pdok_nl.rb
|
137
197
|
- lib/geocoder/results/pelias.rb
|
198
|
+
- lib/geocoder/results/photon.rb
|
138
199
|
- lib/geocoder/results/pickpoint.rb
|
139
200
|
- lib/geocoder/results/pointpin.rb
|
140
201
|
- lib/geocoder/results/postcode_anywhere_uk.rb
|
@@ -143,6 +204,8 @@ files:
|
|
143
204
|
- lib/geocoder/results/telize.rb
|
144
205
|
- lib/geocoder/results/tencent.rb
|
145
206
|
- lib/geocoder/results/test.rb
|
207
|
+
- lib/geocoder/results/twogis.rb
|
208
|
+
- lib/geocoder/results/uk_ordnance_survey_names.rb
|
146
209
|
- lib/geocoder/results/yandex.rb
|
147
210
|
- lib/geocoder/sql.rb
|
148
211
|
- lib/geocoder/stores/active_record.rb
|
@@ -150,8 +213,8 @@ files:
|
|
150
213
|
- lib/geocoder/stores/mongo_base.rb
|
151
214
|
- lib/geocoder/stores/mongo_mapper.rb
|
152
215
|
- lib/geocoder/stores/mongoid.rb
|
216
|
+
- lib/geocoder/util.rb
|
153
217
|
- lib/geocoder/version.rb
|
154
|
-
- lib/hash_recursive_merge.rb
|
155
218
|
- lib/maxmind_database.rb
|
156
219
|
- lib/tasks/geocoder.rake
|
157
220
|
- lib/tasks/maxmind.rake
|
@@ -161,11 +224,7 @@ licenses:
|
|
161
224
|
metadata:
|
162
225
|
source_code_uri: https://github.com/alexreisner/geocoder
|
163
226
|
changelog_uri: https://github.com/alexreisner/geocoder/blob/master/CHANGELOG.md
|
164
|
-
post_install_message:
|
165
|
-
|
166
|
-
|
167
|
-
NOTE: Geocoder's default IP address lookup has changed from FreeGeoIP.net to IPInfo.io. If you explicitly specify :freegeoip in your configuration you must choose a different IP lookup before FreeGeoIP is discontinued on July 1, 2018. If you do not explicitly specify :freegeoip you do not need to change anything.
|
168
|
-
|
227
|
+
post_install_message:
|
169
228
|
rdoc_options: []
|
170
229
|
require_paths:
|
171
230
|
- lib
|
@@ -180,9 +239,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
180
239
|
- !ruby/object:Gem::Version
|
181
240
|
version: '0'
|
182
241
|
requirements: []
|
183
|
-
|
184
|
-
|
185
|
-
signing_key:
|
242
|
+
rubygems_version: 3.3.26
|
243
|
+
signing_key:
|
186
244
|
specification_version: 4
|
187
245
|
summary: Complete geocoding solution for Ruby.
|
188
246
|
test_files: []
|
@@ -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,28 +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
|
-
class AutoexpireCacheRedis
|
5
|
-
def initialize(store, ttl = 86400)
|
6
|
-
@store = store
|
7
|
-
@ttl = ttl
|
8
|
-
end
|
9
|
-
|
10
|
-
def [](url)
|
11
|
-
@store.get(url)
|
12
|
-
end
|
13
|
-
|
14
|
-
def []=(url, value)
|
15
|
-
@store.set(url, value)
|
16
|
-
@store.expire(url, @ttl)
|
17
|
-
end
|
18
|
-
|
19
|
-
def keys
|
20
|
-
@store.keys
|
21
|
-
end
|
22
|
-
|
23
|
-
def del(url)
|
24
|
-
@store.del(url)
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
Geocoder.configure(:cache => AutoexpireCacheRedis.new(Redis.new))
|
@@ -1,22 +0,0 @@
|
|
1
|
-
# More information about the Data Science Toolkit can be found at:
|
2
|
-
# http://www.datasciencetoolkit.org/. The provided APIs mimic the
|
3
|
-
# Google geocoding api.
|
4
|
-
|
5
|
-
require 'geocoder/lookups/google'
|
6
|
-
require 'geocoder/results/dstk'
|
7
|
-
|
8
|
-
module Geocoder::Lookup
|
9
|
-
class Dstk < Google
|
10
|
-
|
11
|
-
def name
|
12
|
-
"Data Science Toolkit"
|
13
|
-
end
|
14
|
-
|
15
|
-
private # ----------------------------------------------------------------
|
16
|
-
|
17
|
-
def base_query_url(query)
|
18
|
-
host = configuration[:host] || "www.datasciencetoolkit.org"
|
19
|
-
"#{protocol}://#{host}/maps/api/geocode/json?"
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'geocoder/lookups/base'
|
2
|
-
require "geocoder/results/geocoder_us"
|
3
|
-
|
4
|
-
module Geocoder::Lookup
|
5
|
-
class GeocoderUs < Base
|
6
|
-
|
7
|
-
def name
|
8
|
-
"Geocoder.us"
|
9
|
-
end
|
10
|
-
|
11
|
-
def supported_protocols
|
12
|
-
[:http]
|
13
|
-
end
|
14
|
-
|
15
|
-
private # ----------------------------------------------------------------
|
16
|
-
|
17
|
-
def base_query_url(query)
|
18
|
-
base_query_url_with_optional_key(configuration.api_key)
|
19
|
-
end
|
20
|
-
|
21
|
-
def cache_key(query)
|
22
|
-
base_query_url_with_optional_key(nil) + url_query_string(query)
|
23
|
-
end
|
24
|
-
|
25
|
-
def base_query_url_with_optional_key(key = nil)
|
26
|
-
base = "#{protocol}://"
|
27
|
-
if configuration.api_key
|
28
|
-
base << "#{configuration.api_key}@"
|
29
|
-
end
|
30
|
-
base + "geocoder.us/member/service/csv/geocode?"
|
31
|
-
end
|
32
|
-
|
33
|
-
def results(query)
|
34
|
-
return [] unless doc = fetch_data(query)
|
35
|
-
if doc[0].to_s =~ /^(\d+)\:/
|
36
|
-
return []
|
37
|
-
else
|
38
|
-
return [doc.size == 5 ? ((doc[0..1] << nil) + doc[2..4]) : doc]
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
def query_url_params(query)
|
43
|
-
(query.text =~ /^\d{5}(?:-\d{4})?$/ ? {:zip => query} : {:address => query.sanitized_text}).merge(super)
|
44
|
-
end
|
45
|
-
|
46
|
-
def parse_raw_data(raw_data)
|
47
|
-
raw_data.chomp.split(',')
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
@@ -1,39 +0,0 @@
|
|
1
|
-
require 'geocoder/results/base'
|
2
|
-
|
3
|
-
module Geocoder::Result
|
4
|
-
class GeocoderUs < Base
|
5
|
-
def coordinates
|
6
|
-
[@data[0].to_f, @data[1].to_f]
|
7
|
-
end
|
8
|
-
|
9
|
-
def address(format = :full)
|
10
|
-
"#{street_address}, #{city}, #{state} #{postal_code}, #{country}".sub(/^[ ,]*/, "")
|
11
|
-
end
|
12
|
-
|
13
|
-
def street_address
|
14
|
-
@data[2]
|
15
|
-
end
|
16
|
-
|
17
|
-
def city
|
18
|
-
@data[3]
|
19
|
-
end
|
20
|
-
|
21
|
-
def state
|
22
|
-
@data[4]
|
23
|
-
end
|
24
|
-
|
25
|
-
alias_method :state_code, :state
|
26
|
-
|
27
|
-
def postal_code
|
28
|
-
@data[5]
|
29
|
-
end
|
30
|
-
|
31
|
-
def country
|
32
|
-
'United States'
|
33
|
-
end
|
34
|
-
|
35
|
-
def country_code
|
36
|
-
'US'
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
data/lib/hash_recursive_merge.rb
DELETED
@@ -1,74 +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
|
-
r = {}
|
64
|
-
merge(other_hash) do |key, oldval, newval|
|
65
|
-
r[key] = oldval.class == self.class ? oldval.rmerge(newval) : newval
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
|
-
|
71
|
-
|
72
|
-
class Hash
|
73
|
-
include HashRecursiveMerge
|
74
|
-
end
|