module Zzlink::Client
The HTTP client.
Attributes
access_key[RW]
api_url[RW]
secret_key[RW]
Public Instance Methods
delete(path, query_params = {})
click to toggle source
# File lib/zzlink/client.rb, line 59 def delete(path, query_params = {}) uri = uri_of(path, query_params) resp = Net::HTTP.start(uri.host, uri.port, nil, nil, nil, nil, use_ssl: (uri.scheme == 'https')) do |http| req = Net::HTTP::Delete.new(uri.request_uri) set_request_headers(req) http.request(req) end check_and_return(resp) end
get(path, query_params = {})
click to toggle source
Do a GET request.
# File lib/zzlink/client.rb, line 21 def get(path, query_params = {}) uri = uri_of(path, query_params) resp = Net::HTTP.start(uri.host, uri.port, nil, nil, nil, nil, use_ssl: (uri.scheme == 'https')) do |http| req = Net::HTTP::Get.new(uri.request_uri) set_request_headers(req) http.request(req) end check_and_return(resp) end
post(path, data = {})
click to toggle source
# File lib/zzlink/client.rb, line 31 def post(path, data = {}) uri = uri_of(path) resp = Net::HTTP.start(uri.host, uri.port, nil, nil, nil, nil, use_ssl: (uri.scheme == 'https')) do |http| req = Net::HTTP::Post.new(uri.request_uri) set_request_headers(req) unless data.empty? req['Content-Type'] = 'application/json' req.body = data.to_json end http.request(req) end check_and_return(resp) end
put(path, data = {})
click to toggle source
# File lib/zzlink/client.rb, line 45 def put(path, data = {}) uri = uri_of(path) resp = Net::HTTP.start(uri.host, uri.port, nil, nil, nil, nil, use_ssl: (uri.scheme == 'https')) do |http| req = Net::HTTP::Put.new(uri.request_uri) set_request_headers(req) unless data.empty? req['Content-Type'] = 'application/json' req.body = data.to_json end http.request(req) end check_and_return(resp) end
Private Instance Methods
check_and_return(response)
click to toggle source
# File lib/zzlink/client.rb, line 98 def check_and_return(response) if response.is_a?(Net::HTTPSuccess) response.body else raise Error.new(response.code, response.body) end end
set_request_headers(request)
click to toggle source
Set headers for the HTTP request. @param request [HttpRequest] the request object.
# File lib/zzlink/client.rb, line 87 def set_request_headers(request) host = self.name + '.' + self.version date = Time.now().gmtime.strftime('%a, %d %b %Y %H:%M:%S %Z') signing_string = "host: #{host}\n#{request.method} #{request.path} HTTP/1.1\ndate: #{date}" signature = Base64.strict_encode64(OpenSSL::HMAC.digest("SHA256", Client.secret_key, signing_string)) request['Accept'] = 'application/json' request['Host'] = host request['Date'] = date request['Authorization'] = "hmac username=\"#{Client.access_key}\", algorithm=\"hmac-sha256\", headers=\"host request-line date\", signature=\"#{signature}\"" end
uri_of(path, query_params = {})
click to toggle source
Make URI object from request path and query parameters. @param path [String] request path (without scheme, host and port). @param query_params [Hash] optional query parameters. @return the URI object.
# File lib/zzlink/client.rb, line 75 def uri_of(path, query_params = {}) url = Client.api_url + path if query_params.empty? URI(url) else queries = URI.encode_www_form(query_params) url.include?('?') ? URI(url + '&' + queries) : URI(url + '?' + queries) end end