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