-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathclient.rb
More file actions
75 lines (59 loc) · 1.73 KB
/
client.rb
File metadata and controls
75 lines (59 loc) · 1.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
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
require 'net/http'
require 'net/https'
require 'json'
module DetectLanguage
class Client
attr_reader :config
def initialize(config)
@config = config
end
def post(path, payload = {})
execute(Net::HTTP::Post, path, body: payload.to_json)
end
def get(path)
execute(Net::HTTP::Get, path)
end
private
def execute(method, path, body: nil)
request = method.new(base_uri.path + path)
request.body = body
request['Content-Type'] = 'application/json'
request['Authorization'] = 'Bearer ' + config.api_key.to_s
request['User-Agent'] = config.user_agent
response = connection.request(request)
case response
when Net::HTTPSuccess, Net::HTTPUnauthorized
parse_response(response.body)
else
raise(Error, "Failure: #{response.class}")
end
end
def parse_response(response_body)
response = JSON.parse(response_body)
if response.is_a?(Array) || response["error"].nil?
response
else
raise(Error, response["error"]["message"])
end
end
def base_uri
@base_uri ||= URI(config.base_url)
end
def connection
@connection ||= setup_connection
end
def setup_connection
http = if config.proxy
proxy = URI(config.proxy)
Net::HTTP.new(base_uri.hostname, base_uri.port, proxy.hostname, proxy.port, proxy.user, proxy.password)
else
Net::HTTP.new(base_uri.hostname, base_uri.port)
end
http.use_ssl = base_uri.scheme == 'https'
http.verify_mode = OpenSSL::SSL::VERIFY_PEER if http.use_ssl?
http.read_timeout = config.http_read_timeout
http.open_timeout = config.http_open_timeout
http
end
end
end