class Git::Pr::GitHub

Public Class Methods

new(git_properties) click to toggle source
# File lib/git/pr/github.rb, line 8
def initialize(git_properties)
  @git = git_properties

  Octokit.configure do |c|
    c.login = @git.login
    c.password = @git.api_token
    c.api_endpoint = @git.api_endpoint unless @git.api_endpoint.empty?
    c.auto_paginate = true
  end
end

Public Instance Methods

list_pull_requests(profile, mine) click to toggle source
# File lib/git/pr/github.rb, line 19
def list_pull_requests(profile, mine)
  if profile
    repositories = profile == :all ? all_repositories
                                   : @git.repository_profile(profile)
  else
    repositories = [@git.repository]
  end

  [].tap do |prs|
    repositories.flatten.uniq.each do |repo|
      pull_requests = Octokit.pull_requests(repo, 'open')
      if mine
        prs << pull_requests.select { |pr| pr.user.login == @git.login }
      else
        prs << pull_requests
      end
    end
  end.flatten
end
submit_pull_request(title, message) click to toggle source
# File lib/git/pr/github.rb, line 39
def submit_pull_request(title, message)
  response = Octokit.create_pull_request(@git.repository,
                                         @git.base_branch,
                                         @git.current_branch,
                                         title,
                                         message)
  response.state == 'open' ? response : raise(Failed, response.state)
rescue Octokit::UnprocessableEntity => e
  message = e.message.match(/message: (.*)/)[1].sub(/ \/\/.*/, '')
  raise Failed, message
end

Private Instance Methods

all_repositories() click to toggle source
# File lib/git/pr/github.rb, line 52
def all_repositories
  repositories = []

  Octokit.organizations.map(&:login).each do |org|
    repositories << Octokit.organization_repositories(org).map(&:full_name)
  end
  repositories << Octokit.repositories.map(&:full_name)

  repositories
end