Module: GitWand::GitHub::API::Request

Extended by:
Request
Included in:
Request
Defined in:
lib/git_wand/github/api/request.rb

Constant Summary collapse

API_DOMAIN =
"https://api.github.com"
ALLOWED_HTTP_METHODS =
i[get post head put delete options trace patch].to_set

Instance Method Summary collapse

Instance Method Details

#build_resource_uri(resource) ⇒ Object



37
38
39
# File 'lib/git_wand/github/api/request.rb', line 37

def build_resource_uri(resource)
  URI("#{API_DOMAIN}/#{resource}")
end

#http_request(resource:, method: :get, client:, parameters: {}) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'lib/git_wand/github/api/request.rb', line 17

def http_request(resource:, method: :get, client:, parameters: {})
  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)
  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