Sha256: 25da1a74cfa2f2cd2129fc09e23e528f2cc7826d7f4bf76e0d7a70809c2251da

Contents?: true

Size: 1.72 KB

Versions: 13

Compression:

Stored size: 1.72 KB

Contents

# frozen_string_literal: true

require 'base64'
require 'json'
require 'logger'
require 'rest-client'

require_relative '../checks'

module Github
  # It's a GitHub client. I know there is an official client library.
  class Client
    include Checks

    def initialize(access_token:, logger: Logger.new($stdout))
      @access_token = check_non_empty_string(access_token: access_token)
      @logger = check_non_nil(logger: logger)
    end

    def get(url)
      check_non_empty_string(url: url)

      @logger.info "#{self.class} GET #{url}"
      response = RestClient.get(
        url,
        {
          'Accept' => 'application/vnd.github+json',
          'Authorization' => "Bearer #{@access_token}",
          'X-GitHub-Api-Version' => '2022-11-28'
        }
      )

      raise "GET #{url} returned #{response.code}, expected 200: #{response}" unless response.code == 200

      JSON.parse(response)
    rescue RestClient::RequestFailed => e
      @logger.error("#{self.class} GET #{url} failed: #{e.response.code} #{e.response}")
      raise e
    end

    def post(url, request)
      check_non_empty_string(url: url)
      check_is_a(request: [Hash, request])

      @logger.info "#{self.class} POST #{url}"
      response = RestClient.post(
        url,
        request.to_json,
        {
          'Accept' => 'application/vnd.github+json',
          'Authorization' => "Bearer #{@access_token}",
          'X-GitHub-Api-Version' => '2022-11-28'
        }
      )
      raise "POST #{url} failed: #{response.code} #{response}" unless response.code == 201

      JSON.parse(response)
    rescue RestClient::RequestFailed => e
      @logger.error("#{self.class} POST #{url} failed: #{e.response.code} #{e.response}")
      raise e
    end
  end
end

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
sqlui-0.1.84 app/github/client.rb
sqlui-0.1.83 app/github/client.rb
sqlui-0.1.82 app/github/client.rb
sqlui-0.1.81 app/github/client.rb
sqlui-0.1.80 app/github/client.rb
sqlui-0.1.79 app/github/client.rb
sqlui-0.1.78 app/github/client.rb
sqlui-0.1.77 app/github/client.rb
sqlui-0.1.76 app/github/client.rb
sqlui-0.1.75 app/github/client.rb
sqlui-0.1.74 app/github/client.rb
sqlui-0.1.73 app/github/client.rb
sqlui-0.1.72 app/github/client.rb