class SkylabGenesis::Request

Attributes

response[R]

Public Class Methods

new(configuration) click to toggle source
# File lib/skylab_genesis/request.rb, line 13
def initialize(configuration)
  @configuration = configuration
end

Public Instance Methods

delete(endpoint) click to toggle source
# File lib/skylab_genesis/request.rb, line 25
def delete(endpoint)
  request(Net::HTTP::Delete, request_path(endpoint))
end
get(endpoint, payload = nil) click to toggle source
# File lib/skylab_genesis/request.rb, line 21
def get(endpoint, payload = nil)
  request(Net::HTTP::Get, request_path(endpoint), payload)
end
patch(endpoint, payload) click to toggle source
# File lib/skylab_genesis/request.rb, line 33
def patch(endpoint, payload)
  request(Net::HTTP::Patch, request_path(endpoint), payload)
end
post(endpoint, payload) click to toggle source
# File lib/skylab_genesis/request.rb, line 17
def post(endpoint, payload)
  request(Net::HTTP::Post, request_path(endpoint), payload)
end
put(endpoint, payload) click to toggle source
# File lib/skylab_genesis/request.rb, line 29
def put(endpoint, payload)
  request(Net::HTTP::Put, request_path(endpoint), payload)
end

Private Instance Methods

handle_response(response) click to toggle source
# File lib/skylab_genesis/request.rb, line 66
def handle_response(response)
  case @response
  when Net::HTTPUnauthorized then
    raise SkylabGenesis::ClientInvalidKey, 'Invalid api key'
  when Net::HTTPForbidden then
    raise SkylabGenesis::ClientInvalidKey, 'Invalid api key'
  when Net::HTTPNotFound then
    raise SkylabGenesis::ClientInvalidEndpoint, 'Resource not found'
  when Net::HTTPBadRequest then
    raise SkylabGenesis::ClientBadRequest, 'There was an error processing your request'
  when Net::HTTPTooManyRequests then
    raise SkylabGenesis::ClientBadRequest, 'The rate limit has been met'
  when Net::HTTPSuccess
    response
  else
    raise SkylabGenesis::ClientUnknownError, 'An error has occurred'
  end
end
request(method_klass, path, payload = {}) click to toggle source
# File lib/skylab_genesis/request.rb, line 47
def request(method_klass, path, payload = {})
  request = method_klass.new(path, 'Content-Type' => 'application/json')

  request.add_field('X-SLT-API-KEY', @configuration.api_key)
  request.add_field('X-SLT-API-CLIENT', @configuration.client_stub)

  payload = payload.to_json

  http          = Net::HTTP.new(@configuration.host, @configuration.port)
  http.use_ssl  = use_ssl?
  http.set_debug_output($stdout) if @configuration.debug

  @response = http.request(request, payload)

  handle_response(@response)
rescue Errno::ECONNREFUSED
  raise SkylabGenesis::ClientConnectionRefused, 'The connection was refused'
end
request_path(end_point) click to toggle source
# File lib/skylab_genesis/request.rb, line 39
def request_path(end_point)
  "/api/#{@configuration.api_version}/#{end_point}"
end
use_ssl?() click to toggle source
# File lib/skylab_genesis/request.rb, line 43
def use_ssl?
  @configuration.protocol == 'https'
end