class Github::Repository

Constants

InvalidRemoteOrigin
InvalidRepositoryDirectory
MissingRemoteOrigin

Attributes

host[R]
name[R]
owner[R]
repository[R]

Public Class Methods

new(dir) click to toggle source
# File lib/github/repository.rb, line 12
def initialize(dir)
  @repository = Rugged::Repository.new(dir)

  origin = @repository.remotes['origin']
  raise MissingRemoteOrigin unless origin

  matches = origin.url.match(/\A(git@|https:\/\/)([^\/:]+)(\/|:)([^\/:]+)\/([^\/]+)\.git\z/)
  unless matches
    raise InvalidRemoteOrigin, 'Invalid remote url'
  end

  @host, @owner, @name = matches[2], matches[4], matches[5]
  unless Github::CLI.config.keys.include?(@host)
    raise InvalidRemoteOrigin, 'Unrecognized git host'
  end
rescue Rugged::RepositoryError
  raise InvalidRepositoryDirectory
end

Public Instance Methods

id() click to toggle source
# File lib/github/repository.rb, line 31
def id
  "#{owner}/#{name}"
end
issue(number) click to toggle source
# File lib/github/repository.rb, line 47
def issue(number)
  client.issues.get(
    user: owner,
    repo: name,
    number: number
  )
end
issue_comments(number) click to toggle source
# File lib/github/repository.rb, line 55
def issue_comments(number)
  client.issues.comments.list(
    user: owner,
    repo: name,
    number: number
  )
end
issues(state: 'open', sort: 'updated', direction: 'desc', page: 1, per_page: 10) click to toggle source
# File lib/github/repository.rb, line 35
def issues(state: 'open', sort: 'updated', direction: 'desc', page: 1, per_page: 10)
  client.issues.list(
    user: owner,
    repo: name,
    state: state,
    sort: sort,
    direction: direction,
    page: page,
    per_page: per_page
  )
end
pull_request(number) click to toggle source
# File lib/github/repository.rb, line 75
def pull_request(number)
  client.pull_requests.get(
    user: owner,
    repo: name,
    number: number
  )
end
pull_request_comments(number) click to toggle source
# File lib/github/repository.rb, line 99
def pull_request_comments(number)
  client.pull_requests.comments(
    user: owner,
    repo: name,
    number: number
  )
end
pull_request_commits(number) click to toggle source
# File lib/github/repository.rb, line 83
def pull_request_commits(number)
  client.pull_requests.commits(
    user: owner,
    repo: name,
    number: number
  )
end
pull_request_files(number) click to toggle source
# File lib/github/repository.rb, line 91
def pull_request_files(number)
  client.pull_requests.files(
    user: owner,
    repo: name,
    number: number
  )
end
pull_requests(state: 'open', sort: 'updated', direction: 'desc', page: 1, per_page: 10) click to toggle source
# File lib/github/repository.rb, line 63
def pull_requests(state: 'open', sort: 'updated', direction: 'desc', page: 1, per_page: 10)
  client.pull_requests.list(
    user: owner,
    repo: name,
    state: state,
    sort: sort,
    direction: direction,
    page: page,
    per_page: per_page
  )
end

Private Instance Methods

client() click to toggle source
# File lib/github/repository.rb, line 111
def client
  @client ||= Github.new do |c|
    c.oauth_token = Github::CLI.config[host]['access_token']
    c.endpoint = "https://#{host}/api/v3/" if host != 'github.com'
  end
end