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
|
module Net
module Hippie
class Client
DEFAULT_HEADERS = {
'Accept' => 'application/json',
'Content-Type' => 'application/json',
'User-Agent' => "net/hippie #{Net::Hippie::VERSION}",
}
def initialize(headers: DEFAULT_HEADERS, certificate: nil, key: nil, mapper: JsonMapper.new)
@certificate = certificate
@default_headers = headers
@key = key
@mapper = mapper
end
def execute(uri, request)
http_for(uri).request(request)
end
def get(uri, headers: {}, body: {})
request = request_for(Net::HTTP::Get, uri, headers: headers, body: body)
response = execute(uri, request)
if block_given?
yield request, response
else
response
end
end
def post(uri, headers: {}, body: {})
request = request_for(Net::HTTP::Post, uri, headers: headers, body: body)
response = execute(uri, request)
if block_given?
yield request, response
else
response
end
end
def put(uri, headers: {}, body: {})
request = request_for(Net::HTTP::Put, uri, headers: headers, body: body)
response = execute(uri, request)
if block_given?
yield request, response
else
response
end
end
private
attr_reader :default_headers, :certificate, :key
attr_reader :mapper
def http_for(uri)
http = Net::HTTP.new(uri.host, uri.port)
http.read_timeout = 30
http.use_ssl = uri.is_a?(URI::HTTPS)
http.set_debug_output(Net::Hippie.logger)
http.cert = OpenSSL::X509::Certificate.new(certificate) if certificate
http.key = OpenSSL::PKey::RSA.new(key) if key
http
end
def request_for(type, uri, headers: {}, body: {})
type.new(uri, default_headers.merge(headers)).tap do |x|
x.body = mapper.map_from(body) unless body.empty?
end
end
end
end
end
|