class Pullrequest::Bitbucket
Attributes
context[R]
Public Class Methods
new(context)
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 10 def initialize(context) @context = context end
Public Instance Methods
command()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 14 def command @command ||= generate_command end
review()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 18 def review @data = nil @command = nil end
Private Instance Methods
ask(question, options = {})
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 25 def ask(question, options = {}) cache_key = question.dup if cached_answers[cache_key] options.merge! default: cached_answers[cache_key] end context.ask(question, options).tap do |answer| cached_answers[cache_key] = answer end end
cached_answers()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 35 def cached_answers @cached_answers ||= {} end
current_branch()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 39 def current_branch `git rev-parse --abbrev-ref HEAD`.chomp end
current_repo()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 43 def current_repo `git remote -v`[/bitbucket.org\:([^\.]+)\.git/, 1] end
data()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 47 def data @data ||= { title: title, description: description, source: { repository: {full_name: source_repo}, branch: {name: source_branch}, }, destination: { repository: {full_name: dest_repo}, branch: {name: dest_branch}, }, reviewers: reviewer_usernames.map { |username| {username: username} }, close_source_branch: true, } end
description()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 64 def description ask("Description of pull request") end
dest_branch()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 68 def dest_branch ask("Destination branch", default: 'master', required: true) end
dest_repo()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 72 def dest_repo ask("Destination Bitbucket repo (account_name/report_name)", default: current_repo, required: true) end
generate_command()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 76 def generate_command data # ask these questions first [ "curl", "-X POST", "-H 'Content-Type: application/json'", "-u #{username}:#{password}", "https://bitbucket.org/api/2.0/repositories/#{dest_repo}/pullrequests", "-d '#{data.to_json}'", ].join(' ') end
password()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 88 def password return stored_credentials[:password] if stored_credentials? ask("Your Bitbucket password", echo: false, required: true).tap do |password| $stdout.puts # force newline if yes? "Store credentials for next time? (in #{stored_credentials_path})" @password = password write_credentials end end end
reviewer_usernames()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 124 def reviewer_usernames ask("Reviewers (enter comma-separated usernames)", default: "<none>").split(',').map(&:strip).reject { |u| u == '' } end
source_branch()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 99 def source_branch ask("Source branch (your local branch)", default: current_branch, required: true) end
source_repo()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 103 def source_repo current_repo end
stored_credentials()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 107 def stored_credentials return {} unless File.exists?(stored_credentials_path) @stored_credentials ||= YAML.load(File.read(stored_credentials_path)) end
stored_credentials?()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 112 def stored_credentials? stored_credentials.key?(:username) && stored_credentials.key?(:password) end
stored_credentials_path()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 116 def stored_credentials_path File.join(Dir.home, '.config/pullrequest/bitbucket.yml') end
title()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 120 def title ask("Title of pull request", required: true) end
username()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 128 def username return stored_credentials[:username] if stored_credentials? @username = ask("Your Bitbucket username", required: true) end
write_credentials()
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 133 def write_credentials FileUtils.mkdir_p(File.dirname(stored_credentials_path)) File.open(stored_credentials_path, 'w', 0600) do |f| f.write({username: @username, password: @password}.to_yaml) end end
yes?(*args)
click to toggle source
# File lib/pullrequest/bitbucket.rb, line 140 def yes?(*args) context.yes? *args end