GitHub Access Token became invalid

It seems like the GitHub access token used for retrieving details about this repository from GitHub became invalid. This might prevent certain types of inspections from being run (in particular, everything related to pull requests).
Please ask an admin of your repository to re-new the access token on this website.

Route4me.handle_error()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
c 1
b 0
f 0
dl 0
loc 3
rs 10
1
require 'cgi'
2
require 'set'
3
require 'openssl'
4
require 'rest_client'
5
require 'json'
6
7
# Enums
8
require 'route4me/enum/algorithm_type'
9
require 'route4me/enum/distance_unit'
10
require 'route4me/enum/device_type'
11
require 'route4me/enum/optimization_type'
12
require 'route4me/enum/travel_mode'
13
require 'route4me/enum/metric'
14
require 'route4me/enum/direction_method'
15
require 'route4me/enum/avoid'
16
17
# Errors
18
require 'route4me/errors/route4me_error'
19
require 'route4me/errors/api_error'
20
21
# Version
22
require 'route4me/version'
23
24
# Util
25
require 'route4me/util'
26
27
# Resources
28
require 'route4me/optimization_problem'
29
# require 'route4me/address'
30
require 'route4me/route'
31
require 'route4me/track'
32
33
module Route4me
34
  class << self
35
    attr_accessor :api_key, :api_base
36
  end
37
38
  @api_base = 'http://route4me.com'
39
40
  def self.api_url(url='')
41
    @api_base + url
42
  end
43
44
  def self.uri_encode(params)
45
    params.map{ |k,v| "#{k}=#{Util.url_encode(v)}" }.join('&')
46
  end
47
48
  # codebeat:disable[LOC, ABC]
49
  def self.request(method, url, opts)
50
    unless @api_key
51
      raise ArgumentError.new('No API key provided.')
52
    end
53
54
    get = opts[:get] || {}
55
    json = opts[:json] || {}
56
57
    url = api_url(url)
58
    get[:api_key] = self.api_key
59
    url += "?#{uri_encode(get)}"
60
61
    case method.to_s.downcase.to_sym
62
    when :post, :put
63
      payload = json.to_json if json && json.any?
64
    else
65
      payload = nil
66
    end
67
68
    request_opts = {
69
      method: method, open_timeout: 30, url: url,
70
      timeout: 80, payload: payload
71
    }
72
73
    begin
74
      response = execute(request_opts)
75
    rescue SocketError => e
76
      handle_error(e)
77
    rescue RestClient::ExceptionWithResponse => e
78
      if rcode = e.http_code and rbody = e.http_body
0 ignored issues
show
Bug introduced by
You have used an assignment in a condition. Did you perhaps intend to use == instead of =?
Loading history...
79
        handle_api_error(rcode, rbody)
80
      else
81
        handle_error(e)
82
      end
83
    rescue RestClient::Exception, Errno::ECONNREFUSED => e
84
      handle_error(e)
85
    end
86
87
    Util.symbolize_names(parse(response))
88
  end
89
  # codebeat:enable[LOC, ABC]
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
120