class UnofficialBuildkiteClient::HttpClient

Attributes

logger[R]

Public Class Methods

new(authorization_header: nil, logger:) click to toggle source
# File lib/unofficial_buildkite_client/http_client.rb, line 7
def initialize(authorization_header: nil, logger:)
  @authorization_header = authorization_header
  @logger = logger
end

Public Instance Methods

request(method, url, params: nil, json: true, auth: true) click to toggle source
# File lib/unofficial_buildkite_client/http_client.rb, line 12
def request(method, url, params: nil, json: true, auth: true)
  uri = URI.parse(url)
  http = Net::HTTP.new(uri.host, uri.port)
  http.use_ssl = true

  logger.info("method: #{method} url: #{url} params: #{params.inspect}")

  request =
  case method
  when :get
    uri.query = URI.encode_www_form(params) if params
    Net::HTTP::Get.new(uri.request_uri)
  when :post
    Net::HTTP::Post.new(uri.request_uri).tap do |req|
      req.body = params.to_json if params
    end
  else
    raise NotImplementedError
  end

  request["Content-Type"] = request["Accept"] = "application/json" if json
  request["Authorization"] = @authorization_header if auth

  response = http.request(request)

  case response
  when Net::HTTPSuccess
    if json
      JSON.parse(response.body, symbolize_names: true)
    else
      response.body
    end
  when Net::HTTPRedirection
    request(:get, response["location"], json: json, auth: false)
  else
    response.error!
  end
end

Private Instance Methods

json_headers() click to toggle source
# File lib/unofficial_buildkite_client/http_client.rb, line 55
def json_headers
  {
    "Content-Type" => "application/json",
    "Accept" => "application/json",
  }
end