route4me 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,6 @@
1
+ require 'route4me'
2
+
3
+ Route4me.api_key = '11111111111111111111111111111111'
4
+ route = Route4me::Route.get({
5
+ :route_id => 'AC16E7D338B551013FF34266FE81A5EE'
6
+ })
@@ -0,0 +1,9 @@
1
+ require 'route4me'
2
+
3
+ Route4me.api_key = '11111111111111111111111111111111'
4
+ route = Route4me::Route.get({
5
+ :route_id => 'AC16E7D338B551013FF34266FE81A5EE',
6
+ :device_tracking_history => true
7
+ })
8
+
9
+ puts route[:tracking_history]
@@ -0,0 +1,7 @@
1
+ require 'json'
2
+
3
+ def addresses
4
+ File.open('./addresses.json', "r") do |f|
5
+ JSON.load(f)
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ require 'route4me'
2
+ require './helper'
3
+
4
+ Route4me.api_key = '11111111111111111111111111111111'
5
+ problem = Route4me::OptimizationProblem.optimize(
6
+ :addresses => addresses,
7
+ :parameters => {
8
+ :algorithm_type => Route4me::AlgorithmType::CVRP_TW_MD,
9
+ :distance_unit => Route4me::DistanceUnit::MILES,
10
+ :device_type => Route4me::DeviceType::WEB,
11
+ :optimize => Route4me::OptimizationType::DISTANCE,
12
+ :travel_mode => Route4me::TravelMode::DRIVING,
13
+ :route_max_duration => 86400,
14
+ :vehicle_capacity => 50,
15
+ :vehicle_max_distance_mi => 10000,
16
+ :parts => 50
17
+ }
18
+ )
19
+
20
+ puts problem
@@ -0,0 +1,20 @@
1
+ require 'route4me'
2
+ require './helper'
3
+
4
+ Route4me.api_key = '11111111111111111111111111111111'
5
+ problem = Route4me::OptimizationProblem.optimize(
6
+ :addresses => addresses,
7
+ :parameters => {
8
+ :algorithm_type => Route4me::AlgorithmType::CVRP_TW_SD,
9
+ :distance_unit => Route4me::DistanceUnit::MILES,
10
+ :device_type => Route4me::DeviceType::WEB,
11
+ :optimize => Route4me::OptimizationType::DISTANCE,
12
+ :travel_mode => Route4me::TravelMode::DRIVING,
13
+ :route_max_duration => 86400,
14
+ :vehicle_capacity => 50,
15
+ :vehicle_max_distance_mi => 10000,
16
+ :parts => 50
17
+ }
18
+ )
19
+
20
+ puts problem
@@ -0,0 +1,9 @@
1
+ require 'route4me'
2
+ require './helper'
3
+
4
+ problem = Route4me::OptimizationProblem.update(
5
+ :optimization_problem_id => 'F2FEA85DA7EFCE180CAD70704816347A',
6
+ :parameters => { :reoptimize => true },
7
+ :addresses => addresses,
8
+ :reoptimize => true
9
+ )
@@ -0,0 +1,20 @@
1
+ require 'route4me'
2
+ require './helper'
3
+
4
+ Route4me.api_key = '11111111111111111111111111111111'
5
+ problem = Route4me::OptimizationProblem.optimize(
6
+ :addresses => addresses,
7
+ :parameters => {
8
+ :algorithm_type => Route4me::AlgorithmType::TSP,
9
+ :distance_unit => Route4me::DistanceUnit::MILES,
10
+ :device_type => Route4me::DeviceType::WEB,
11
+ :optimize => Route4me::OptimizationType::DISTANCE,
12
+ :travel_mode => Route4me::TravelMode::DRIVING,
13
+ :route_max_duration => 86400,
14
+ :vehicle_capacity => 1,
15
+ :vehicle_max_distance_mi => 10000,
16
+ :rt => true
17
+ }
18
+ )
19
+
20
+ puts problem
@@ -0,0 +1,18 @@
1
+ require 'route4me'
2
+ require './helper'
3
+
4
+ Route4me.api_key = '11111111111111111111111111111111'
5
+ problem = Route4me::OptimizationProblem.optimize(
6
+ :addresses => addresses.first(10),
7
+ :parameters => {
8
+ :algorithm_type => Route4me::AlgorithmType::TSP,
9
+ :distance_unit => Route4me::DistanceUnit::MILES,
10
+ :device_type => Route4me::DeviceType::WEB,
11
+ :optimize => Route4me::OptimizationType::DISTANCE,
12
+ :travel_mode => Route4me::TravelMode::DRIVING,
13
+ :vehicle_capacity => 1,
14
+ :vehicle_max_distance_mi => 10000
15
+ }
16
+ )
17
+
18
+ puts problem
@@ -0,0 +1,14 @@
1
+ require 'route4me'
2
+
3
+ Route4me.api_key = '11111111111111111111111111111111'
4
+ Route4me::Track.set(
5
+ format: 'json',
6
+ member_id: 1,
7
+ route_id: '0CDA1358186D616AFD39FEB579A64974',
8
+ course: 1,
9
+ speed: 120,
10
+ lat: 41.8927521,
11
+ lng: -109.0803888,
12
+ device_type: Route4me::DeviceType::IPHONE,
13
+ device_guid: '036BFC6AC46F45153D7381BE321CB9235585FD83'
14
+ )
@@ -0,0 +1,119 @@
1
+ # Stripe Ruby bindings
2
+ # API spec at https://stripe.com/docs/api
3
+ require 'cgi'
4
+ require 'set'
5
+ require 'openssl'
6
+ require 'rest_client'
7
+ require 'json'
8
+
9
+ # Enums
10
+ require 'route4me/enum/algorithm_type'
11
+ require 'route4me/enum/distance_unit'
12
+ require 'route4me/enum/device_type'
13
+ require 'route4me/enum/optimization_type'
14
+ require 'route4me/enum/travel_mode'
15
+ require 'route4me/enum/metric'
16
+ require 'route4me/enum/direction_method'
17
+ require 'route4me/enum/avoid'
18
+
19
+ # Errors
20
+ require 'route4me/errors/route4me_error'
21
+ require 'route4me/errors/api_error'
22
+
23
+ # Version
24
+ require 'route4me/version'
25
+
26
+ # Util
27
+ require 'route4me/util'
28
+
29
+ # Resources
30
+ require 'route4me/optimization_problem'
31
+ # require 'route4me/address'
32
+ require 'route4me/route'
33
+ require 'route4me/track'
34
+
35
+ module Route4me
36
+ class << self
37
+ attr_accessor :api_key, :api_base
38
+ end
39
+
40
+ @api_base = 'http://route4me.com'
41
+
42
+ def self.api_url(url='')
43
+ @api_base + url
44
+ end
45
+
46
+ def self.uri_encode(params)
47
+ params.map{ |k,v| "#{k}=#{Util.url_encode(v)}" }.join('&')
48
+ end
49
+
50
+ def self.request(method, url, opts)
51
+ unless @api_key
52
+ raise ArgumentError.new('No API key provided.')
53
+ end
54
+
55
+ get = opts[:get] || {}
56
+ json = opts[:json] || {}
57
+
58
+ url = api_url(url)
59
+ get[:api_key] = self.api_key
60
+ url += "?#{uri_encode(get)}"
61
+
62
+ case method.to_s.downcase.to_sym
63
+ when :post, :put
64
+ payload = json.to_json if json && json.any?
65
+ else
66
+ payload = nil
67
+ end
68
+
69
+ request_opts = {
70
+ method: method, open_timeout: 30, url: url,
71
+ timeout: 80, payload: payload
72
+ }
73
+
74
+ begin
75
+ response = execute(request_opts)
76
+ rescue SocketError => e
77
+ handle_error(e)
78
+ rescue RestClient::ExceptionWithResponse => e
79
+ if rcode = e.http_code and rbody = e.http_body
80
+ handle_api_error(rcode, rbody)
81
+ else
82
+ handle_error(e)
83
+ end
84
+ rescue RestClient::Exception, Errno::ECONNREFUSED => e
85
+ handle_error(e)
86
+ end
87
+
88
+ Util.symbolize_names(parse(response))
89
+ end
90
+
91
+ def self.execute(attrs)
92
+ RestClient::Request.execute(attrs)
93
+ end
94
+
95
+ def self.parse(response)
96
+ begin
97
+ response = JSON.parse(response.body)
98
+ rescue JSON::ParserError
99
+ response = nil
100
+ end
101
+
102
+ response
103
+ end
104
+
105
+ def self.handle_error(e)
106
+ raise Route4meError, e.message
107
+ end
108
+
109
+ def self.handle_api_error(code, body)
110
+ begin
111
+ error_message = JSON.parse(body)
112
+ error_message = error_message['errors']
113
+ rescue
114
+ raise Route4meError
115
+ end
116
+
117
+ raise ApiError, code, error_message
118
+ end
119
+ end
@@ -0,0 +1,11 @@
1
+ module Route4me
2
+ module AlgorithmType
3
+ TSP = 1
4
+ VRP = 2
5
+ CVRP_TW_SD = 3
6
+ CVRP_TW_MD = 4
7
+ TSP_TW = 5
8
+ TSP_TW_CR = 6
9
+ BBCVRP = 7
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ module Route4me
2
+ module Avoid
3
+ HIGHWAYS = 'Highways'
4
+ TOLLS = 'Tolls'
5
+ MINIMIZE_HIGHWAYS = 'minimizeHighways'
6
+ MINIMIZE_TOLLS = 'minimizeTolls'
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ module Route4me
2
+ module DeviceType
3
+ WEB = 'web'
4
+ IPHONE = 'iphone'
5
+ IPAD = 'ipad'
6
+ ANDROID_PHONE = 'android_phone'
7
+ ANDROID_TABLET = 'android_tablet'
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module Route4me
2
+ module DirectionMethod
3
+ VIRTUALEARTH = 1
4
+ GOOGLE = 2
5
+ HERE = 3
6
+ end
7
+ end
@@ -0,0 +1,6 @@
1
+ module Route4me
2
+ module DistanceUnit
3
+ MILES = 'mi'
4
+ KILOMETERS = 'km'
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ module Route4me
2
+ module Metric
3
+ EUCLIDEAN = 1
4
+ MANHATTAN = 2
5
+ GEODESIC = 3
6
+ MATRIX = 4
7
+ EXACT_2D = 5
8
+ end
9
+ end
@@ -0,0 +1,7 @@
1
+ module Route4me
2
+ module OptimizationType
3
+ DISTANCE = 'Distance'
4
+ TIME = 'Time'
5
+ TIME_WITH_TRAFFIC = 'timeWithTraffic'
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Route4me
2
+ module TravelMode
3
+ DRIVING = 'Driving'
4
+ WALKING = 'Walking'
5
+ TRUCKING = 'Trucking'
6
+ end
7
+ end
@@ -0,0 +1,4 @@
1
+ module Route4me
2
+ class ApiError < Route4meError
3
+ end
4
+ end
@@ -0,0 +1,16 @@
1
+ module Route4me
2
+ class Route4meError < StandardError
3
+ attr_reader :message, :http_status, :http_body
4
+
5
+ def initialize(message=nil, http_status=nil, http_body=nil)
6
+ @message = message
7
+ @http_status = http_status
8
+ @http_body = http_body
9
+ end
10
+
11
+ def to_s
12
+ status_string = @http_status.nil? ? "" : "(Status #{@http_status}) "
13
+ "#{status_string}#{@message}"
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,40 @@
1
+ module Route4me
2
+ class OptimizationProblem
3
+ def self.url
4
+ '/api.v4/optimization_problem.php'
5
+ end
6
+
7
+ def self.get(params={})
8
+ get = Util.extract(params, [
9
+ :optimization_problem_id, :wait_for_final_state,
10
+ :state, :limit, :offset
11
+ ])
12
+
13
+ optimization = Route4me.request(:get, self.url, get: get)
14
+ if (optimization[:optimizations]).nil?
15
+ optimization
16
+ else
17
+ optimization[:optimizations]
18
+ end
19
+ end
20
+
21
+ def self.optimize(params={})
22
+ json = Util.extract(params, [:addresses, :parameters])
23
+ get = Util.extract(params, [
24
+ :directions, :format, :route_path_output, :optimized_callback_url
25
+ ])
26
+
27
+ Route4me.request(:post, self.url, get: get, json: json)
28
+ end
29
+
30
+ def self.update(params={})
31
+ json = Util.extract(params, [:addresses, :parameters])
32
+ get = Util.extract(params, [
33
+ :optimization_problem_id, :directions, :format,
34
+ :route_path_output, :reoptimize
35
+ ])
36
+
37
+ Route4me.request(:post, self.url, get: get, json: json)
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,21 @@
1
+ module Route4me
2
+ class Route
3
+ def self.url
4
+ '/api.v4/route.php'
5
+ end
6
+
7
+ def self.get(params={})
8
+ get = Util.extract(params, [
9
+ :route_id, :directions, :route_path_output, :device_tracking_history,
10
+ :limit, :offset, :original
11
+ ])
12
+ Route4me.request(:get, self.url, get: get)
13
+ end
14
+
15
+ def self.delete(params={})
16
+ get = Util.extract(params, [:route_id])
17
+ status = Route4me.request(:delete, self.url, get: get)
18
+ status[:deleted]
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,17 @@
1
+ module Route4me
2
+ class Track
3
+ def self.url
4
+ '/track/set.php'
5
+ end
6
+
7
+ def self.set(params={})
8
+ get = Util.extract(params, [
9
+ :format, :member_id, :route_id, :tx_id, :vehicle_id, :course,
10
+ :speed, :lat, :lng, :altitude, :device_type, :device_guid,
11
+ :device_timestamp, :app_version
12
+ ])
13
+
14
+ Route4me.request(:get, self.url, get: get)[:status]
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,28 @@
1
+ module Route4me
2
+ module Util
3
+ def self.extract(params, keys)
4
+ s = params.select{|k,v| keys.include? k.to_sym }
5
+ Hash[s.map{|k, v| [k.to_sym, v] }]
6
+ end
7
+
8
+ def self.url_encode(key)
9
+ URI.escape(key.to_s, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]"))
10
+ end
11
+
12
+ def self.symbolize_names(object)
13
+ case object
14
+ when Hash
15
+ new = {}
16
+ object.each do |key, value|
17
+ key = (key.to_sym rescue key) || key
18
+ new[key] = symbolize_names(value)
19
+ end
20
+ new
21
+ when Array
22
+ object.map { |value| symbolize_names(value) }
23
+ else
24
+ object
25
+ end
26
+ end
27
+ end
28
+ end