routing 0.0.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.
@@ -0,0 +1,3 @@
1
+ class Routing
2
+ VERSION = "0.0.2"
3
+ end
data/routing.gemspec ADDED
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path('../lib/routing/version', __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Christian Bäuerlein"]
6
+ gem.email = ["christian@ffwdme.com"]
7
+ gem.summary = %q{A ruby interface for route calculation services}
8
+ gem.description = %q{
9
+ Provides a generic interface for routing services that can by used to calculate directions between geolocations.
10
+ Makes parsing and use-case specific data handling easy trough an extendable middleware stack.
11
+ }
12
+ gem.homepage = "https://github.com/flinc/routing"
13
+
14
+ gem.add_dependency "faraday", ">= 0.7.0"
15
+ gem.add_dependency "json"
16
+ gem.add_development_dependency "rspec", ">= 2.9.0"
17
+
18
+ gem.files = `git ls-files`.split($\)
19
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
20
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
21
+ gem.name = "routing"
22
+ gem.require_paths = ["lib"]
23
+ gem.version = Routing::VERSION
24
+ end
@@ -0,0 +1 @@
1
+ {"Error":{"Details":"Start and destination waypoints are the same.","type":"ApplicationError","subtype":"InvalidInputData"}}
@@ -0,0 +1,357 @@
1
+ {
2
+ "Response": {
3
+ "MetaInfo": {
4
+ "Timestamp": "2012-05-03T17:21:15.962+02:00",
5
+ "AdditionalData": [
6
+ {
7
+ "value": "2011Q1_DICI",
8
+ "key": "Map0"
9
+ },
10
+ {
11
+ "value": "routeserver,9.1-2011.07.06",
12
+ "key": "Module0"
13
+ },
14
+ {
15
+ "value": "66",
16
+ "key": "Module0ExecTime"
17
+ },
18
+ {
19
+ "value": "routing-route-service,6.2.6.0",
20
+ "key": "Service"
21
+ }
22
+ ]
23
+ },
24
+ "Route": [
25
+ {
26
+ "RouteId": "REMtZ3UAAAH-1EdCQmAPQZrUR0I5Yg9B8pzd_H3QHQmxJTAEUdEdCcEhMASR1D_xgwbwSCjZTiEI8O9IaOVOIejx_Zu_0QBdAyEDH3chSUB6fQwAew",
27
+ "Waypoint": [
28
+ {
29
+ "LinkId": "-52585230",
30
+ "MappedPosition": {
31
+ "Latitude": 49.9576187,
32
+ "Longitude": 8.9614801
33
+ },
34
+ "OriginalPosition": {
35
+ "Latitude": 49.958,
36
+ "Longitude": 8.961
37
+ },
38
+ "Type": "stopOver"
39
+ },
40
+ {
41
+ "LinkId": "-61868764",
42
+ "MappedPosition": {
43
+ "Latitude": 49.8636017,
44
+ "Longitude": 8.7520599
45
+ },
46
+ "OriginalPosition": {
47
+ "Latitude": 49.8634,
48
+ "Longitude": 8.7523
49
+ },
50
+ "Type": "stopOver"
51
+ },
52
+ {
53
+ "LinkId": "-52433009",
54
+ "MappedPosition": {
55
+ "Latitude": 49.8745117,
56
+ "Longitude": 8.6540937
57
+ },
58
+ "OriginalPosition": {
59
+ "Latitude": 49.8752,
60
+ "Longitude": 8.654
61
+ },
62
+ "Type": "stopOver"
63
+ }
64
+ ],
65
+ "Mode": {
66
+ "Type": "fastest",
67
+ "TransportModes": [
68
+ "car"
69
+ ]
70
+ },
71
+ "Leg": [
72
+ {
73
+ "Start": {
74
+ "LinkId": "-52585230",
75
+ "MappedPosition": {
76
+ "Latitude": 49.9576187,
77
+ "Longitude": 8.9614801
78
+ },
79
+ "OriginalPosition": {
80
+ "Latitude": 49.958,
81
+ "Longitude": 8.961
82
+ },
83
+ "Type": "stopOver"
84
+ },
85
+ "End": {
86
+ "LinkId": "-61868764",
87
+ "MappedPosition": {
88
+ "Latitude": 49.8636017,
89
+ "Longitude": 8.7520599
90
+ },
91
+ "OriginalPosition": {
92
+ "Latitude": 49.8634,
93
+ "Longitude": 8.7523
94
+ },
95
+ "Type": "stopOver"
96
+ },
97
+ "Length": 21813,
98
+ "TravelTime": 1312.7,
99
+ "Maneuver": [
100
+ {
101
+ "_type": "PrivateTransportManeuverType",
102
+ "Position": {
103
+ "Latitude": 49.9576187,
104
+ "Longitude": 8.9614801
105
+ },
106
+ "Instruction": "In Richtung Rhönstraße fahren in der Friedrich-Ebert-Straße. 250 m der Straße folgen.",
107
+ "TravelTime": 48.1,
108
+ "Length": 268,
109
+ "Time": "2012-05-03T17:21:15.890+02:00",
110
+ "id": "M1"
111
+ },
112
+ {
113
+ "_type": "PrivateTransportManeuverType",
114
+ "Position": {
115
+ "Latitude": 49.9569397,
116
+ "Longitude": 8.95786
117
+ },
118
+ "Instruction": "Rechts halten auf die Hindenburgstraße. 40 m der Straße folgen.",
119
+ "TravelTime": 9.5,
120
+ "Length": 40,
121
+ "Time": "2012-05-03T17:22:03.990+02:00",
122
+ "id": "M2"
123
+ },
124
+ {
125
+ "_type": "PrivateTransportManeuverType",
126
+ "Position": {
127
+ "Latitude": 49.95718,
128
+ "Longitude": 8.9574299
129
+ },
130
+ "Instruction": "Links abbiegen auf die Darmstädter Straße (B26). 18 km der Straße folgen.",
131
+ "TravelTime": 849.2,
132
+ "Length": 17512,
133
+ "Time": "2012-05-03T17:22:13.450+02:00",
134
+ "id": "M3"
135
+ },
136
+ {
137
+ "_type": "PrivateTransportManeuverType",
138
+ "Position": {
139
+ "Latitude": 49.8759689,
140
+ "Longitude": 8.7687302
141
+ },
142
+ "Instruction": "Auffahren auf die B38. 1.9 km der Straße folgen.",
143
+ "TravelTime": 93.2,
144
+ "Length": 1934,
145
+ "Time": "2012-05-03T17:36:22.640+02:00",
146
+ "id": "M4"
147
+ },
148
+ {
149
+ "_type": "PrivateTransportManeuverType",
150
+ "Position": {
151
+ "Latitude": 49.8628807,
152
+ "Longitude": 8.7691898
153
+ },
154
+ "Instruction": "Rechts abbiegen auf die Dieburger Straße (L3115). 1.1 km der Straße folgen.",
155
+ "TravelTime": 138.1,
156
+ "Length": 1109,
157
+ "Time": "2012-05-03T17:37:55.880+02:00",
158
+ "id": "M5"
159
+ },
160
+ {
161
+ "_type": "PrivateTransportManeuverType",
162
+ "Position": {
163
+ "Latitude": 49.8574791,
164
+ "Longitude": 8.7565403
165
+ },
166
+ "Instruction": "Rechts halten auf die Darmstädter Straße (L3104). 500 m der Straße folgen.",
167
+ "TravelTime": 75.3,
168
+ "Length": 524,
169
+ "Time": "2012-05-03T17:40:13.930+02:00",
170
+ "id": "M6"
171
+ },
172
+ {
173
+ "_type": "PrivateTransportManeuverType",
174
+ "Position": {
175
+ "Latitude": 49.8612404,
176
+ "Longitude": 8.7521095
177
+ },
178
+ "Instruction": "Rechts abbiegen auf den Messeler Weg. 350 m der Straße folgen.",
179
+ "TravelTime": 70.1,
180
+ "Length": 340,
181
+ "Time": "2012-05-03T17:41:29.220+02:00",
182
+ "id": "M7"
183
+ },
184
+ {
185
+ "_type": "PrivateTransportManeuverType",
186
+ "Position": {
187
+ "Latitude": 49.8639412,
188
+ "Longitude": 8.75313
189
+ },
190
+ "Instruction": "Links abbiegen auf die Straße Am Rödersberg. 100 m der Straße folgen.",
191
+ "TravelTime": 29.3,
192
+ "Length": 86,
193
+ "Time": "2012-05-03T17:42:39.310+02:00",
194
+ "id": "M8"
195
+ },
196
+ {
197
+ "_type": "PrivateTransportManeuverType",
198
+ "Position": {
199
+ "Latitude": 49.8636017,
200
+ "Longitude": 8.7520599
201
+ },
202
+ "Instruction": "Ihr Ziel in der Straße Am Rödersberg ist links. Ihre Fahrt ist 22 km lang und dauert etwa 22 min.",
203
+ "TravelTime": 0,
204
+ "Length": 0,
205
+ "Time": "2012-05-03T17:43:08.560+02:00",
206
+ "id": "M9"
207
+ }
208
+ ]
209
+ },
210
+ {
211
+ "Start": {
212
+ "LinkId": "+61868764",
213
+ "MappedPosition": {
214
+ "Latitude": 49.8636017,
215
+ "Longitude": 8.7520599
216
+ },
217
+ "OriginalPosition": {
218
+ "Latitude": 49.8634,
219
+ "Longitude": 8.7523
220
+ },
221
+ "Type": "stopOver"
222
+ },
223
+ "End": {
224
+ "LinkId": "-52433009",
225
+ "MappedPosition": {
226
+ "Latitude": 49.8745117,
227
+ "Longitude": 8.6540937
228
+ },
229
+ "OriginalPosition": {
230
+ "Latitude": 49.8752,
231
+ "Longitude": 8.654
232
+ },
233
+ "Type": "stopOver"
234
+ },
235
+ "Length": 8200,
236
+ "TravelTime": 693.3,
237
+ "Maneuver": [
238
+ {
239
+ "_type": "PrivateTransportManeuverType",
240
+ "Position": {
241
+ "Latitude": 49.8636017,
242
+ "Longitude": 8.7520599
243
+ },
244
+ "Instruction": "In Richtung Messeler Weg fahren in der Straße Am Rödersberg. 100 m der Straße folgen.",
245
+ "TravelTime": 12.2,
246
+ "Length": 85,
247
+ "Time": "2012-05-03T17:43:08.590+02:00",
248
+ "id": "M10"
249
+ },
250
+ {
251
+ "_type": "PrivateTransportManeuverType",
252
+ "Position": {
253
+ "Latitude": 49.8639412,
254
+ "Longitude": 8.75313
255
+ },
256
+ "Instruction": "Rechts abbiegen auf den Messeler Weg. 100 m der Straße folgen.",
257
+ "TravelTime": 20.9,
258
+ "Length": 90,
259
+ "Time": "2012-05-03T17:43:20.830+02:00",
260
+ "id": "M11"
261
+ },
262
+ {
263
+ "_type": "PrivateTransportManeuverType",
264
+ "Position": {
265
+ "Latitude": 49.8632507,
266
+ "Longitude": 8.7537298
267
+ },
268
+ "Instruction": "Rechts halten und auf dem Messeler Weg bleiben. 250 m der Straße folgen.",
269
+ "TravelTime": 46.2,
270
+ "Length": 250,
271
+ "Time": "2012-05-03T17:43:41.730+02:00",
272
+ "id": "M12"
273
+ },
274
+ {
275
+ "_type": "PrivateTransportManeuverType",
276
+ "Position": {
277
+ "Latitude": 49.8612404,
278
+ "Longitude": 8.7521095
279
+ },
280
+ "Instruction": "Rechts abbiegen auf die Darmstädter Straße (L3104). 1.7 km der Straße folgen.",
281
+ "TravelTime": 142.1,
282
+ "Length": 1670,
283
+ "Time": "2012-05-03T17:44:27.900+02:00",
284
+ "id": "M13"
285
+ },
286
+ {
287
+ "_type": "PrivateTransportManeuverType",
288
+ "Position": {
289
+ "Latitude": 49.8641891,
290
+ "Longitude": 8.7293701
291
+ },
292
+ "Instruction": "Weiter auf die Aschaffenburger Straße fahren. 400 m der Straße folgen.",
293
+ "TravelTime": 33.5,
294
+ "Length": 418,
295
+ "Time": "2012-05-03T17:46:50.050+02:00",
296
+ "id": "M14"
297
+ },
298
+ {
299
+ "_type": "PrivateTransportManeuverType",
300
+ "Position": {
301
+ "Latitude": 49.8653107,
302
+ "Longitude": 8.7237902
303
+ },
304
+ "Instruction": "Auffahren auf die B26 in Richtung Darmstadt. 5.5 km der Straße folgen.",
305
+ "TravelTime": 384.6,
306
+ "Length": 5356,
307
+ "Time": "2012-05-03T17:47:23.590+02:00",
308
+ "id": "M15"
309
+ },
310
+ {
311
+ "_type": "PrivateTransportManeuverType",
312
+ "Position": {
313
+ "Latitude": 49.8731689,
314
+ "Longitude": 8.65728
315
+ },
316
+ "Instruction": "Rechts abbiegen auf die Straße Schlossgraben (B26). 150 m der Straße folgen.",
317
+ "TravelTime": 25,
318
+ "Length": 153,
319
+ "Time": "2012-05-03T17:53:48.230+02:00",
320
+ "id": "M16"
321
+ },
322
+ {
323
+ "_type": "PrivateTransportManeuverType",
324
+ "Position": {
325
+ "Latitude": 49.8741608,
326
+ "Longitude": 8.6561899
327
+ },
328
+ "Instruction": "Links abbiegen auf die Straße Karolinenplatz (B26). 200 m der Straße folgen.",
329
+ "TravelTime": 28.6,
330
+ "Length": 178,
331
+ "Time": "2012-05-03T17:54:13.200+02:00",
332
+ "id": "M17"
333
+ },
334
+ {
335
+ "_type": "PrivateTransportManeuverType",
336
+ "Position": {
337
+ "Latitude": 49.8745117,
338
+ "Longitude": 8.6540937
339
+ },
340
+ "Instruction": "Ihr Ziel in der Friedensplatz, Zeughausstraße (B26) ist rechts. Ihre Fahrt ist 30 km lang und dauert etwa 33 min.",
341
+ "TravelTime": 0,
342
+ "Length": 0,
343
+ "Time": "2012-05-03T17:54:41.840+02:00",
344
+ "id": "M18"
345
+ }
346
+ ]
347
+ }
348
+ ],
349
+ "Summary": {
350
+ "Distance": 30013,
351
+ "TrafficTime": 2005,
352
+ "BaseTime": 2005
353
+ }
354
+ }
355
+ ]
356
+ }
357
+ }
@@ -0,0 +1,59 @@
1
+ require 'spec_helper'
2
+
3
+ describe Routing::Adapter::Navteq do
4
+
5
+ context 'creating a new instance' do
6
+
7
+ it 'can be instantiated without arguments' do
8
+ expect { Routing::Adapter::Navteq.new }.to_not raise_error
9
+ end
10
+
11
+ it 'sets the host in its options' do
12
+ described_class.new(:host => "new_host").host.should == "new_host"
13
+ end
14
+
15
+ it 'sets the default params in its options' do
16
+ params = { :hello => "world" }
17
+ described_class.new(:default_params => params).default_params == params
18
+ end
19
+
20
+ it 'ignores unknown options' do
21
+ expect { described_class.new(:hello => "world") }.to_not raise_error
22
+ end
23
+
24
+ end
25
+
26
+ its(:service_path){ should be_a String }
27
+
28
+ its(:default_params){ should be_a Hash }
29
+
30
+ describe '#connection' do
31
+
32
+ it 'returns a faraday connection' do
33
+ subject.send(:connection).should be_a Faraday::Connection
34
+ end
35
+
36
+ end
37
+
38
+ describe '#calculate' do
39
+ pending
40
+ end
41
+
42
+ describe '#get' do
43
+ pending
44
+ end
45
+
46
+ describe '#geo_points_to_params' do
47
+
48
+ let(:geo_points) { [stub(:lat => 1, :lng => 2), stub(:lat => 3, :lng => 4), stub(:lat => 5, :lng => 6)] }
49
+ let(:params){ subject.send(:geo_points_to_params, geo_points) }
50
+
51
+ it 'creates a hash with enumerated waypoint keys and the navteq special geo! syntax as values' do
52
+ params['waypoint0'].should == 'geo!1,2'
53
+ params['waypoint1'].should == 'geo!3,4'
54
+ params['waypoint2'].should == 'geo!5,6'
55
+ end
56
+
57
+ end
58
+
59
+ end