class Oshpark::Connection

Attributes

api_endpoint[RW]

Public Class Methods

new(endpoint_url) click to toggle source
# File lib/oshpark/connection.rb, line 14
def initialize endpoint_url
  self.api_endpoint = endpoint_url
end

Public Instance Methods

request(method, endpoint, params={}) click to toggle source
# File lib/oshpark/connection.rb, line 18
def request method, endpoint, params={}, token
  method = method[0].upcase + method[1..-1]
  uri = uri_for endpoint

  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true if uri.port == 443

  request = Net::HTTP.const_get(method).new(uri.path)

  default_headers(token).each do |header, value|
    request[header] = value
  end

  if params.keys.include? :file
    boundary = MicroToken.generate 20
    request.body   = "--#{boundary}\r\n" +
                     params.to_multipart.join('--' + boundary + "\r\n") +
                     "--#{boundary}--\r\n"
    request['Content-Type'] = "multipart/form-data; boundary=#{boundary}"

  else
    request.body = params.to_query
  end

  response = http.request(request)

  json = if response.body.size >= 2
           JSON.parse(response.body)
         else
           {}
         end

  case response.code.to_i
  when 401
    raise Unauthorized,  json['error']
  when 404
    raise NotFound,      json['error']
  when 422
    raise Unprocessable, json['error']
  when 400...499
    raise HttpError,     json['error']
  when 500...599
    raise ServerError,   json['error']
  end

  json

rescue JSON::ParserError => e
  raise ServerError,  "Bad response from server: #{e.message}"
end

Private Instance Methods

default_headers(token=nil) click to toggle source
# File lib/oshpark/connection.rb, line 77
def default_headers token=nil
  header = {
    'Accept'       => 'application/json',
    # 'Content-Type' => 'application/json'
  }
  header['Authorization'] = token.token if token
  header
end
prepare_params(params) click to toggle source
# File lib/oshpark/connection.rb, line 86
def prepare_params params
  if params.keys.include? :file
    params.to_multipart
  else
    params.to_query
  end
end
uri_for(endpoint) click to toggle source
# File lib/oshpark/connection.rb, line 73
def uri_for endpoint
  URI("#{api_endpoint}/#{endpoint}")
end