class Ghrt::Github

Public Class Methods

new(repo, verbose) click to toggle source
# File lib/ghrt/github.rb, line 11
def initialize(repo, verbose)
  @repo = repo
  @username = ENV['GITHUB_USERNAME']
  @token = ENV['GITHUB_TOKEN']
  raise 'GITHUB_USERNAME and GITHUB_TOKEN environment variables must be set' unless @username && @token

  @verbose = verbose
end

Public Instance Methods

review_comments(pull_request, since) click to toggle source
# File lib/ghrt/github.rb, line 20
def review_comments(pull_request, since)
  response = []
  page = 1

  loop do
    paged_response = query_github("/pulls/#{pull_request}/comments?since=#{since}&per_page=100&page=#{page}")
    break if paged_response.empty?

    response.concat(paged_response)
    page += 1
  end

  response.select do |comment|
    comment['user']['login'] == @username &&
    DateTime.parse(comment['created_at']) >= DateTime.parse(since) if since
  end
end

Private Instance Methods

auth_header() click to toggle source
# File lib/ghrt/github.rb, line 60
def auth_header
  auth_header = "Basic #{Base64.urlsafe_encode64("#{@username}:#{@token}")}"
  puts auth_header if @verbose
  auth_header
end
parse_response(response) click to toggle source
# File lib/ghrt/github.rb, line 53
def parse_response(response)
  puts response.code if @verbose
  raise "Unexpected API response status #{response.code}" unless response.code == '200'

  JSON.parse(response.read_body)
end
query_github(path) click to toggle source
# File lib/ghrt/github.rb, line 40
def query_github(path)
  url = URI("https://api.github.com/repos/#{@repo}#{path}")
  puts url if @verbose

  http = Net::HTTP.new(url.host, url.port)
  http.use_ssl = true

  request = Net::HTTP::Get.new(url)
  request['Authorization'] = auth_header

  parse_response(http.request(request))
end
validate_envars() click to toggle source
# File lib/ghrt/github.rb, line 66
def validate_envars
  return unless ENV['GITHUB_USERNAME'] && ENV['GITHUB_TOKEN']

  raise 'GITHUB_USERNAME and GITHUB_TOKEN environment variables have not been set'
end