class UnforBaseApi

Public Class Methods

new(args={}) click to toggle source
# File lib/unfor_base_api.rb, line 8
def initialize(args={})
  @endpoint = args[:endpoint]
  @access_token = args[:access_token]

  if @endpoint.blank?
    raise 'endpoint is required!'
  end
end

Public Instance Methods

last_response() click to toggle source
# File lib/unfor_base_api.rb, line 17
def last_response
  @last_response
end
last_result() click to toggle source
# File lib/unfor_base_api.rb, line 21
def last_result
  @last_result
end

Protected Instance Methods

delete_request(action, headers={}) click to toggle source
# File lib/unfor_base_api.rb, line 82
def delete_request(action, headers={})
  begin
    headers.merge!({ authorization: "Token token=\"#{@access_token}\"" })
    response_kind = extract_response_kind(headers)
    response = RestClient.delete("#{@endpoint}#{action}", headers)
    parse_response(response_kind, response)
  rescue => e
    parse_response('object', e.response)
  end
end
extract_response_kind(headers) click to toggle source
# File lib/unfor_base_api.rb, line 93
def extract_response_kind(headers)
  api_response_kind = headers.delete('api_response_kind')
  api_response_kind = headers.delete(:api_response_kind) if api_response_kind.nil?
  api_response_kind.nil? ? 'object' : api_response_kind
end
get_paging_response(response) click to toggle source
# File lib/unfor_base_api.rb, line 150
def get_paging_response(response)
  OpenStruct.new({
    results: response.body,
    paging: response.headers.link
  })
end
get_persistance_response(response) click to toggle source
# File lib/unfor_base_api.rb, line 134
def get_persistance_response(response)
  if response.headers.warning.nil?
    OpenStruct.new({
      success: true,
      entity: response.body,
      errors: []
    })
  else
    OpenStruct.new({
      success: false,
      entity: nil,
      errors: response.headers.warning.errors
    })
  end
end
get_request(action, params={}, headers={}) click to toggle source
# File lib/unfor_base_api.rb, line 27
def get_request(action, params={}, headers={})
  begin
    headers.merge!({ authorization: "Token token=\"#{@access_token}\"" })
    response_kind = extract_response_kind(headers)
    response = RestClient.get("#{@endpoint}#{action}", {params: params}.merge(headers))
    parse_response(response_kind, response)
  rescue => e
    parse_response('object', e.response)
  end
end
head_request(action, headers={}) click to toggle source
# File lib/unfor_base_api.rb, line 71
def head_request(action, headers={})
  begin
    headers.merge!({ authorization: "Token token=\"#{@access_token}\"" })
    response_kind = extract_response_kind(headers)
    response = RestClient.head("#{@endpoint}#{action}", headers)
    parse_response(response_kind, response)
  rescue => e
    parse_response('object', e.response)
  end
end
parse_response(api_response_kind, response) click to toggle source
# File lib/unfor_base_api.rb, line 99
def parse_response(api_response_kind, response)
  @last_response = response

  result = OpenStruct.new
  result.status_code = response.code

  if api_response_kind == 'object'
    result.headers = OpenStruct.new

    response.headers.each do |key, value|
      parsed_value = JSON.parse(value, object_class: OpenStruct) rescue value
      result.headers.send("#{key}=", parsed_value)
    end

    result.body = (JSON.parse(response.body, object_class: OpenStruct) rescue response.body)
    result.body = nil if result.body == 'null'
  elsif api_response_kind == 'hash'
    result.headers = { }

    response.headers.each do |key, value|
      result.headers[key] = JSON.parse(value) rescue value
    end

    result.body = (JSON.parse(response.body) rescue response.body)
    result.body = nil if result.body == 'null'
  else
    result.headers = response.headers
    result.body = response.body
  end

  @last_result = result

  result
end
patch_request(action, params={}, headers={}) click to toggle source
# File lib/unfor_base_api.rb, line 60
def patch_request(action, params={}, headers={})
  begin
    headers.merge!({ authorization: "Token token=\"#{@access_token}\"" })
    response_kind = extract_response_kind(headers)
    response = RestClient.patch("#{@endpoint}#{action}", params, headers)
    parse_response(response_kind, response)
  rescue => e
    parse_response('object', e.response)
  end
end
post_request(action, params={}, headers={}) click to toggle source
# File lib/unfor_base_api.rb, line 38
def post_request(action, params={}, headers={})
  begin
    headers.merge!({ authorization: "Token token=\"#{@access_token}\"" })
    response_kind = extract_response_kind(headers)
    response = RestClient.post("#{@endpoint}#{action}", params, headers)
    parse_response(response_kind, response)
  rescue => e
    parse_response('object', e.response)
  end
end
put_request(action, params={}, headers={}) click to toggle source
# File lib/unfor_base_api.rb, line 49
def put_request(action, params={}, headers={})
  begin
    headers.merge!({ authorization: "Token token=\"#{@access_token}\"" })
    response_kind = extract_response_kind(headers)
    response = RestClient.put("#{@endpoint}#{action}", params, headers)
    parse_response(response_kind, response)
  rescue => e
    parse_response('object', e.response)
  end
end