module Truework::HTTPRequest

Constants

EXCEPTION_MAP

Public Instance Methods

delete(path, params = {}) click to toggle source
# File lib/truework/http_request.rb, line 24
def delete(path, params = {})
  request(:delete, path, params)
end
get(path, params = {}) click to toggle source
# File lib/truework/http_request.rb, line 12
def get(path, params = {})
  request(:get, path, params)
end
post(path, params = {}) click to toggle source
# File lib/truework/http_request.rb, line 16
def post(path, params = {})
  request(:post, path, params)
end
put(path, params = {}) click to toggle source
# File lib/truework/http_request.rb, line 20
def put(path, params = {})
  request(:put, path, params)
end
request(method, path, params = {}) click to toggle source
# File lib/truework/http_request.rb, line 28
def request(method, path, params = {})
  uri = URI.parse("#{Truework.api_base}#{path}")

  request = build_request(method, uri, params)
  http = Net::HTTP.new(uri.host, uri.port)

  http.use_ssl = true if uri.scheme == 'https'

  response = http.request(request)
  handle_errors(response)
  response
end

Private Instance Methods

build_request(method, uri, params) click to toggle source

rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity, Metrics/MethodLength

# File lib/truework/http_request.rb, line 79
def build_request(method, uri, params)
  klass = case method
          when :get
            Net::HTTP::Get
          when :post
            Net::HTTP::Post
          when :put
            Net::HTTP::Put
          when :delete
            Net::HTTP::Delete
          end

  case method
  when :get, :delete
    uri.query = URI.encode_www_form(params) if params && !params.empty?
    req = klass.new(uri.request_uri)
  when :post, :put
    req = klass.new(uri.request_uri)
    req.body = JSON.generate(params) unless params.empty?
  end

  req['Content-Type'] = 'application/json'
  req['Accept'] = "application/json#{"; version=#{Truework.api_version}" if Truework.api_version}"
  req['User-Agent'] = "Truework Ruby SDK #{Truework::VERSION};"\
                      "#{RUBY_PLATFORM};#{RUBY_ENGINE};#{RUBY_VERSION} p#{RUBY_PATCHLEVEL}"
  req['Authorization'] = "Bearer #{Truework.api_key}"

  req
end
error_message_from_response(response) click to toggle source
# File lib/truework/http_request.rb, line 68
def error_message_from_response(response)
  body = response.body
  json = JSON.parse(body) if body && body.strip != ''
  return json['error'] if json&.key?('error')

  body
rescue JSON::ParserError
  body
end
handle_errors(response) click to toggle source
# File lib/truework/http_request.rb, line 43
def handle_errors(response)
  case response
  when Net::HTTPSuccess
    response
  else
    EXCEPTION_MAP.each do |response_class, exception_class|
      raise exception_class, error_message_from_response(response) if response.is_a?(response_class)
    end

    raise Truework::UnexpectedHTTPException, "#{response.code} #{response.body}"
  end
end