graticule 2.5.0 → 2.6.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 +4 -4
- data/.travis.yml +9 -4
- data/CHANGELOG.txt +3 -0
- data/Gemfile +2 -1
- data/graticule.gemspec +0 -1
- data/lib/graticule/geocoder/geonames.rb +8 -3
- data/lib/graticule/geocoder/google.rb +2 -2
- data/lib/graticule/geocoder/mapbox.rb +12 -69
- data/lib/graticule/version.rb +1 -1
- data/test/fixtures/responses/mapbox/empty_results.json +8 -1
- data/test/fixtures/responses/mapbox/no_results.json +8 -1
- data/test/fixtures/responses/mapbox/success.json +229 -1
- data/test/graticule/geocoder/geonames_test.rb +1 -8
- data/test/graticule/geocoder/mapbox_test.rb +14 -12
- metadata +3 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 91485c3b1e3be348db8ebfaafa69e7ce5b47f613
|
4
|
+
data.tar.gz: 60d765a0b7303994a982035ff0e0370ac36d02c6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 00eb32e2692ceae1a75b517c91b7ee73c0f7c360c3c95ab217af12cdde92a3c3532f52f1df28d658c7c9d260fdf3e497f1e860797d11abdbbb1fb1ae6435ae8d
|
7
|
+
data.tar.gz: f521c98c1472fcfd8331c22c9d593478b8136385047e4a7c3bc4dd4d690d690258ab4b47ad926a7f44eb5691f5d1b7c0c14d143dbac26fa3046442c9cbb397fc
|
data/.travis.yml
CHANGED
@@ -1,17 +1,22 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 1
|
4
|
-
- 2.
|
5
|
-
- 2.
|
3
|
+
- 2.1
|
4
|
+
- 2.2.4
|
5
|
+
- 2.3.0
|
6
|
+
- ruby-head
|
6
7
|
before_install:
|
7
8
|
- sudo apt-get install libxslt-dev libxml2-dev
|
9
|
+
- gem install bundler
|
8
10
|
before_script:
|
9
11
|
- cp test/config.yml.default test/config.yml
|
10
12
|
only:
|
11
13
|
- master
|
14
|
+
matrix:
|
15
|
+
allow_failures:
|
16
|
+
- rvm: ruby-head
|
12
17
|
notifications:
|
13
18
|
email: false
|
14
19
|
webhooks:
|
15
20
|
urls:
|
16
21
|
- http://buildlight.collectiveidea.com/
|
17
|
-
on_start:
|
22
|
+
on_start: always
|
data/CHANGELOG.txt
CHANGED
data/Gemfile
CHANGED
data/graticule.gemspec
CHANGED
@@ -3,12 +3,17 @@ module Graticule #:nodoc:
|
|
3
3
|
module Geocoder #:nodoc:
|
4
4
|
class Geonames < Base
|
5
5
|
|
6
|
-
def initialize
|
7
|
-
@url = URI.parse
|
6
|
+
def initialize(username)
|
7
|
+
@url = URI.parse('http://ws.geonames.org/timezone')
|
8
|
+
@username = URI.encode(username)
|
8
9
|
end
|
9
10
|
|
10
11
|
def time_zone(location)
|
11
|
-
get :formatted => 'true',
|
12
|
+
get :formatted => 'true',
|
13
|
+
:style => 'full',
|
14
|
+
:lat => location.latitude,
|
15
|
+
:lng => location.longitude,
|
16
|
+
:username => @username
|
12
17
|
end
|
13
18
|
|
14
19
|
private
|
@@ -44,8 +44,8 @@ module Graticule #:nodoc:
|
|
44
44
|
@street_number = component["short_name"]
|
45
45
|
when "route"
|
46
46
|
@route = component["short_name"]
|
47
|
-
when "locality"
|
48
|
-
@locality = component["long_name"]
|
47
|
+
when "locality", "sublocality"
|
48
|
+
@locality = component["long_name"]
|
49
49
|
when "administrative_area_level_1"
|
50
50
|
@region = component["short_name"]
|
51
51
|
when "country"
|
@@ -1,7 +1,7 @@
|
|
1
|
-
module Graticule
|
2
|
-
module Geocoder
|
1
|
+
module Graticule #:nodoc:
|
2
|
+
module Geocoder #:nodoc:
|
3
3
|
class Mapbox < Base
|
4
|
-
BASE_URL = "http://api.
|
4
|
+
BASE_URL = "http://api.mapbox.com/geocoding/v5/mapbox.places"
|
5
5
|
|
6
6
|
def initialize(api_key)
|
7
7
|
@api_key = api_key
|
@@ -13,76 +13,25 @@ module Graticule
|
|
13
13
|
|
14
14
|
protected
|
15
15
|
|
16
|
-
# A result looks like:
|
17
|
-
# [
|
18
|
-
# {
|
19
|
-
# "id"=>"address.110173544177",
|
20
|
-
# "lon"=>-122.02912,
|
21
|
-
# "lat"=>37.33054,
|
22
|
-
# "name"=>"1 Infinite Loop",
|
23
|
-
# "type"=>"address"
|
24
|
-
# }, {
|
25
|
-
# "id"=>"mapbox-places.95014",
|
26
|
-
# "name"=>"Cupertino",
|
27
|
-
# "type"=>"city"
|
28
|
-
# }, {
|
29
|
-
# "id"=>"province.1112151813",
|
30
|
-
# "name"=>"California",
|
31
|
-
# "type"=>"province"
|
32
|
-
# }, {
|
33
|
-
# "id"=>"country.4150104525",
|
34
|
-
# "name"=>"United States",
|
35
|
-
# "type"=>"country"
|
36
|
-
# }
|
37
|
-
# ]
|
38
16
|
class Result
|
39
|
-
attr_accessor :lat, :lon, :
|
17
|
+
attr_accessor :lat, :lon, :precision
|
40
18
|
|
41
|
-
def initialize(
|
19
|
+
def initialize(attributes)
|
42
20
|
self.precision = ::Graticule::Precision::Unknown
|
43
|
-
self.
|
44
|
-
self.
|
45
|
-
|
46
|
-
input.each do |tuple|
|
47
|
-
case tuple["type"]
|
48
|
-
when "zipcode"
|
49
|
-
self.postal_code = tuple["name"]
|
50
|
-
set_higher_precision(::Graticule::Precision::PostalCode)
|
51
|
-
when "address"
|
52
|
-
self.address = tuple["name"]
|
53
|
-
set_higher_precision(::Graticule::Precision::Address)
|
54
|
-
when "city"
|
55
|
-
self.city = tuple["name"]
|
56
|
-
set_higher_precision(::Graticule::Precision::Locality)
|
57
|
-
self.postal_code = tuple["id"].split(".")[1]
|
58
|
-
when "province"
|
59
|
-
self.province = tuple["name"]
|
60
|
-
set_higher_precision(::Graticule::Precision::Region)
|
61
|
-
when "country"
|
62
|
-
self.country = tuple["name"]
|
63
|
-
set_higher_precision(::Graticule::Precision::Country)
|
64
|
-
end
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
private
|
69
|
-
|
70
|
-
def set_higher_precision(p)
|
71
|
-
if self.precision < p
|
72
|
-
self.precision = p
|
73
|
-
end
|
21
|
+
self.lon = attributes["center"][0]
|
22
|
+
self.lat = attributes["center"][1]
|
74
23
|
end
|
75
24
|
end
|
76
25
|
|
77
26
|
def make_url(params)
|
78
27
|
query = URI.escape(params[:q].to_s)
|
79
|
-
url
|
28
|
+
url = "#{BASE_URL}/#{query}.json?access_token=#{@api_key}"
|
80
29
|
|
81
30
|
URI.parse(url)
|
82
31
|
end
|
83
32
|
|
84
33
|
def check_error(response)
|
85
|
-
raise AddressError, 'unknown address' if (response["
|
34
|
+
raise AddressError, 'unknown address' if (response["features"].nil? || response["features"].empty?)
|
86
35
|
end
|
87
36
|
|
88
37
|
def prepare_response(response)
|
@@ -91,17 +40,11 @@ module Graticule
|
|
91
40
|
|
92
41
|
def parse_response(response)
|
93
42
|
# Pull data from the first result since we get a bunch
|
94
|
-
result = Result.new(response["
|
43
|
+
result = Result.new(response["features"][0])
|
95
44
|
|
96
45
|
Location.new(
|
97
|
-
:latitude
|
98
|
-
:longitude
|
99
|
-
:street => result.address,
|
100
|
-
:locality => result.city,
|
101
|
-
:region => result.province,
|
102
|
-
:postal_code => result.postal_code,
|
103
|
-
:country => result.country,
|
104
|
-
:precision => result.precision
|
46
|
+
:latitude => result.lat,
|
47
|
+
:longitude => result.lon,
|
105
48
|
)
|
106
49
|
end
|
107
50
|
end
|
data/lib/graticule/version.rb
CHANGED
@@ -1 +1,8 @@
|
|
1
|
-
{
|
1
|
+
{
|
2
|
+
"type": "FeatureCollection",
|
3
|
+
"query": [
|
4
|
+
"asdfjkl"
|
5
|
+
],
|
6
|
+
"features": [],
|
7
|
+
"attribution": "NOTICE: © 2017 Mapbox and its suppliers. All rights reserved. Use of this data is subject to the Mapbox Terms of Service (https://www.mapbox.com/about/maps/). This response and the information it contains may not be retained."
|
8
|
+
}
|
@@ -1 +1,8 @@
|
|
1
|
-
{
|
1
|
+
{
|
2
|
+
"type": "FeatureCollection",
|
3
|
+
"query": [
|
4
|
+
"asdfjkl"
|
5
|
+
],
|
6
|
+
"features": [],
|
7
|
+
"attribution": "NOTICE: © 2017 Mapbox and its suppliers. All rights reserved. Use of this data is subject to the Mapbox Terms of Service (https://www.mapbox.com/about/maps/). This response and the information it contains may not be retained."
|
8
|
+
}
|
@@ -1 +1,229 @@
|
|
1
|
-
{
|
1
|
+
{
|
2
|
+
"type": "FeatureCollection",
|
3
|
+
"query": [
|
4
|
+
"1",
|
5
|
+
"infinite",
|
6
|
+
"loop",
|
7
|
+
"cupertino",
|
8
|
+
"ca"
|
9
|
+
],
|
10
|
+
"features": [
|
11
|
+
{
|
12
|
+
"id": "address.6395221899832142",
|
13
|
+
"type": "Feature",
|
14
|
+
"place_type": [
|
15
|
+
"address"
|
16
|
+
],
|
17
|
+
"relevance": 1,
|
18
|
+
"properties": {},
|
19
|
+
"text": "Infinite Loop",
|
20
|
+
"place_name": "1 Infinite Loop, Cupertino, California 95014, United States",
|
21
|
+
"center": [
|
22
|
+
-122.03023,
|
23
|
+
37.331524
|
24
|
+
],
|
25
|
+
"geometry": {
|
26
|
+
"type": "Point",
|
27
|
+
"coordinates": [
|
28
|
+
-122.03023,
|
29
|
+
37.331524
|
30
|
+
]
|
31
|
+
},
|
32
|
+
"address": "1",
|
33
|
+
"context": [
|
34
|
+
{
|
35
|
+
"id": "postcode.17583069324210830",
|
36
|
+
"text": "95014"
|
37
|
+
},
|
38
|
+
{
|
39
|
+
"id": "place.8489369485676010",
|
40
|
+
"wikidata": "Q189471",
|
41
|
+
"text": "Cupertino"
|
42
|
+
},
|
43
|
+
{
|
44
|
+
"id": "region.3591",
|
45
|
+
"short_code": "US-CA",
|
46
|
+
"wikidata": "Q99",
|
47
|
+
"text": "California"
|
48
|
+
},
|
49
|
+
{
|
50
|
+
"id": "country.3145",
|
51
|
+
"short_code": "us",
|
52
|
+
"wikidata": "Q30",
|
53
|
+
"text": "United States"
|
54
|
+
}
|
55
|
+
]
|
56
|
+
},
|
57
|
+
{
|
58
|
+
"id": "place.8489369485676010",
|
59
|
+
"type": "Feature",
|
60
|
+
"place_type": [
|
61
|
+
"place"
|
62
|
+
],
|
63
|
+
"relevance": 0.5,
|
64
|
+
"properties": {
|
65
|
+
"wikidata": "Q189471"
|
66
|
+
},
|
67
|
+
"text": "Cupertino",
|
68
|
+
"place_name": "Cupertino, California, United States",
|
69
|
+
"bbox": [
|
70
|
+
-122.143825004601,
|
71
|
+
37.2479929816717,
|
72
|
+
-121.995539980292,
|
73
|
+
37.3415970152769
|
74
|
+
],
|
75
|
+
"center": [
|
76
|
+
-122.0323,
|
77
|
+
37.323
|
78
|
+
],
|
79
|
+
"geometry": {
|
80
|
+
"type": "Point",
|
81
|
+
"coordinates": [
|
82
|
+
-122.0323,
|
83
|
+
37.323
|
84
|
+
]
|
85
|
+
},
|
86
|
+
"context": [
|
87
|
+
{
|
88
|
+
"id": "region.3591",
|
89
|
+
"short_code": "US-CA",
|
90
|
+
"wikidata": "Q99",
|
91
|
+
"text": "California"
|
92
|
+
},
|
93
|
+
{
|
94
|
+
"id": "country.3145",
|
95
|
+
"short_code": "us",
|
96
|
+
"wikidata": "Q30",
|
97
|
+
"text": "United States"
|
98
|
+
}
|
99
|
+
]
|
100
|
+
},
|
101
|
+
{
|
102
|
+
"id": "neighborhood.285073",
|
103
|
+
"type": "Feature",
|
104
|
+
"place_type": [
|
105
|
+
"neighborhood"
|
106
|
+
],
|
107
|
+
"relevance": 0.49,
|
108
|
+
"properties": {},
|
109
|
+
"text": "Calvert",
|
110
|
+
"place_name": "Calvert, Cupertino, California 95014, United States",
|
111
|
+
"bbox": [
|
112
|
+
-122.024501,
|
113
|
+
37.316342,
|
114
|
+
-121.986694,
|
115
|
+
37.331914
|
116
|
+
],
|
117
|
+
"center": [
|
118
|
+
-122.0138,
|
119
|
+
37.3258
|
120
|
+
],
|
121
|
+
"geometry": {
|
122
|
+
"type": "Point",
|
123
|
+
"coordinates": [
|
124
|
+
-122.0138,
|
125
|
+
37.3258
|
126
|
+
]
|
127
|
+
},
|
128
|
+
"context": [
|
129
|
+
{
|
130
|
+
"id": "postcode.17583069324210830",
|
131
|
+
"text": "95014"
|
132
|
+
},
|
133
|
+
{
|
134
|
+
"id": "place.8489369485676010",
|
135
|
+
"wikidata": "Q189471",
|
136
|
+
"text": "Cupertino"
|
137
|
+
},
|
138
|
+
{
|
139
|
+
"id": "region.3591",
|
140
|
+
"short_code": "US-CA",
|
141
|
+
"wikidata": "Q99",
|
142
|
+
"text": "California"
|
143
|
+
},
|
144
|
+
{
|
145
|
+
"id": "country.3145",
|
146
|
+
"short_code": "us",
|
147
|
+
"wikidata": "Q30",
|
148
|
+
"text": "United States"
|
149
|
+
}
|
150
|
+
]
|
151
|
+
},
|
152
|
+
{
|
153
|
+
"id": "country.3179",
|
154
|
+
"type": "Feature",
|
155
|
+
"place_type": [
|
156
|
+
"country"
|
157
|
+
],
|
158
|
+
"relevance": 0.3333333333333333,
|
159
|
+
"properties": {
|
160
|
+
"wikidata": "Q16",
|
161
|
+
"short_code": "ca"
|
162
|
+
},
|
163
|
+
"text": "Canada",
|
164
|
+
"place_name": "Canada",
|
165
|
+
"bbox": [
|
166
|
+
-141.10275,
|
167
|
+
39.943435,
|
168
|
+
-47.597809,
|
169
|
+
86.553514
|
170
|
+
],
|
171
|
+
"center": [
|
172
|
+
-105.750596,
|
173
|
+
55.585901
|
174
|
+
],
|
175
|
+
"geometry": {
|
176
|
+
"type": "Point",
|
177
|
+
"coordinates": [
|
178
|
+
-105.750596,
|
179
|
+
55.585901
|
180
|
+
]
|
181
|
+
}
|
182
|
+
},
|
183
|
+
{
|
184
|
+
"id": "place.7943223081734240",
|
185
|
+
"type": "Feature",
|
186
|
+
"place_type": [
|
187
|
+
"place"
|
188
|
+
],
|
189
|
+
"relevance": 0.3333333333333333,
|
190
|
+
"properties": {
|
191
|
+
"wikidata": "Q36312"
|
192
|
+
},
|
193
|
+
"text": "Calgary",
|
194
|
+
"place_name": "Calgary, Alberta, Canada",
|
195
|
+
"bbox": [
|
196
|
+
-114.315773841495,
|
197
|
+
50.842824406804,
|
198
|
+
-113.859901837937,
|
199
|
+
51.2124248116277
|
200
|
+
],
|
201
|
+
"center": [
|
202
|
+
-114.0626,
|
203
|
+
51.0531
|
204
|
+
],
|
205
|
+
"geometry": {
|
206
|
+
"type": "Point",
|
207
|
+
"coordinates": [
|
208
|
+
-114.0626,
|
209
|
+
51.0531
|
210
|
+
]
|
211
|
+
},
|
212
|
+
"context": [
|
213
|
+
{
|
214
|
+
"id": "region.219693",
|
215
|
+
"short_code": "CA-AB",
|
216
|
+
"wikidata": "Q1951",
|
217
|
+
"text": "Alberta"
|
218
|
+
},
|
219
|
+
{
|
220
|
+
"id": "country.3179",
|
221
|
+
"short_code": "ca",
|
222
|
+
"wikidata": "Q16",
|
223
|
+
"text": "Canada"
|
224
|
+
}
|
225
|
+
]
|
226
|
+
}
|
227
|
+
],
|
228
|
+
"attribution": "NOTICE: © 2017 Mapbox and its suppliers. All rights reserved. Use of this data is subject to the Mapbox Terms of Service (https://www.mapbox.com/about/maps/). This response and the information it contains may not be retained."
|
229
|
+
}
|
@@ -7,14 +7,7 @@ module Graticule
|
|
7
7
|
def setup
|
8
8
|
URI::HTTP.responses = []
|
9
9
|
URI::HTTP.uris = []
|
10
|
-
@geocoder = Geonames.new
|
11
|
-
end
|
12
|
-
|
13
|
-
def test_time_zone
|
14
|
-
return unless prepare_response(:success)
|
15
|
-
|
16
|
-
chicago = Location.new(:latitude => 41.85, :longitude => -87.65)
|
17
|
-
assert_equal 'America/Chicago', @geocoder.time_zone(chicago)
|
10
|
+
@geocoder = Geonames.new("demo")
|
18
11
|
end
|
19
12
|
|
20
13
|
def test_time_zone
|
@@ -5,21 +5,17 @@ module Graticule
|
|
5
5
|
module Geocoder
|
6
6
|
class MapboxTest < Test::Unit::TestCase
|
7
7
|
def setup
|
8
|
+
URI::HTTP.responses = []
|
9
|
+
URI::HTTP.uris = []
|
8
10
|
@geocoder = Mapbox.new("api_key")
|
9
11
|
end
|
10
12
|
|
11
13
|
def test_locate_success
|
12
|
-
|
14
|
+
prepare_response(:success)
|
13
15
|
|
14
16
|
expected = Location.new(
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:longitude => -122.02912,
|
18
|
-
:street => "1 Infinite Loop",
|
19
|
-
:locality => "Cupertino",
|
20
|
-
:region => "California",
|
21
|
-
:postal_code => "95014",
|
22
|
-
:precision => :address
|
17
|
+
:latitude => 37.331524,
|
18
|
+
:longitude => -122.03023,
|
23
19
|
)
|
24
20
|
|
25
21
|
actual = @geocoder.locate("1 Infinite Loop, Cupertino, CA")
|
@@ -28,16 +24,22 @@ module Graticule
|
|
28
24
|
end
|
29
25
|
|
30
26
|
def test_locate_not_found
|
31
|
-
|
27
|
+
prepare_response(:empty_results)
|
32
28
|
|
33
29
|
assert_raises(AddressError) { @geocoder.locate 'asdfjkl' }
|
34
30
|
end
|
35
|
-
|
31
|
+
|
36
32
|
def test_no_results_returned
|
37
|
-
|
33
|
+
prepare_response(:no_results)
|
38
34
|
|
39
35
|
assert_raises(AddressError) { @geocoder.locate 'asdfjkl' }
|
40
36
|
end
|
37
|
+
|
38
|
+
protected
|
39
|
+
|
40
|
+
def prepare_response(id = :success)
|
41
|
+
URI::HTTP.responses << response('mapbox', id, 'json')
|
42
|
+
end
|
41
43
|
end
|
42
44
|
end
|
43
45
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graticule
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brandon Keepers
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date:
|
14
|
+
date: 2018-05-31 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: activesupport
|
@@ -55,20 +55,6 @@ dependencies:
|
|
55
55
|
- - ">="
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: 0.5.9
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: json
|
60
|
-
requirement: !ruby/object:Gem::Requirement
|
61
|
-
requirements:
|
62
|
-
- - ">="
|
63
|
-
- !ruby/object:Gem::Version
|
64
|
-
version: '0'
|
65
|
-
type: :runtime
|
66
|
-
prerelease: false
|
67
|
-
version_requirements: !ruby/object:Gem::Requirement
|
68
|
-
requirements:
|
69
|
-
- - ">="
|
70
|
-
- !ruby/object:Gem::Version
|
71
|
-
version: '0'
|
72
58
|
description: Graticule is a geocoding API that provides a common interface to all
|
73
59
|
the popular services, including Google, Yahoo, Geocoder.us, and MetaCarta.
|
74
60
|
email:
|
@@ -204,7 +190,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
204
190
|
version: '0'
|
205
191
|
requirements: []
|
206
192
|
rubyforge_project:
|
207
|
-
rubygems_version: 2.
|
193
|
+
rubygems_version: 2.6.3
|
208
194
|
signing_key:
|
209
195
|
specification_version: 4
|
210
196
|
summary: API for using all the popular geocoding services
|