module GitWand::GitHub::API::Request

Constants

ALLOWED_HTTP_METHODS
API_DOMAIN

Public Instance Methods

build_resource_uri(resource) click to toggle source
# File lib/git_wand/github/api/request.rb, line 40
def build_resource_uri(resource)
  URI("#{API_DOMAIN}/#{resource}")
end
http_request(resource:, method: :get, client:, parameters: {}, query_parameters: nil) click to toggle source
# File lib/git_wand/github/api/request.rb, line 17
def http_request(resource:, method: :get, client:, parameters: {}, query_parameters: nil)
  if ALLOWED_HTTP_METHODS.include?(method)
    net_http_class = Net::HTTP.const_get(method.to_s.capitalize.to_sym)
  else
    # TODO: raise a proper error
    raise "#{method} is not a valid HTTP method"
  end

  uri = build_resource_uri(resource)
  if query_parameters
    uri.query = URI.encode_www_form(query_parameters)
  end
  response = Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == 'https') do |http|
    request = net_http_class.new(uri)
    request["Accept"] = "application/vnd.github.v3+json"
    request["Content-Type"] = "application/json"
    request.basic_auth(client.username, client.token)
    request.body = JSON.generate(parameters)
    http.request(request)
  end
  Response.parse(response)
end