class Hawkei::APIResource

Hawkei API Resource

Define the API requests methods

Public Class Methods

class_name() click to toggle source

@return [String] the class name

# File lib/hawkei/api_resource.rb, line 49
def class_name
  name.split('::')[-1]
end
request(method, path, payload = {}, options = {}) click to toggle source

Send a request to the API

@param [Symbol] method for the request @param [String] endpoint for the request @param [Hash] options @param [Hash] Payload

@return [Hash] response @raise [Hawkei::RequestError] if the request is invalid rubocop:disable Metrics/AbcSize

# File lib/hawkei/api_resource.rb, line 64
def request(method, path, payload = {}, options = {})
  payload[:sent_at] = Time.now.utc.iso8601(3)
  payload    = Util.deep_obfuscate_value(payload, configurations.obfuscated_fields)
  url_params = Util.encode_parameters(payload) if method == :get
  uri        = build_endpoint_url(path, url_params)

  request_options = Util.compact(
    method: method,
    url: uri.to_s,
    payload: payload.to_json,
    proxy: configurations.proxy_url,
    use_ssl: configurations.http_secure
  ).merge(headers(options)).merge(options)

  Request.execute(request_options).body
rescue Hawkei::RequestError => error
  return error.http_body if error.http_status == 422

  raise
end
resource_name() click to toggle source

@return [String] resource name

# File lib/hawkei/api_resource.rb, line 43
def resource_name
  Util.underscore("#{class_name}s")
end
resource_path(path = nil) click to toggle source

@return [String] resource path

# File lib/hawkei/api_resource.rb, line 37
def resource_path(path = nil)
  "/api/#{configurations.api_version}/#{path || @resource_name || CGI.escape(resource_name)}"
end

Private Class Methods

build_endpoint_url(path, params = nil) click to toggle source

rubocop:enable Metrics/AbcSize

# File lib/hawkei/api_resource.rb, line 88
def build_endpoint_url(path, params = nil)
  host, port = configurations.api_host.split(':')
  port       = port.to_i if port

  url_params = Util.compact(
    host: host,
    path: path,
    port: port,
    query: params
  )

  return URI::HTTPS.build(url_params) if configurations.http_secure

  URI::HTTP.build(url_params)
end
configurations() click to toggle source
# File lib/hawkei/api_resource.rb, line 124
def configurations
  Hawkei.configurations
end
headers(options) click to toggle source
# File lib/hawkei/api_resource.rb, line 112
def headers(options)
  {
    headers: {
      accept: 'application/json',
      content_type: 'application/json',
      x_api_key: options.delete(:api_key) || configurations.api_key,
      x_space_name: options.delete(:space_name) || configurations.space_name,
      x_environment_name: options.delete(:environment_name) || configurations.environment_name,
    },
  }
end
ssl_options() click to toggle source
# File lib/hawkei/api_resource.rb, line 104
def ssl_options
  return {} unless configurations.http_secure

  {
    verify_mode: OpenSSL::SSL::VERIFY_PEER,
  }
end

Public Instance Methods

request(method, resource_path, payload = {}, options = {}) click to toggle source

Send a request to the API

@param [Symbol] method for the request @param [String] endpoint for the request @param [Hash] options @param [Hash] Payload

@return [Hash] response @raise [Hawkei::RequestError] if the request is invalid

# File lib/hawkei/api_resource.rb, line 29
def request(method, resource_path, payload = {}, options = {})
  self.class.request(method, resource_path, payload, options)
end
resource_name() click to toggle source

@return [String] resource name

# File lib/hawkei/api_resource.rb, line 9
def resource_name
  self.class.resource_name
end
resource_path(path = nil) click to toggle source

@return [String] resource path

# File lib/hawkei/api_resource.rb, line 15
def resource_path(path = nil)
  self.class.resource_path(path)
end