class TerraformEnterprise::API::Request

A wrapper for HTTP JSON-API requests to provide convenience request method wrappers.

Constants

DEFAULT_DEBUG
DEFAULT_HOST

Public Class Methods

new(options = {}) click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 11
def initialize(options = {})
  @host    = options[:host] || DEFAULT_HOST
  @token   = options[:token]
  @debug   = options[:debug] || DEFAULT_DEBUG
end

Public Instance Methods

delete(*path) click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 22
def delete(*path)
  data = path.pop if path.last.is_a?(Hash)
  request(:delete, path, data)
end
get(*path) click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 17
def get(*path)
  data = path.pop if path.last.is_a?(Hash)
  request(:get, path, data)
end
patch(*path) click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 37
def patch(*path)
  data = path.pop if path.last.is_a?(Hash)
  request(:patch, path, data)
end
post(*path) click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 27
def post(*path)
  data = path.pop if path.last.is_a?(Hash)
  request(:post, path, data)
end
put(*path) click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 32
def put(*path)
  data = path.pop if path.last.is_a?(Hash)
  request(:put, path, data)
end
request(method, path, data = {}, extra_headers = {}) click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 42
def request(method, path, data = {}, extra_headers = {})
  request_options = define_request(method, path, data, extra_headers)
  response        = execute(request_options)
  debug(request_options, response, data) if @debug
  TerraformEnterprise::API::Response.new(response)
end

Private Instance Methods

base() click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 51
def base
  "#{@host}/api/v2"
end
debug(http_request, http_response, data) click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 82
def debug(http_request, http_response, data)
  http_method = http_request[:method].to_s.upcase
  puts "[DEBUG] [REQUEST:METHOD]  #{http_method} #{http_request[:url]}"
  puts "[DEBUG] [REQUEST:HEADERS] #{http_request[:headers]}"
  puts "[DEBUG] [REQUEST:PAYLOAD] #{data}"
  puts "[DEBUG] [RESPONSE:CODE]   #{http_response.code}"
  puts "[DEBUG] [RESPONSE:BODY]   #{http_response.body}"
end
define_request(method, path, data = {}, extra_headers = {}) click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 62
def define_request(method, path, data = {}, extra_headers = {})
  request_options = {
    method:  method,
    url:     uri(path),
    headers: headers.merge(extra_headers)
  }
  if %i[get delete].include?(method)
    request_options[:headers][:params] = data
  else
    request_options[:payload] = data.is_a?(String) ? data : data.to_json
  end
  request_options
end
execute(request_params) click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 76
def execute(request_params)
  RestClient::Request.execute(request_params)
rescue RestClient::ExceptionWithResponse => ex
  ex.response
end
headers() click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 55
def headers
  {
    'Authorization' => "Bearer #{@token}",
    'Content-Type' => 'application/vnd.api+json'
  }
end
uri(path = []) click to toggle source
# File lib/terraform_enterprise/api/request.rb, line 91
def uri(path = [])
  return path if path.is_a?(String) && path.start_with?('http')
  "#{base}/#{path.map(&:to_s).join('/')}"
end