class SendWithUs::ApiRequest

Attributes

response[R]

Public Class Methods

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

Public Instance Methods

delete(endpoint) click to toggle source
# File lib/send_with_us/api_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/send_with_us/api_request.rb, line 21
def get(endpoint, payload = nil)
  request(Net::HTTP::Get, request_path(endpoint), payload)
end
post(endpoint, payload) click to toggle source
# File lib/send_with_us/api_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/send_with_us/api_request.rb, line 29
def put(endpoint, payload)
  request(Net::HTTP::Put, request_path(endpoint), payload)
end

Private Instance Methods

request(method_klass, path, payload=nil) click to toggle source
# File lib/send_with_us/api_request.rb, line 44
def request(method_klass, path, payload=nil)
  request = method_klass.new(path, {'Content-Type' =>'application/json'})
  request.add_field('X-SWU-API-KEY', @configuration.api_key)
  request.add_field('X-SWU-API-CLIENT', @configuration.client_stub)

  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)

  case @response
  when Net::HTTPNotFound then
    raise SendWithUs::ApiInvalidEndpoint, path
  when Net::HTTPForbidden then
    raise SendWithUs::ApiInvalidKey, "Invalid api key: #{@configuration.api_key}"
  when Net::HTTPBadRequest then
    raise SendWithUs::ApiBadRequest.new("There was an error processing your request: #{@response.body.force_encoding('UTF-8')}, with payload: #{payload}")
  when Net::HTTPSuccess
    puts @response.body if @configuration.debug
    @response
  else
    raise SendWithUs::ApiUnknownError, "A #{@response.code} error has occurred: '#{@response.message.force_encoding('UTF-8')}'"
  end
rescue Errno::ECONNREFUSED
  raise SendWithUs::ApiConnectionRefused, 'The connection was refused'
end
request_path(end_point) click to toggle source
# File lib/send_with_us/api_request.rb, line 36
def request_path(end_point)
  "/api/v#{@configuration.api_version}/#{end_point}"
end
use_ssl?() click to toggle source
# File lib/send_with_us/api_request.rb, line 40
def use_ssl?
  @configuration.protocol == 'https'
end