Module: Route4me

Defined in:
lib/route4me.rb,
lib/route4me/util.rb,
lib/route4me/route.rb,
lib/route4me/track.rb,
lib/route4me/version.rb,
lib/route4me/enum/avoid.rb,
lib/route4me/enum/metric.rb,
lib/route4me/enum/device_type.rb,
lib/route4me/enum/travel_mode.rb,
lib/route4me/errors/api_error.rb,
lib/route4me/enum/distance_unit.rb,
lib/route4me/enum/algorithm_type.rb,
lib/route4me/optimization_problem.rb,
lib/route4me/enum/direction_method.rb,
lib/route4me/errors/route4me_error.rb,
lib/route4me/enum/optimization_type.rb

Defined Under Namespace

Modules: AlgorithmType, Avoid, DeviceType, DirectionMethod, DistanceUnit, Metric, OptimizationType, TravelMode, Util Classes: ApiError, OptimizationProblem, Route, Route4meError, Track

Constant Summary collapse

VERSION =
'1.1.0'

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.api_baseObject

Returns the value of attribute api_base.



37
38
39
# File 'lib/route4me.rb', line 37

def api_base
  @api_base
end

.api_keyObject

Returns the value of attribute api_key.



37
38
39
# File 'lib/route4me.rb', line 37

def api_key
  @api_key
end

Class Method Details

.api_url(url = '') ⇒ Object



42
43
44
# File 'lib/route4me.rb', line 42

def self.api_url(url='')
  @api_base + url
end

.execute(attrs) ⇒ Object



91
92
93
# File 'lib/route4me.rb', line 91

def self.execute(attrs)
  RestClient::Request.execute(attrs)
end

.handle_api_error(code, body) ⇒ Object

Raises:



109
110
111
112
113
114
115
116
117
118
# File 'lib/route4me.rb', line 109

def self.handle_api_error(code, body)
  begin
    error_message = JSON.parse(body)
    error_message = error_message['errors']
  rescue
    raise Route4meError
  end

  raise ApiError, code, error_message
end

.handle_error(e) ⇒ Object

Raises:



105
106
107
# File 'lib/route4me.rb', line 105

def self.handle_error(e)
   raise Route4meError, e.message
end

.parse(response) ⇒ Object



95
96
97
98
99
100
101
102
103
# File 'lib/route4me.rb', line 95

def self.parse(response)
  begin
    response = JSON.parse(response.body)
  rescue JSON::ParserError
    response = nil
  end

  response
end

.request(method, url, opts) ⇒ Object



50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/route4me.rb', line 50

def self.request(method, url, opts)
  unless @api_key
    raise ArgumentError.new('No API key provided.')
  end

  get = opts[:get] || {}
  json = opts[:json] || {}

  url = api_url(url)
  get[:api_key] = self.api_key
  url += "?#{uri_encode(get)}"

  case method.to_s.downcase.to_sym
  when :post, :put
    payload = json.to_json if json && json.any?
  else
    payload = nil
  end

  request_opts = {
    method: method, open_timeout: 30, url: url,
    timeout: 80, payload: payload
  }

  begin
    response = execute(request_opts)
  rescue SocketError => e
    handle_error(e)
  rescue RestClient::ExceptionWithResponse => e
    if rcode = e.http_code and rbody = e.http_body
      handle_api_error(rcode, rbody)
    else
      handle_error(e)
    end
  rescue RestClient::Exception, Errno::ECONNREFUSED => e
    handle_error(e)
  end

  Util.symbolize_names(parse(response))
end

.uri_encode(params) ⇒ Object



46
47
48
# File 'lib/route4me.rb', line 46

def self.uri_encode(params)
  params.map{ |k,v| "#{k}=#{Util.url_encode(v)}" }.join('&')
end