class HostradoAPI::V1::Connection
Attributes
api_server[R]
domains[RW]
token[R]
Public Class Methods
new(token, api_server = nil)
click to toggle source
# File lib/v1/connection.rb, line 8 def initialize(token, api_server = nil) @token = token @api_server = api_server ? api_server : 'https://api.hostrado.com/v1' @domains = HostradoAPI::V1::Domains.new(self) end
Public Instance Methods
send_request(method, path, params = {})
click to toggle source
# File lib/v1/connection.rb, line 15 def send_request(method, path, params = {}) timeout = params[:timeout] ? params[:timeout].to_i : 10 params.delete(:timeout) uri = URI("#{@api_server}/#{path}") request_params = format_params(params) unless format_params(params).empty? begin request = Net::HTTP.start(uri.host, uri.port, use_ssl: (uri.scheme == 'https'), open_timeout: timeout) response = request.send_request(method.to_s.upcase, uri.path.empty? ? '/' : uri.path, request_params, { 'X-Hostrado-Token': @token }) raise RemoteInternalServerError.new(response.body) if response.code == '500' response_body = JSON.parse(response.body) raise InvalidAccessTokenError.new(response_body['message']) if response.code == '401' && response_body['error'] == 'invalid_api_token' raise HostradoAPIError.new(response.body) unless response.code == '200' [response_body, response] rescue Errno::ECONNREFUSED, SocketError, Net::OpenTimeout => err raise ConnectionError.new(err.to_s) rescue JSON::ParserError => err raise ResponseFormatError.new("API server sent a non-JSON string: #{response.body}") end end
Private Instance Methods
format_params(params)
click to toggle source
# File lib/v1/connection.rb, line 44 def format_params(params) values = params.values formatted_params = "" params.keys.each_with_index do |param, index| formatted_params += "&" if index != 0 if values[index].is_a?(Array) values[index].each do |array_value| formatted_params += '&' if formatted_params[-1] != '&' && formatted_params.length > 0 formatted_params += "#{CGI.escape(param.to_s)}[]=#{CGI.escape(array_value.to_s)}" end else formatted_params += "#{CGI.escape(param.to_s)}=#{CGI.escape(values[index].to_s)}" end end formatted_params end