-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathclient.rb
98 lines (77 loc) · 2.4 KB
/
client.rb
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
require 'cgi'
require 'net/http'
require 'net/https'
require 'json'
module DetectLanguage
class Client
attr_reader :configuration
def initialize(configuration)
@configuration = configuration
end
def post(method, params = {})
execute(method, params, :http_method => Net::HTTP::Post)
end
def get(method, params = {})
execute(method, params, :http_method => Net::HTTP::Get)
end
private
def execute(method, params, options)
http = setup_http_connection
http_method = options[:http_method]
request = http_method.new(request_uri(method))
if RUBY_VERSION == '1.8.7'
set_form_data_18(request, params)
else
request.set_form_data(params)
end
request['Authorization'] = 'Bearer ' + configuration.api_key.to_s
request['User-Agent'] = configuration.user_agent
response = http.request(request)
case response
when Net::HTTPSuccess, Net::HTTPUnauthorized then
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 request_uri(method)
"/#{configuration.api_version}/#{method}"
end
def setup_http_connection
http =
Net::HTTP::Proxy(configuration.proxy_host, configuration.proxy_port, configuration.proxy_user,
configuration.proxy_pass).
new(configuration.host, configuration.port)
http.read_timeout = configuration.http_read_timeout
http.open_timeout = configuration.http_open_timeout
if configuration.secure?
http.use_ssl = true
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
else
http.use_ssl = false
end
http
end
def set_form_data_18(request, params, sep = '&')
request.body = params.map {|k,v|
if v.instance_of?(Array)
v.map {|e| "#{urlencode(k.to_s)}=#{urlencode(e.to_s)}"}.join(sep)
else
"#{urlencode(k.to_s)}=#{urlencode(v.to_s)}"
end
}.join(sep)
request.content_type = 'application/x-www-form-urlencoded'
end
def urlencode(str)
CGI::escape(str)
end
end
end