route4me 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +4 -0
- data/.travis.yml +10 -0
- data/Gemfile +2 -0
- data/README.md +72 -0
- data/VERSION +1 -0
- data/examples/addresses.json +410 -0
- data/examples/get_route_manifest.rb +6 -0
- data/examples/get_route_tracking.rb +9 -0
- data/examples/helper.rb +7 -0
- data/examples/multiple_depot_multiple_driver.rb +20 -0
- data/examples/multiple_depot_with_time_window.rb +20 -0
- data/examples/reoptimization.rb +9 -0
- data/examples/single_driver_round_trip.rb +20 -0
- data/examples/single_driver_route_ten_stops.rb +18 -0
- data/examples/track.rb +14 -0
- data/lib/route4me.rb +119 -0
- data/lib/route4me/enum/algorithm_type.rb +11 -0
- data/lib/route4me/enum/avoid.rb +8 -0
- data/lib/route4me/enum/device_type.rb +9 -0
- data/lib/route4me/enum/direction_method.rb +7 -0
- data/lib/route4me/enum/distance_unit.rb +6 -0
- data/lib/route4me/enum/metric.rb +9 -0
- data/lib/route4me/enum/optimization_type.rb +7 -0
- data/lib/route4me/enum/travel_mode.rb +7 -0
- data/lib/route4me/errors/api_error.rb +4 -0
- data/lib/route4me/errors/route4me_error.rb +16 -0
- data/lib/route4me/optimization_problem.rb +40 -0
- data/lib/route4me/route.rb +21 -0
- data/lib/route4me/track.rb +17 -0
- data/lib/route4me/util.rb +28 -0
- data/lib/route4me/version.rb +3 -0
- data/route4me.gemspec +24 -0
- data/spec/route4me/optimization_problem_spec.rb +217 -0
- data/spec/route4me/route_spec.rb +60 -0
- data/spec/route4me/track_spec.rb +35 -0
- data/spec/spec_helper.rb +49 -0
- metadata +134 -0
data/route4me.gemspec
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
$:.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
2
|
+
|
3
|
+
require 'route4me/version'
|
4
|
+
|
5
|
+
spec = Gem::Specification.new do |s|
|
6
|
+
s.name = 'route4me'
|
7
|
+
s.version = Route4me::VERSION
|
8
|
+
s.summary = 'Ruby bindings for the Route4me API'
|
9
|
+
s.description = 'Routing Software, Route Planning Software, Delivery Route Planner'
|
10
|
+
s.author = 'Igor Skrynkovskyy'
|
11
|
+
s.email = 'igor@route4me.com'
|
12
|
+
s.homepage = 'http://route4me.com'
|
13
|
+
|
14
|
+
s.add_dependency 'rest-client', '~> 1.4'
|
15
|
+
s.add_dependency 'mime-types', '~> 1.25'
|
16
|
+
s.add_dependency 'json', '~> 1.8.1'
|
17
|
+
|
18
|
+
s.add_development_dependency 'rspec'
|
19
|
+
|
20
|
+
s.files = `git ls-files`.split("\n")
|
21
|
+
s.test_files = `git ls-files -- test/*`.split("\n")
|
22
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
23
|
+
s.require_paths = ['lib']
|
24
|
+
end
|
@@ -0,0 +1,217 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe Route4me::OptimizationProblem do
|
4
|
+
it "Should create simple driver optimization" do
|
5
|
+
problem = Route4me::OptimizationProblem.optimize(
|
6
|
+
:addresses => addresses,
|
7
|
+
:parameters => {
|
8
|
+
:algorithm_type => 1,
|
9
|
+
:device_type => 'web',
|
10
|
+
:distance_unit => 'mi',
|
11
|
+
:optimize => 'Distance',
|
12
|
+
:travel_mode => 'Driving',
|
13
|
+
:route_max_duration => 86400,
|
14
|
+
:vehicle_capacity => 1,
|
15
|
+
:vehicle_max_distance_mi => 10000
|
16
|
+
}
|
17
|
+
)
|
18
|
+
|
19
|
+
expect(problem).not_to be_nil
|
20
|
+
expect(problem[:optimization_problem_id]).to_not be_empty
|
21
|
+
expect(problem[:parameters]).to_not be_empty
|
22
|
+
expect(problem[:addresses].length).to eq(5)
|
23
|
+
expect(problem[:state]).to eq(4)
|
24
|
+
|
25
|
+
parameters = problem[:parameters]
|
26
|
+
expect(parameters[:algorithm_type]).to eq('1')
|
27
|
+
expect(parameters[:rt]).to eq(false)
|
28
|
+
expect(parameters[:device_type]).to eq('web')
|
29
|
+
expect(parameters[:distance_unit]).to eq('mi')
|
30
|
+
expect(parameters[:optimize]).to eq('Distance')
|
31
|
+
expect(parameters[:travel_mode]).to eq('Driving')
|
32
|
+
expect(parameters[:route_max_duration]).to eq(86400)
|
33
|
+
expect(parameters[:vehicle_capacity]).to eq('1')
|
34
|
+
expect(parameters[:vehicle_max_distance_mi]).to eq('10000')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "Should create simple driver optimization with round trip" do
|
38
|
+
problem = Route4me::OptimizationProblem.optimize(
|
39
|
+
:addresses => addresses,
|
40
|
+
:parameters => {
|
41
|
+
:algorithm_type => 1,
|
42
|
+
:rt => true,
|
43
|
+
:device_type => 'web',
|
44
|
+
:distance_unit => 'mi',
|
45
|
+
:optimize => 'Distance',
|
46
|
+
:travel_mode => 'Driving',
|
47
|
+
:route_max_duration => 86400,
|
48
|
+
:vehicle_capacity => 1,
|
49
|
+
:vehicle_max_distance_mi => 10000
|
50
|
+
}
|
51
|
+
)
|
52
|
+
|
53
|
+
expect(problem).not_to be_nil
|
54
|
+
expect(problem[:optimization_problem_id]).to_not be_empty
|
55
|
+
expect(problem[:parameters]).to_not be_empty
|
56
|
+
expect(problem[:addresses].length).to eq(5)
|
57
|
+
expect(problem[:state]).to eq(4)
|
58
|
+
|
59
|
+
parameters = problem[:parameters]
|
60
|
+
expect(parameters[:algorithm_type]).to eq('1')
|
61
|
+
expect(parameters[:rt]).to eq(true)
|
62
|
+
expect(parameters[:device_type]).to eq('web')
|
63
|
+
expect(parameters[:distance_unit]).to eq('mi')
|
64
|
+
expect(parameters[:optimize]).to eq('Distance')
|
65
|
+
expect(parameters[:travel_mode]).to eq('Driving')
|
66
|
+
expect(parameters[:route_max_duration]).to eq(86400)
|
67
|
+
expect(parameters[:vehicle_capacity]).to eq('1')
|
68
|
+
expect(parameters[:vehicle_max_distance_mi]).to eq('10000')
|
69
|
+
end
|
70
|
+
|
71
|
+
it "Should create multiple driver optimization" do
|
72
|
+
problem = Route4me::OptimizationProblem.optimize(
|
73
|
+
:addresses => addresses,
|
74
|
+
:parameters => {
|
75
|
+
:algorithm_type => 3,
|
76
|
+
:metric => 3,
|
77
|
+
:device_type => 'web',
|
78
|
+
:distance_unit => 'mi',
|
79
|
+
:optimize => 'Distance',
|
80
|
+
:travel_mode => 'Driving',
|
81
|
+
:route_max_duration => 86400,
|
82
|
+
:vehicle_capacity => 99,
|
83
|
+
:vehicle_max_distance_mi => 10000,
|
84
|
+
:preferred_matrix_method => 2
|
85
|
+
}
|
86
|
+
)
|
87
|
+
|
88
|
+
expect(problem).not_to be_nil
|
89
|
+
expect(problem[:optimization_problem_id]).to_not be_empty
|
90
|
+
expect(problem[:parameters]).to_not be_empty
|
91
|
+
expect(problem[:addresses].length).to eq(5)
|
92
|
+
expect(problem[:state]).to eq(4)
|
93
|
+
|
94
|
+
parameters = problem[:parameters]
|
95
|
+
expect(parameters[:algorithm_type]).to eq('3')
|
96
|
+
expect(parameters[:device_type]).to eq('web')
|
97
|
+
expect(parameters[:distance_unit]).to eq('mi')
|
98
|
+
expect(parameters[:optimize]).to eq('Distance')
|
99
|
+
expect(parameters[:travel_mode]).to eq('Driving')
|
100
|
+
expect(parameters[:route_max_duration]).to eq(86400)
|
101
|
+
expect(parameters[:vehicle_capacity]).to eq('99')
|
102
|
+
expect(parameters[:vehicle_max_distance_mi]).to eq('10000')
|
103
|
+
end
|
104
|
+
|
105
|
+
it "Should create single driver optimization with time window" do
|
106
|
+
problem = Route4me::OptimizationProblem.optimize(
|
107
|
+
:addresses => addresses,
|
108
|
+
:parameters => {
|
109
|
+
:algorithm_type => 4,
|
110
|
+
:rt => true,
|
111
|
+
:device_type => 'web',
|
112
|
+
:distance_unit => 'mi',
|
113
|
+
:optimize => 'Distance',
|
114
|
+
:travel_mode => 'Driving',
|
115
|
+
:route_max_duration => 86400,
|
116
|
+
:vehicle_capacity => 99,
|
117
|
+
:vehicle_max_distance_mi => 10000
|
118
|
+
}
|
119
|
+
)
|
120
|
+
|
121
|
+
expect(problem).not_to be_nil
|
122
|
+
expect(problem[:optimization_problem_id]).to_not be_empty
|
123
|
+
expect(problem[:parameters]).to_not be_empty
|
124
|
+
expect(problem[:addresses].length).to eq(5)
|
125
|
+
expect(problem[:state]).to eq(4)
|
126
|
+
|
127
|
+
parameters = problem[:parameters]
|
128
|
+
expect(parameters[:algorithm_type]).to eq("4")
|
129
|
+
expect(parameters[:device_type]).to eq('web')
|
130
|
+
expect(parameters[:distance_unit]).to eq('mi')
|
131
|
+
expect(parameters[:optimize]).to eq('Distance')
|
132
|
+
expect(parameters[:travel_mode]).to eq('Driving')
|
133
|
+
expect(parameters[:route_max_duration]).to eq(86400)
|
134
|
+
expect(parameters[:vehicle_capacity]).to eq('99')
|
135
|
+
expect(parameters[:vehicle_max_distance_mi]).to eq('10000')
|
136
|
+
end
|
137
|
+
|
138
|
+
it 'Should create route without optimization' do
|
139
|
+
problem = Route4me::OptimizationProblem.optimize(
|
140
|
+
:addresses => addresses,
|
141
|
+
:parameters => {
|
142
|
+
:algorithm_type => 1,
|
143
|
+
:disable_optimization => true
|
144
|
+
}
|
145
|
+
)
|
146
|
+
|
147
|
+
expect(problem).not_to be_nil
|
148
|
+
expect(problem[:optimization_problem_id]).to_not be_empty
|
149
|
+
expect(problem[:addresses].length).to eq(5)
|
150
|
+
expect(problem[:parameters]).to_not be_empty
|
151
|
+
expect(problem[:parameters][:disable_optimization]).to eq(true)
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'Should return data about optimization' do
|
155
|
+
problem = Route4me::OptimizationProblem.optimize(
|
156
|
+
:addresses => addresses,
|
157
|
+
:parameters => {
|
158
|
+
:algorithm_type => 1,
|
159
|
+
:disable_optimization => true
|
160
|
+
}
|
161
|
+
)
|
162
|
+
|
163
|
+
problem_id = problem[:optimization_problem_id]
|
164
|
+
problem = Route4me::OptimizationProblem.get(
|
165
|
+
:optimization_problem_id => problem_id
|
166
|
+
)
|
167
|
+
|
168
|
+
expect(problem).not_to be_nil
|
169
|
+
expect(problem[:addresses].length).to eq(5)
|
170
|
+
expect(problem[:parameters]).to_not be_empty
|
171
|
+
expect(problem[:optimization_problem_id]).to eq(problem_id)
|
172
|
+
end
|
173
|
+
|
174
|
+
it 'Should return data about several optimization object' do
|
175
|
+
problem = Route4me::OptimizationProblem.get(
|
176
|
+
:state => [4, 5],
|
177
|
+
:limit => 5
|
178
|
+
)
|
179
|
+
|
180
|
+
expect(problem).not_to be_nil
|
181
|
+
expect(problem.length).to eq(5)
|
182
|
+
expect(problem).to be_kind_of(Array)
|
183
|
+
end
|
184
|
+
|
185
|
+
# should 'update optimization' do
|
186
|
+
# problem = Route4me::OptimizationProblem.optimize(
|
187
|
+
# :parameters => { :disable_optimization => true },
|
188
|
+
# :addresses => addresses
|
189
|
+
# )
|
190
|
+
#
|
191
|
+
# assert problem
|
192
|
+
# assert problem['optimization_problem_id']
|
193
|
+
#
|
194
|
+
# problem_id = problem['optimization_problem_id']
|
195
|
+
# problem = Route4me::OptimizationProblem.update(
|
196
|
+
# :optimization_problem_id => problem_id,
|
197
|
+
# :parameters => {
|
198
|
+
# :algorithm_type => 1,
|
199
|
+
# :device_type => 'iphone',
|
200
|
+
# :distance_unit => 'mi',
|
201
|
+
# :optimize => 'Distance',
|
202
|
+
# :travel_mode => 'Driving',
|
203
|
+
# :route_max_duration => 86400,
|
204
|
+
# :vehicle_capacity => 99,
|
205
|
+
# :vehicle_max_distance_mi => 10000
|
206
|
+
# }
|
207
|
+
# )
|
208
|
+
#
|
209
|
+
# assert problem
|
210
|
+
# assert_equal problem_id, problem['optimization_problem_id']
|
211
|
+
# assert problem['parameters']
|
212
|
+
# parameters = problem['parameters']
|
213
|
+
# assert_equal parameters['device_type'], 'web'
|
214
|
+
# assert_equal parameters['optimize'], 'Distance'
|
215
|
+
# assert_equal parameters['travel_mode'], 'Driving'
|
216
|
+
# end
|
217
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe Route4me::Route do
|
4
|
+
before(:all) do
|
5
|
+
problem = Route4me::OptimizationProblem.optimize(
|
6
|
+
:parameters => { :disable_optimization => true },
|
7
|
+
:addresses => addresses
|
8
|
+
)
|
9
|
+
|
10
|
+
@route_id = problem[:routes][0][:route_id]
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'should return route by id' do
|
14
|
+
route = Route4me::Route.get(:route_id => @route_id)
|
15
|
+
|
16
|
+
expect(route).not_to be_nil
|
17
|
+
expect(route[:route_id]).to eq(@route_id)
|
18
|
+
expect(route[:tracking_history]).to be_nil
|
19
|
+
expect(route[:optimization_problem_id]).to_not be_empty
|
20
|
+
end
|
21
|
+
|
22
|
+
it 'should return route by id with tracking' do
|
23
|
+
2.times do
|
24
|
+
Route4me::Track.set(
|
25
|
+
:format => 'json',
|
26
|
+
:member_id => 1,
|
27
|
+
:route_id => @route_id,
|
28
|
+
:course => 1,
|
29
|
+
:speed => 120,
|
30
|
+
:lat => 41.8927521,
|
31
|
+
:lng => -109.0803888,
|
32
|
+
:device_type => 'iphone',
|
33
|
+
:device_guid => 'qweqweqwe'
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
route = Route4me::Route.get(
|
38
|
+
:route_id => @route_id,
|
39
|
+
:device_tracking_history => true
|
40
|
+
)
|
41
|
+
|
42
|
+
expect(route).not_to be_nil
|
43
|
+
expect(route[:route_id]).to eq(@route_id)
|
44
|
+
expect(route[:optimization_problem_id]).to_not be_empty
|
45
|
+
expect(route[:tracking_history]).to_not be_nil
|
46
|
+
expect(route[:tracking_history]).to be_kind_of(Array)
|
47
|
+
expect(route[:tracking_history].length).to eq(2)
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'should returns 5 routes' do
|
51
|
+
routes = Route4me::Route.get(:limit => 5)
|
52
|
+
|
53
|
+
expect(routes).not_to be_nil
|
54
|
+
expect(routes.length).to eq(5)
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'should remove route by route_id' do
|
58
|
+
Route4me::Route.delete(:route_id => @route_id) == true
|
59
|
+
end
|
60
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require File.expand_path('../../spec_helper', __FILE__)
|
2
|
+
|
3
|
+
describe Route4me::Track do
|
4
|
+
it "Should track device" do
|
5
|
+
status = Route4me::Track.set(
|
6
|
+
'format' => 'json',
|
7
|
+
'member_id' => 1,
|
8
|
+
'route_id' => '0CDA1358186D616AFD39FEB579A64974',
|
9
|
+
'course' => 1,
|
10
|
+
'speed' => 120,
|
11
|
+
'lat' => 41.8927521,
|
12
|
+
'lng' => -109.0803888,
|
13
|
+
'device_type' => 'iphone',
|
14
|
+
'device_guid' => 'qweqweqwe'
|
15
|
+
)
|
16
|
+
|
17
|
+
status == true
|
18
|
+
end
|
19
|
+
|
20
|
+
it "Should track device with sym" do
|
21
|
+
status = Route4me::Track.set(
|
22
|
+
format: 'json',
|
23
|
+
member_id: 1,
|
24
|
+
route_id: '0CDA1358186D616AFD39FEB579A64974',
|
25
|
+
course: 1,
|
26
|
+
speed: 120,
|
27
|
+
lat: 41.8927521,
|
28
|
+
lng: -109.0803888,
|
29
|
+
device_type: 'iphone',
|
30
|
+
device_guid: 'qweqweqwe'
|
31
|
+
)
|
32
|
+
|
33
|
+
status == true
|
34
|
+
end
|
35
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'route4me'
|
2
|
+
|
3
|
+
Route4me.api_base='http://staging.route4me.com:8080'
|
4
|
+
Route4me.api_key="11111111111111111111111111111111"
|
5
|
+
|
6
|
+
def addresses
|
7
|
+
[
|
8
|
+
{
|
9
|
+
:address => "6107 Prospect St, Fredericksburg, VA 22407",
|
10
|
+
:is_depot => true,
|
11
|
+
:lat => 38.2229881287,
|
12
|
+
:lng => -77.5451965332,
|
13
|
+
:time_window_start => 39600,
|
14
|
+
:time_window_end => 61200
|
15
|
+
},
|
16
|
+
{
|
17
|
+
:address => "6202 Blackstone Blvd, Fredericksburg, VA 22407",
|
18
|
+
:is_depot => false,
|
19
|
+
:lat => 38.2240219116,
|
20
|
+
:lng => -77.5488815308,
|
21
|
+
:time_window_start => 32400,
|
22
|
+
:time_window_end => 64800
|
23
|
+
},
|
24
|
+
{
|
25
|
+
:address => "10700 Heatherwood Dr, Spotsylvania, VA 22553",
|
26
|
+
:is_depot => false,
|
27
|
+
:lat => 38.2465057373,
|
28
|
+
:lng => -77.5649108887,
|
29
|
+
:time_window_start => 14400,
|
30
|
+
:time_window_end => 68400
|
31
|
+
},
|
32
|
+
{
|
33
|
+
:address => "10416 Rolling Ridge Dr, Spotsylvania, VA 22553",
|
34
|
+
:is_depot => false,
|
35
|
+
:lat => 38.2465667725,
|
36
|
+
:lng => -77.5721282959,
|
37
|
+
:time_window_start => 57600,
|
38
|
+
:time_window_end => 68400
|
39
|
+
},
|
40
|
+
{
|
41
|
+
:address => "10609 Mystic Pointe Dr, Fredericksburg, VA 22407",
|
42
|
+
:is_depot => false,
|
43
|
+
:lat => 38.2513427734,
|
44
|
+
:lng => -77.5993652344,
|
45
|
+
:time_window_start => 28800,
|
46
|
+
:time_window_end => 75600
|
47
|
+
}
|
48
|
+
]
|
49
|
+
end
|
metadata
ADDED
@@ -0,0 +1,134 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: route4me
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Igor Skrynkovskyy
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rest-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.4'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.4'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: mime-types
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.25'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.25'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: json
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 1.8.1
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 1.8.1
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: Routing Software, Route Planning Software, Delivery Route Planner
|
70
|
+
email: igor@route4me.com
|
71
|
+
executables: []
|
72
|
+
extensions: []
|
73
|
+
extra_rdoc_files: []
|
74
|
+
files:
|
75
|
+
- ".gitignore"
|
76
|
+
- ".travis.yml"
|
77
|
+
- Gemfile
|
78
|
+
- README.md
|
79
|
+
- VERSION
|
80
|
+
- examples/addresses.json
|
81
|
+
- examples/get_route_manifest.rb
|
82
|
+
- examples/get_route_tracking.rb
|
83
|
+
- examples/helper.rb
|
84
|
+
- examples/multiple_depot_multiple_driver.rb
|
85
|
+
- examples/multiple_depot_with_time_window.rb
|
86
|
+
- examples/reoptimization.rb
|
87
|
+
- examples/single_driver_round_trip.rb
|
88
|
+
- examples/single_driver_route_ten_stops.rb
|
89
|
+
- examples/track.rb
|
90
|
+
- lib/route4me.rb
|
91
|
+
- lib/route4me/enum/algorithm_type.rb
|
92
|
+
- lib/route4me/enum/avoid.rb
|
93
|
+
- lib/route4me/enum/device_type.rb
|
94
|
+
- lib/route4me/enum/direction_method.rb
|
95
|
+
- lib/route4me/enum/distance_unit.rb
|
96
|
+
- lib/route4me/enum/metric.rb
|
97
|
+
- lib/route4me/enum/optimization_type.rb
|
98
|
+
- lib/route4me/enum/travel_mode.rb
|
99
|
+
- lib/route4me/errors/api_error.rb
|
100
|
+
- lib/route4me/errors/route4me_error.rb
|
101
|
+
- lib/route4me/optimization_problem.rb
|
102
|
+
- lib/route4me/route.rb
|
103
|
+
- lib/route4me/track.rb
|
104
|
+
- lib/route4me/util.rb
|
105
|
+
- lib/route4me/version.rb
|
106
|
+
- route4me.gemspec
|
107
|
+
- spec/route4me/optimization_problem_spec.rb
|
108
|
+
- spec/route4me/route_spec.rb
|
109
|
+
- spec/route4me/track_spec.rb
|
110
|
+
- spec/spec_helper.rb
|
111
|
+
homepage: http://route4me.com
|
112
|
+
licenses: []
|
113
|
+
metadata: {}
|
114
|
+
post_install_message:
|
115
|
+
rdoc_options: []
|
116
|
+
require_paths:
|
117
|
+
- lib
|
118
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
119
|
+
requirements:
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: '0'
|
123
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
|
+
requirements:
|
125
|
+
- - ">="
|
126
|
+
- !ruby/object:Gem::Version
|
127
|
+
version: '0'
|
128
|
+
requirements: []
|
129
|
+
rubyforge_project:
|
130
|
+
rubygems_version: 2.2.2
|
131
|
+
signing_key:
|
132
|
+
specification_version: 4
|
133
|
+
summary: Ruby bindings for the Route4me API
|
134
|
+
test_files: []
|