module Flinks::Request

Public Instance Methods

delete(path, params: {}, body: {}) click to toggle source

Performs a HTTP Delete request

@param [String] path @param [Hash] params @param [Hash] body

# File lib/flinks/request.rb, line 42
def delete(path, params: {}, body: {})
  request(:delete, path, params: params, body: body)
end
get(path, params: {}) click to toggle source

Performs a HTTP Get request

@param [String] path @param [Hash] params

# File lib/flinks/request.rb, line 15
def get(path, params: {})
  request(:get, path, params: params)
end
patch(path, params: {}, body: {}) click to toggle source

Performs a HTTP Patch request

@param [String] path @param [Hash] params @param [Hash] body

# File lib/flinks/request.rb, line 33
def patch(path, params: {}, body: {})
  request(:patch, path, params: params, body: body)
end
post(path, params: {}, body: {}) click to toggle source

Performs a HTTP Post request

@param [String] path @param [Hash] params @param [Hash] body

# File lib/flinks/request.rb, line 24
def post(path, params: {}, body: {})
  request(:post, path, params: params, body: body)
end

Private Instance Methods

request(method, path, params: {}, body: {}) click to toggle source

@return [HTTP::Client] @raise [Flinks::Error]

# File lib/flinks/request.rb, line 51
def request(method, path, params: {}, body: {})
  headers = {
    'Content-Type' => "application/json",
    'Accept'       => "application/json",
    'User-Agent'   => user_agent
  }

  # Build URL
  url = URI.parse(api_endpoint).merge(path)

  # Build payload
  payload = body.transform_keys { |k| k.to_s.camelize }

  # Perform request
  response = Http.headers(headers).send(method, url, params: params, json: payload)

  if debug
    p "Method: #{method}"
    p "Url: #{url}"
    p "Headers: #{headers}"
    p "Payload: #{payload}"
    p "Response: #{response}"
  end

  # Pass on errors when HTTP status included in 400 to 599
  if (400..599).include?(response.code)
    raise Error.from_response(response)

    on_error.call(response.code, response.reason, body)
  end

  # Parse body
  data = response.parse

  # Transform data
  if !raw && raw.is_a?(Hash)
    data.deep_transform_keys { |k| k.underscore }.with_indifferent_access
  else
    data
  end
end