geokit 1.13.1 → 1.14.0
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/.github/workflows/ci.yml +22 -0
- data/.hound.yml +1 -1
- data/.rubocop.yml +28 -20
- data/CHANGELOG.md +8 -0
- data/README.markdown +8 -9
- data/Rakefile +1 -1
- data/fixtures/vcr_cassettes/bing_full.yml +1 -1
- data/fixtures/vcr_cassettes/bing_full_au.yml +1 -1
- data/fixtures/vcr_cassettes/bing_full_de.yml +1 -1
- data/fixtures/vcr_cassettes/opencage_reverse_cerdanyola.yml +47 -0
- data/fixtures/vcr_cassettes/test_component_filtering_with_special_characters.yml +126 -0
- data/geokit.gemspec +4 -5
- data/lib/geokit/geo_loc.rb +8 -6
- data/lib/geokit/geocoders/bing.rb +1 -1
- data/lib/geokit/geocoders/ca_geocoder.rb +2 -1
- data/lib/geokit/geocoders/fcc.rb +1 -0
- data/lib/geokit/geocoders/google.rb +3 -1
- data/lib/geokit/geocoders/opencage.rb +4 -0
- data/lib/geokit/geocoders/openstreetmap.rb +1 -0
- data/lib/geokit/geocoders/yahoo.rb +4 -1
- data/lib/geokit/geocoders/yandex.rb +1 -1
- data/lib/geokit/geocoders.rb +12 -2
- data/lib/geokit/mappable.rb +13 -6
- data/lib/geokit/multi_geocoder.rb +1 -0
- data/lib/geokit/version.rb +1 -1
- data/test/coverage_loader.rb +1 -1
- data/test/helper.rb +1 -1
- data/test/test_bing_geocoder.rb +4 -4
- data/test/test_ca_geocoder.rb +8 -0
- data/test/test_fcc_geocoder.rb +1 -0
- data/test/{test_geoloc.rb → test_geo_loc.rb} +1 -0
- data/test/test_google_geocoder.rb +15 -1
- data/test/test_ip_api_geocoder.rb +1 -1
- data/test/test_ipstack_geocoder.rb +1 -1
- data/test/test_multi_geocoder.rb +7 -4
- data/test/test_multi_ip_geocoder.rb +3 -1
- data/test/test_opencage_geocoder.rb +34 -3
- data/test/test_openstreetmap_geocoder.rb +2 -0
- data/test/test_yandex_geocoder.rb +5 -5
- metadata +16 -19
- data/.travis.yml +0 -12
- data/fixtures/vcr_cassettes/free_geo_ip_geocode.yml +0 -36
- data/lib/geokit/geocoders/free_geo_ip.rb +0 -36
- data/test/test_free_geo_ip_geocoder.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: c61de87b4682789d1cceb478c63669cc2788f8476247314b8f481bc3382f90df
|
4
|
+
data.tar.gz: dfc7a3232b2f7ad0184660e8e5338961289a52418b08efac90eac911a84a3978
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eae3182ab6e7f4dbf337bca53288a76c5b9b71a2d32f7741bd6362605a0d9a0cec63d264cb382a026e7b05c2bee08ed4375db5b0ae7479311b2b3fdd366c80dd
|
7
|
+
data.tar.gz: a7c576f5ad8b23463e5730c79cbe0591e9cde53d0031e49e75b23903af6b9f48df87a0ce1fb5ac8472265cf7bf7ac535bc9a4c166b34931966ecd4ff44d30728
|
@@ -0,0 +1,22 @@
|
|
1
|
+
name: CI
|
2
|
+
on: [push, pull_request]
|
3
|
+
jobs:
|
4
|
+
test:
|
5
|
+
runs-on: ubuntu-latest
|
6
|
+
strategy:
|
7
|
+
matrix:
|
8
|
+
ruby: [ '2.5', '2.6', '2.7', '3.0', '3.1' ]
|
9
|
+
name: Test w/ Ruby ${{ matrix.ruby }}
|
10
|
+
steps:
|
11
|
+
- uses: actions/checkout@v2
|
12
|
+
- name: Set up Ruby ${{ matrix.ruby }}
|
13
|
+
uses: ruby/setup-ruby@v1
|
14
|
+
with:
|
15
|
+
ruby-version: ${{ matrix.ruby }}
|
16
|
+
bundler-cache: true
|
17
|
+
- name: Install dependencies
|
18
|
+
run: |
|
19
|
+
gem install bundler -v '~>1'
|
20
|
+
bundle install --jobs 4 --retry 3
|
21
|
+
- name: Test
|
22
|
+
run: bundle exec rake test
|
data/.hound.yml
CHANGED
@@ -1,2 +1,2 @@
|
|
1
|
-
|
1
|
+
rubocop:
|
2
2
|
config_file: .rubocop.yml
|
data/.rubocop.yml
CHANGED
@@ -63,7 +63,7 @@ Performance/StringReplacement:
|
|
63
63
|
- 'lib/geokit/inflectors.rb'
|
64
64
|
|
65
65
|
# Offense count: 1
|
66
|
-
|
66
|
+
Naming/AccessorMethodName:
|
67
67
|
Exclude:
|
68
68
|
- 'lib/geokit/geocoders/mapbox.rb'
|
69
69
|
|
@@ -79,7 +79,7 @@ Style/Alias:
|
|
79
79
|
|
80
80
|
# Offense count: 2
|
81
81
|
# Cop supports --auto-correct.
|
82
|
-
|
82
|
+
Layout/AlignArray:
|
83
83
|
Exclude:
|
84
84
|
- 'lib/geokit/geo_loc.rb'
|
85
85
|
|
@@ -87,7 +87,7 @@ Style/AlignArray:
|
|
87
87
|
# Cop supports --auto-correct.
|
88
88
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
89
89
|
# SupportedStyles: with_first_parameter, with_fixed_indentation
|
90
|
-
|
90
|
+
Layout/AlignParameters:
|
91
91
|
Exclude:
|
92
92
|
- 'lib/geokit/lat_lng.rb'
|
93
93
|
- 'test/test_google_geocoder.rb'
|
@@ -151,33 +151,32 @@ Style/Documentation:
|
|
151
151
|
# Cop supports --auto-correct.
|
152
152
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
153
153
|
# SupportedStyles: leading, trailing
|
154
|
-
|
154
|
+
Layout/DotPosition:
|
155
155
|
Enabled: false
|
156
156
|
|
157
157
|
# Offense count: 2
|
158
158
|
Style/DoubleNegation:
|
159
159
|
Exclude:
|
160
|
-
- 'lib/geokit/geocoders/free_geo_ip.rb'
|
161
160
|
- 'lib/geokit/geocoders/geo_plugin.rb'
|
162
161
|
|
163
162
|
# Offense count: 2
|
164
163
|
# Cop supports --auto-correct.
|
165
164
|
# Configuration parameters: AllowAdjacentOneLineDefs.
|
166
|
-
|
165
|
+
Layout/EmptyLineBetweenDefs:
|
167
166
|
Exclude:
|
168
167
|
- 'lib/geokit/geocoders.rb'
|
169
168
|
- 'lib/geokit/geocoders/opencage.rb'
|
170
169
|
|
171
170
|
# Offense count: 1
|
172
171
|
# Cop supports --auto-correct.
|
173
|
-
|
172
|
+
Layout/EmptyLines:
|
174
173
|
Exclude:
|
175
174
|
- 'test/test_google_geocoder.rb'
|
176
175
|
|
177
176
|
# Offense count: 15
|
178
177
|
# Cop supports --auto-correct.
|
179
178
|
# Configuration parameters: AllowForAlignment, ForceEqualSignAlignment.
|
180
|
-
|
179
|
+
Layout/ExtraSpacing:
|
181
180
|
Exclude:
|
182
181
|
- 'lib/geokit/geocoders/bing.rb'
|
183
182
|
- 'lib/geokit/geocoders/yahoo.rb'
|
@@ -201,7 +200,7 @@ Style/IfInsideElse:
|
|
201
200
|
# Cop supports --auto-correct.
|
202
201
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
203
202
|
# SupportedStyles: normal, rails
|
204
|
-
|
203
|
+
Layout/IndentationConsistency:
|
205
204
|
Exclude:
|
206
205
|
- 'test/test_google_geocoder.rb'
|
207
206
|
- 'test/test_openstreetmap_geocoder.rb'
|
@@ -222,7 +221,7 @@ Style/MethodCallWithoutArgsParentheses:
|
|
222
221
|
# Cop supports --auto-correct.
|
223
222
|
# Configuration parameters: EnforcedStyle, SupportedStyles, IndentationWidth.
|
224
223
|
# SupportedStyles: aligned, indented
|
225
|
-
|
224
|
+
Layout/MultilineOperationIndentation:
|
226
225
|
Enabled: false
|
227
226
|
|
228
227
|
# Offense count: 21
|
@@ -230,7 +229,6 @@ Style/MultilineOperationIndentation:
|
|
230
229
|
Style/MutableConstant:
|
231
230
|
Exclude:
|
232
231
|
- 'lib/geokit/geocoders/bing.rb'
|
233
|
-
- 'lib/geokit/geocoders/free_geo_ip.rb'
|
234
232
|
- 'lib/geokit/geocoders/geo_plugin.rb'
|
235
233
|
- 'lib/geokit/geocoders/geonames.rb'
|
236
234
|
- 'lib/geokit/geocoders/google.rb'
|
@@ -259,7 +257,7 @@ Style/ParallelAssignment:
|
|
259
257
|
# NamePrefix: is_, has_, have_
|
260
258
|
# NamePrefixBlacklist: is_, has_, have_
|
261
259
|
# NameWhitelist: is_a?
|
262
|
-
|
260
|
+
Naming/PredicateName:
|
263
261
|
Exclude:
|
264
262
|
- 'lib/geokit/geo_loc.rb'
|
265
263
|
|
@@ -285,13 +283,13 @@ Style/RescueModifier:
|
|
285
283
|
# Cop supports --auto-correct.
|
286
284
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
287
285
|
# SupportedStyles: space, no_space
|
288
|
-
|
286
|
+
Layout/SpaceAroundEqualsInParameterDefault:
|
289
287
|
Enabled: false
|
290
288
|
|
291
289
|
# Offense count: 3
|
292
290
|
# Cop supports --auto-correct.
|
293
291
|
# Configuration parameters: AllowForAlignment.
|
294
|
-
|
292
|
+
Layout/SpaceAroundOperators:
|
295
293
|
Exclude:
|
296
294
|
- 'lib/geokit/geocoders/bing.rb'
|
297
295
|
- 'lib/geokit/geocoders/yahoo.rb'
|
@@ -299,7 +297,7 @@ Style/SpaceAroundOperators:
|
|
299
297
|
# Offense count: 5
|
300
298
|
# Cop supports --auto-correct.
|
301
299
|
# Configuration parameters: AllowForAlignment.
|
302
|
-
|
300
|
+
Layout/SpaceBeforeFirstArg:
|
303
301
|
Exclude:
|
304
302
|
- 'test/test_mappable.rb'
|
305
303
|
|
@@ -307,14 +305,14 @@ Style/SpaceBeforeFirstArg:
|
|
307
305
|
# Cop supports --auto-correct.
|
308
306
|
# Configuration parameters: EnforcedStyle, EnforcedStyleForEmptyBraces, SupportedStyles.
|
309
307
|
# SupportedStyles: space, no_space
|
310
|
-
|
308
|
+
Layout/SpaceInsideHashLiteralBraces:
|
311
309
|
Enabled: false
|
312
310
|
|
313
311
|
# Offense count: 2
|
314
312
|
# Cop supports --auto-correct.
|
315
313
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
316
314
|
# SupportedStyles: space, no_space
|
317
|
-
|
315
|
+
Layout/SpaceInsideStringInterpolation:
|
318
316
|
Exclude:
|
319
317
|
- 'lib/geokit/geocoders/yahoo.rb'
|
320
318
|
|
@@ -339,11 +337,21 @@ Style/TrailingCommaInArguments:
|
|
339
337
|
# Cop supports --auto-correct.
|
340
338
|
# Configuration parameters: EnforcedStyleForMultiline, SupportedStyles.
|
341
339
|
# SupportedStyles: comma, consistent_comma, no_comma
|
342
|
-
Style/
|
340
|
+
Style/TrailingCommaInArrayLiteral:
|
341
|
+
Exclude:
|
342
|
+
- 'lib/geokit/geo_loc.rb'
|
343
|
+
- 'lib/geokit/geocoders/bing.rb'
|
344
|
+
- 'lib/geokit/geocoders/geo_plugin.rb'
|
345
|
+
- 'lib/geokit/geocoders/geocodio.rb'
|
346
|
+
- 'lib/geokit/geocoders/geonames.rb'
|
347
|
+
- 'lib/geokit/geocoders/google.rb'
|
348
|
+
- 'lib/geokit/geocoders/yahoo.rb'
|
349
|
+
- 'test/test_ipgeocoder.rb'
|
350
|
+
|
351
|
+
Style/TrailingCommaInHashLiteral:
|
343
352
|
Exclude:
|
344
353
|
- 'lib/geokit/geo_loc.rb'
|
345
354
|
- 'lib/geokit/geocoders/bing.rb'
|
346
|
-
- 'lib/geokit/geocoders/free_geo_ip.rb'
|
347
355
|
- 'lib/geokit/geocoders/geo_plugin.rb'
|
348
356
|
- 'lib/geokit/geocoders/geocodio.rb'
|
349
357
|
- 'lib/geokit/geocoders/geonames.rb'
|
@@ -354,5 +362,5 @@ Style/TrailingCommaInLiteral:
|
|
354
362
|
# Offense count: 6
|
355
363
|
# Configuration parameters: EnforcedStyle, SupportedStyles.
|
356
364
|
# SupportedStyles: snake_case, camelCase
|
357
|
-
|
365
|
+
Naming/VariableName:
|
358
366
|
Enabled: false
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
## 1.14.0
|
2
|
+
|
3
|
+
* Introduced NoSuchGeocoderError. If you try call a geocoder like :bogus that doesn't exist, an error will be returned.
|
4
|
+
* Upgraded to coveralls_reborn
|
5
|
+
* Replaced deprecated URI.escape with CGI.escape
|
6
|
+
* Fixed old mocha incompatability, now calls mocha/test_unit and not mocha/setup
|
7
|
+
* Bumped minimum Ruby version
|
8
|
+
|
1
9
|
## 1.13.1
|
2
10
|
|
3
11
|
**Existing Geocoder Changes**
|
data/README.markdown
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
Geokit
|
2
2
|
======
|
3
3
|
|
4
|
-
[](http://badge.fury.io/rb/geokit)
|
5
|
+
[](https://github.com/geokit/geokit/actions)
|
6
|
+
[](https://coveralls.io/r/geokit/geokit)
|
7
|
+
[](https://houndci.com)
|
8
|
+
[](https://codeclimate.com/github/geokit/geokit)
|
9
9
|
|
10
10
|
## DESCRIPTION
|
11
11
|
|
@@ -63,7 +63,6 @@ Combine this gem with the [geokit-rails](http://github.com/geokit/geokit-rails)
|
|
63
63
|
* RIPE
|
64
64
|
* MaxMind
|
65
65
|
* Ipstack
|
66
|
-
* freegeoip.net (deprecated, now Ipstack)
|
67
66
|
* IP-API.com
|
68
67
|
|
69
68
|
### HTTPS-supporting geocoders
|
@@ -286,7 +285,7 @@ Multi Geocoder - provides failover for the physical location geocoders, and also
|
|
286
285
|
```
|
287
286
|
|
288
287
|
## MULTIPLE RESULTS
|
289
|
-
Some geocoding services will return
|
288
|
+
Some geocoding services will return multiple results if the there isn't one clear result.
|
290
289
|
Geoloc can capture multiple results through its "all" method.
|
291
290
|
|
292
291
|
```ruby
|
@@ -314,14 +313,14 @@ between two points.
|
|
314
313
|
LatLng is a simple container for latitude and longitude, but
|
315
314
|
it's made more powerful by mixing in the above-mentioned Mappable
|
316
315
|
module -- therefore, you can calculate easily the distance between two
|
317
|
-
LatLng
|
316
|
+
LatLng objects with `distance = first.distance_to(other)`
|
318
317
|
|
319
318
|
GeoLoc represents an address or location which
|
320
319
|
has been geocoded. You can get the city, zipcode, street address, etc.
|
321
320
|
from a GeoLoc object. GeoLoc extends LatLng, so you also get lat/lng
|
322
321
|
AND the Mappable module goodness for free.
|
323
322
|
|
324
|
-
geocoders.rb contains all the geocoder
|
323
|
+
geocoders.rb contains all the geocoder implementations. All the geocoders
|
325
324
|
inherit from a common base (class Geocoder) and implement the private method
|
326
325
|
do_geocode.
|
327
326
|
|
data/Rakefile
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://dev.virtualearth.net/REST/v1/Locations/100
|
5
|
+
uri: https://dev.virtualearth.net/REST/v1/Locations/100+Spear+St,+San+Francisco,+CA,+94105-1522,+US?key=AuWcmtBIoPeOubm9BtcN44hTmWw_wNoJ5NEO2L0RaKrGAUE_nlwciKAqwapdq7k7&o=xml
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://dev.virtualearth.net/REST/v1/Locations/440
|
5
|
+
uri: https://dev.virtualearth.net/REST/v1/Locations/440+King+William+Street,+Adelaide,+Australia?key=AuWcmtBIoPeOubm9BtcN44hTmWw_wNoJ5NEO2L0RaKrGAUE_nlwciKAqwapdq7k7&o=xml
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -2,7 +2,7 @@
|
|
2
2
|
http_interactions:
|
3
3
|
- request:
|
4
4
|
method: get
|
5
|
-
uri: https://dev.virtualearth.net/REST/v1/Locations/Platz
|
5
|
+
uri: https://dev.virtualearth.net/REST/v1/Locations/Platz+der+Republik+1,+11011+Berlin,+Germany?key=AuWcmtBIoPeOubm9BtcN44hTmWw_wNoJ5NEO2L0RaKrGAUE_nlwciKAqwapdq7k7&o=xml
|
6
6
|
body:
|
7
7
|
encoding: US-ASCII
|
8
8
|
string: ''
|
@@ -0,0 +1,47 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.opencagedata.com/geocode/v1/json?key=someopencageapikey&no_annotations=1&query=41.493588,2.141879
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Date:
|
22
|
+
- Mon, 27 Jan 2020 16:52:19 GMT
|
23
|
+
Server:
|
24
|
+
- Apache
|
25
|
+
Access-Control-Allow-Origin:
|
26
|
+
- "*"
|
27
|
+
Vary:
|
28
|
+
- Accept-Encoding
|
29
|
+
Content-Length:
|
30
|
+
- '597'
|
31
|
+
Content-Type:
|
32
|
+
- application/json; charset=utf-8
|
33
|
+
Strict-Transport-Security:
|
34
|
+
- max-age=31536000; includeSubDomains; preload
|
35
|
+
body:
|
36
|
+
encoding: UTF-8
|
37
|
+
string: '{"documentation":"https://opencagedata.com/api","licenses":[{"name":"see
|
38
|
+
attribution guide","url":"https://opencagedata.com/credits"}],"results":[{"bounds":{"northeast":{"lat":41.4950264,"lng":2.1415936},"southwest":{"lat":41.4925907,"lng":2.1411986}},"components":{"ISO_3166-1_alpha-2":"ES","ISO_3166-1_alpha-3":"ESP","_category":"road","_type":"road","continent":"Europe","country":"Spain","country_code":"es","county":"Vall\u00e8s
|
39
|
+
Occidental","neighbourhood":"Sant Mart\u00ed","political_union":"European
|
40
|
+
Union","postcode":"08290","road":"Passeig de la Riera","road_type":"residential","state":"Catalonia","suburb":"Can
|
41
|
+
Costa","town":"Cerdanyola del Vall\u00e8s"},"confidence":9,"formatted":"Passeig
|
42
|
+
de la Riera, 08290 Cerdanyola del Vall\u00e8s, Spain","geometry":{"lat":41.4936783,"lng":2.1413932}}],"status":{"code":200,"message":"OK"},"stay_informed":{"blog":"https://blog.opencagedata.com","twitter":"https://twitter.com/opencagedata"},"thanks":"For
|
43
|
+
using an OpenCage API","timestamp":{"created_http":"Mon, 27 Jan 2020 16:52:19
|
44
|
+
GMT","created_unix":1580143939},"total_results":1}'
|
45
|
+
http_version:
|
46
|
+
recorded_at: Mon, 27 Jan 2020 16:52:19 GMT
|
47
|
+
recorded_with: VCR 5.0.0
|
@@ -0,0 +1,126 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://maps.google.com/maps/api/geocode/json?address=S%C3%A3o%20Paulo&components=administrative_area:s%C3%A3o%20paulo%7Ccountry:br&sensor=false
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Content-Type:
|
22
|
+
- application/json; charset=UTF-8
|
23
|
+
Date:
|
24
|
+
- Wed, 03 Apr 2019 22:15:01 GMT
|
25
|
+
Pragma:
|
26
|
+
- no-cache
|
27
|
+
Expires:
|
28
|
+
- Fri, 01 Jan 1990 00:00:00 GMT
|
29
|
+
Cache-Control:
|
30
|
+
- no-cache, must-revalidate
|
31
|
+
Vary:
|
32
|
+
- Accept-Language
|
33
|
+
Access-Control-Allow-Origin:
|
34
|
+
- "*"
|
35
|
+
Server:
|
36
|
+
- mafe
|
37
|
+
X-Xss-Protection:
|
38
|
+
- '0'
|
39
|
+
X-Frame-Options:
|
40
|
+
- SAMEORIGIN
|
41
|
+
Server-Timing:
|
42
|
+
- gfet4t7; dur=1
|
43
|
+
Alt-Svc:
|
44
|
+
- quic=":443"; ma=2592000; v="46,44,43,39"
|
45
|
+
Transfer-Encoding:
|
46
|
+
- chunked
|
47
|
+
body:
|
48
|
+
encoding: UTF-8
|
49
|
+
string: |
|
50
|
+
{
|
51
|
+
"results": [
|
52
|
+
{
|
53
|
+
"address_components": [
|
54
|
+
{
|
55
|
+
"long_name": "São Paulo",
|
56
|
+
"short_name": "São Paulo",
|
57
|
+
"types": [
|
58
|
+
"locality",
|
59
|
+
"political"
|
60
|
+
]
|
61
|
+
},
|
62
|
+
{
|
63
|
+
"long_name": "São Paulo",
|
64
|
+
"short_name": "São Paulo",
|
65
|
+
"types": [
|
66
|
+
"administrative_area_level_2",
|
67
|
+
"political"
|
68
|
+
]
|
69
|
+
},
|
70
|
+
{
|
71
|
+
"long_name": "State of São Paulo",
|
72
|
+
"short_name": "SP",
|
73
|
+
"types": [
|
74
|
+
"administrative_area_level_1",
|
75
|
+
"political"
|
76
|
+
]
|
77
|
+
},
|
78
|
+
{
|
79
|
+
"long_name": "Brazil",
|
80
|
+
"short_name": "BR",
|
81
|
+
"types": [
|
82
|
+
"country",
|
83
|
+
"political"
|
84
|
+
]
|
85
|
+
}
|
86
|
+
],
|
87
|
+
"formatted_address": "São Paulo, State of São Paulo, Brazil",
|
88
|
+
"geometry": {
|
89
|
+
"bounds": {
|
90
|
+
"northeast": {
|
91
|
+
"lat": -23.3566039,
|
92
|
+
"lng": -46.3650844
|
93
|
+
},
|
94
|
+
"southwest": {
|
95
|
+
"lat": -24.0082209,
|
96
|
+
"lng": -46.825514
|
97
|
+
}
|
98
|
+
},
|
99
|
+
"location": {
|
100
|
+
"lat": -23.5505199,
|
101
|
+
"lng": -46.63330939999999
|
102
|
+
},
|
103
|
+
"location_type": "APPROXIMATE",
|
104
|
+
"viewport": {
|
105
|
+
"northeast": {
|
106
|
+
"lat": -23.3566039,
|
107
|
+
"lng": -46.3650844
|
108
|
+
},
|
109
|
+
"southwest": {
|
110
|
+
"lat": -24.0082209,
|
111
|
+
"lng": -46.825514
|
112
|
+
}
|
113
|
+
}
|
114
|
+
},
|
115
|
+
"place_id": "ChIJ0WGkg4FEzpQRrlsz_whLqZs",
|
116
|
+
"types": [
|
117
|
+
"locality",
|
118
|
+
"political"
|
119
|
+
]
|
120
|
+
}
|
121
|
+
],
|
122
|
+
"status": "OK"
|
123
|
+
}
|
124
|
+
http_version:
|
125
|
+
recorded_at: Wed, 03 Apr 2019 22:15:01 GMT
|
126
|
+
recorded_with: VCR 4.0.0
|
data/geokit.gemspec
CHANGED
@@ -13,7 +13,6 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = 'http://github.com/geokit/geokit'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
|
-
spec.has_rdoc = true
|
17
16
|
spec.rdoc_options = ['--main', 'README.markdown']
|
18
17
|
spec.extra_rdoc_files = ['README.markdown']
|
19
18
|
|
@@ -22,9 +21,9 @@ Gem::Specification.new do |spec|
|
|
22
21
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
23
22
|
spec.require_paths = ['lib']
|
24
23
|
|
25
|
-
spec.required_ruby_version = '>=
|
26
|
-
spec.add_development_dependency 'bundler', '
|
27
|
-
spec.add_development_dependency '
|
24
|
+
spec.required_ruby_version = '>= 2.5.9'
|
25
|
+
spec.add_development_dependency 'bundler', '>= 1.0'
|
26
|
+
spec.add_development_dependency 'coveralls_reborn'
|
28
27
|
spec.add_development_dependency 'mocha'
|
29
28
|
spec.add_development_dependency 'pre-commit'
|
30
29
|
spec.add_development_dependency 'rake'
|
@@ -35,5 +34,5 @@ Gem::Specification.new do |spec|
|
|
35
34
|
spec.add_development_dependency 'typhoeus' # used in net_adapter
|
36
35
|
spec.add_development_dependency 'vcr'
|
37
36
|
# webmock 2 not yet compatible out of the box with VCR
|
38
|
-
spec.add_development_dependency 'webmock'
|
37
|
+
spec.add_development_dependency 'webmock'#, '< 2' # used in vcr
|
39
38
|
end
|
data/lib/geokit/geo_loc.rb
CHANGED
@@ -25,7 +25,7 @@ module Geokit
|
|
25
25
|
# 100 Spear St, San Francisco, CA, 94101, US
|
26
26
|
# Street number and street name are extracted from the street address
|
27
27
|
# attribute if they don't exist
|
28
|
-
attr_accessor :state_name, :state_code, :zip, :country_code, :country
|
28
|
+
attr_accessor :county, :state_name, :state_code, :zip, :country_code, :country
|
29
29
|
attr_accessor :all, :district, :sub_premise,
|
30
30
|
:neighborhood
|
31
31
|
attr_writer :state, :full_address, :street_number, :street_name, :formatted_address
|
@@ -58,6 +58,7 @@ module Geokit
|
|
58
58
|
@street_number = nil
|
59
59
|
@street_name = nil
|
60
60
|
@city = h[:city]
|
61
|
+
@county = h[:county]
|
61
62
|
@state = h[:state]
|
62
63
|
@state_code = h[:state_code]
|
63
64
|
@state_name = h[:state_name]
|
@@ -109,9 +110,9 @@ module Geokit
|
|
109
110
|
# gives you all the important fields as key-value pairs
|
110
111
|
def hash
|
111
112
|
res = {}
|
112
|
-
fields = [
|
113
|
-
|
114
|
-
|
113
|
+
fields = %i[success lat lng country_code city county state zip
|
114
|
+
street_address district provider full_address is_us?
|
115
|
+
ll precision district_fips state_fips block_fips sub_premise]
|
115
116
|
fields.each { |s| res[s] = send(s.to_s) }
|
116
117
|
res
|
117
118
|
end
|
@@ -133,8 +134,8 @@ module Geokit
|
|
133
134
|
end
|
134
135
|
|
135
136
|
# Returns a comma-delimited string consisting of the street address, city,
|
136
|
-
# state, zip, and country code.
|
137
|
-
# non-blank.
|
137
|
+
# state, zip, and country code. Only includes those attributes
|
138
|
+
# that are non-blank.
|
138
139
|
def to_geocodeable_s
|
139
140
|
a = [street_address, district, city, state, zip, country_code].compact
|
140
141
|
a.delete_if { |e| !e || e == '' }
|
@@ -156,6 +157,7 @@ module Geokit
|
|
156
157
|
["Provider: #{provider}",
|
157
158
|
"Street: #{street_address}",
|
158
159
|
"City: #{city}",
|
160
|
+
"County: #{county}",
|
159
161
|
"State: #{state}",
|
160
162
|
"Zip: #{zip}",
|
161
163
|
"Latitude: #{lat}",
|
@@ -21,7 +21,7 @@ module Geokit
|
|
21
21
|
culture = options && options[:culture]
|
22
22
|
culture_string = culture ? "&c=#{culture}" : ''
|
23
23
|
address_str = address.is_a?(GeoLoc) ? address.to_geocodeable_s : address
|
24
|
-
"#{protocol}://dev.virtualearth.net/REST/v1/Locations/#{
|
24
|
+
"#{protocol}://dev.virtualearth.net/REST/v1/Locations/#{CGI.escape(address_str)}?key=#{key}#{culture_string}&o=xml"
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.parse_xml(xml)
|
@@ -35,7 +35,8 @@ module Geokit
|
|
35
35
|
|
36
36
|
# Formats the request in the format acceptable by the CA geocoder.
|
37
37
|
def self.submit_url(loc)
|
38
|
-
|
38
|
+
loc_str = loc.is_a?(GeoLoc) ? loc.to_geocodeable_s : loc
|
39
|
+
args = ["locate=#{Geokit::Inflector.url_escape(loc_str)}"]
|
39
40
|
args << "auth=#{key}" if key
|
40
41
|
args << 'geoit=xml'
|
41
42
|
'http://geocoder.ca/?' + args.join('&')
|
data/lib/geokit/geocoders/fcc.rb
CHANGED
@@ -38,6 +38,7 @@ module Geokit
|
|
38
38
|
loc.country_code = 'US'
|
39
39
|
loc.district = results['County']['name']
|
40
40
|
loc.district_fips = results['County']['FIPS']
|
41
|
+
loc.county = results['County']['name']
|
41
42
|
loc.state = results['State']['code']
|
42
43
|
loc.state_fips = results['State']['FIPS']
|
43
44
|
loc.block_fips = results['Block']['FIPS']
|
@@ -108,7 +108,8 @@ module Geokit
|
|
108
108
|
|
109
109
|
def self.construct_components_string_from_options(components={})
|
110
110
|
unless components.empty?
|
111
|
-
|
111
|
+
escaped_components = Geokit::Inflector.url_escape(components.to_a.map { |pair| pair.join(":").downcase }.join("|"))
|
112
|
+
"&components=#{escaped_components}"
|
112
113
|
end
|
113
114
|
end
|
114
115
|
|
@@ -215,6 +216,7 @@ module Geokit
|
|
215
216
|
loc.country = comp['long_name']
|
216
217
|
when types.include?('administrative_area_level_2')
|
217
218
|
loc.district = comp['long_name']
|
219
|
+
loc.county = comp['long_name']
|
218
220
|
when types.include?('neighborhood')
|
219
221
|
loc.neighborhood = comp['short_name']
|
220
222
|
# Use either sublocality or admin area level 3 if google does not return a city
|
@@ -74,11 +74,15 @@ module Geokit
|
|
74
74
|
loc.country = address_data['country']
|
75
75
|
loc.country_code = address_data['country_code'].upcase if address_data['country_code']
|
76
76
|
loc.state_name = address_data['state']
|
77
|
+
loc.county = address_data['county']
|
77
78
|
loc.city = address_data['city']
|
79
|
+
loc.city = address_data['town'] if loc.city.nil? && address_data['town']
|
78
80
|
loc.city = address_data['county'] if loc.city.nil? && address_data['county']
|
79
81
|
loc.zip = address_data['postcode']
|
80
82
|
loc.district = address_data['city_district']
|
81
83
|
loc.district = address_data['state_district'] if loc.district.nil? && address_data['state_district']
|
84
|
+
loc.neighborhood = address_data['neighbourhood']
|
85
|
+
loc.neighborhood = address_data['suburb'] if loc.neighborhood.nil?
|
82
86
|
loc.street_address = "#{address_data['road']} #{address_data['house_number']}".strip if address_data['road']
|
83
87
|
loc.street_name = address_data['road']
|
84
88
|
loc.street_number = address_data['house_number']
|
@@ -84,6 +84,7 @@ module Geokit
|
|
84
84
|
loc.country = address_data['country']
|
85
85
|
loc.country_code = address_data['country_code'].upcase if address_data['country_code']
|
86
86
|
loc.state_name = address_data['state']
|
87
|
+
loc.county = address_data['county']
|
87
88
|
loc.city = address_data['city']
|
88
89
|
loc.city = address_data['county'] if loc.city.nil? && address_data['county']
|
89
90
|
loc.zip = address_data['postcode']
|
@@ -113,7 +113,10 @@ class OauthUtil
|
|
113
113
|
|
114
114
|
def percent_encode(string)
|
115
115
|
# ref http://snippets.dzone.com/posts/show/1260
|
116
|
-
|
116
|
+
# puts string
|
117
|
+
# puts "---------\n\n\n\n"
|
118
|
+
# (URI::Parser.new).escape(string, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")).gsub('*', '%2A')
|
119
|
+
CGI.escape(string)
|
117
120
|
end
|
118
121
|
|
119
122
|
# @ref http://oauth.net/core/1.0/#rfc.section.9.2
|