class Toolshed::Commands::CreatePullRequest
Allow a user to create pull request based on information in .toolshedrc and prompts
Attributes
git_tool[RW]
pull_request_body[RW]
pull_request_title[RW]
pull_request_url[RW]
ticket_id[RW]
ticket_tracker[RW]
ticket_tracker_class[RW]
ticket_tracker_project_id[RW]
ticket_tracking_title[RW]
ticket_tracking_url[RW]
Public Class Methods
cli_options()
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 21 def self.cli_options # rubocop:disable Metrics/MethodLength { banner: 'Usage: push_branch [options]', options: { tool: { short_on: '-a' }, ticket_system: { short_on: '-m' }, use_defaults: { short_on: '-d' }, title: { short_on: '-t' }, body: { short_on: '-b' }, skip_ticket: { short_on: '-s', default: true } } } end
new(options = {})
click to toggle source
Calls superclass method
Toolshed::Commands::Base::new
# File lib/toolshed/commands/create_pull_request.rb, line 15 def initialize(options = {}) super(options) self.ticket_tracker_class = nil self.pull_request_url = '' end
Public Instance Methods
branch()
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 48 def branch @branch ||= Toolshed::Git::Branch.new end
execute(_args, options = {})
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 52 def execute(_args, options = {}) output_begining_messages options = execute_ticket_tracking(options) execute_pull_request(options) unless options.nil? end
Private Instance Methods
add_note_to_ticket()
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 119 def add_note_to_ticket add_note_to_ticket_response = read_user_input_add_note_to_ticket('Would you like to add a note with the pull request url?') # rubocop:disable Metrics/LineLength return unless add_note_to_ticket_response ticket_tracker.add_note(pull_request_url) completed_status = Toolshed::Client.instance.ticket_status_for_complete unless default_completed_status # rubocop:disable Metrics/LineLength ticket_tracker.update_ticket_status(completed_status) end
default_completed_status()
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 128 def default_completed_status default_completed_status = nil begin default_completed_status = Object.const_get("#{ticket_tracker_class}::DEFAULT_COMPLETED_STATUS") # rubocop:disable Metrics/LineLength rescue false end default_completed_status end
execute_pull_request(options)
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 142 def execute_pull_request(options) # rubocop:disable Metrics/AbcSize self.git_tool = Object.const_get("Toolshed::Git::#{Toolshed::Client.instance.git_tool.camel_case}").create_instance # rubocop:disable Metrics/LineLength options = get_pull_request_title(options) get_pull_request_body(options) send_pull_request add_note_to_ticket unless ticket_tracker_class.nil? pull_request_created_message self rescue => e Toolshed.logger.fatal e.message Toolshed.die end
execute_ticket_tracking(options)
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 100 def execute_ticket_tracking(options) # rubocop:disable Metrics/AbcSize return options if options[:skip_ticket] return options if Toolshed::Client.instance.ticket_tracking_tool.nil? || Toolshed::Client.instance.ticket_tracking_tool.empty? # rubocop:disable Metrics/LineLength begin self.ticket_tracker_class = Object.const_get("Toolshed::TicketTracking::#{Toolshed::Client.instance.ticket_tracking_tool.camel_case}") # rubocop:disable Metrics/LineLength options = get_ticket_project_information(options) initialize_ticket_tracker_properties(options) output_ticket_information rescue StandardError => e Toolshed.logger.fatal e.inspect Toolshed.logger.fatal e.backtrace Toolshed.logger.fatal 'Ticket tracking tool is not supported at this time' Toolshed.die end options end
get_pull_request_body(options)
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 164 def get_pull_request_body(options) self.pull_request_body = read_user_input_body( "Pull request body (Default: #{ticket_tracking_url}):", options.merge!(default: ticket_tracking_url) ) options end
get_pull_request_title(options)
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 156 def get_pull_request_title(options) self.pull_request_title = read_user_input_title( "Pull request title (Default: #{ticket_tracking_title}):", options.merge!(default: ticket_tracking_title) ) options end
get_ticket_id(options)
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 85 def get_ticket_id(options) self.ticket_id = read_user_input_ticket_tracker_ticket_id( "Ticket ID (Default: #{Toolshed::TicketTracking.story_id_from_branch_name(branch.name)}):", # rubocop:disable Metrics/LineLength default: Toolshed::TicketTracking.story_id_from_branch_name(branch.name) ) options.merge!(ticket_id: ticket_id) options end
get_ticket_project_information(options)
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 192 def get_ticket_project_information(options) options = use_ticket_tracker_project_id(options) options = use_ticket_tracker_project_name(options) options = get_ticket_id(options) options end
initialize_ticket_tracker_properties(options)
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 199 def initialize_ticket_tracker_properties(options) self.ticket_tracker = ticket_tracker_class.create_instance(options) self.ticket_tracking_url = ticket_tracker.url self.ticket_tracking_title = ticket_tracker.default_title end
output_begining_messages()
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 79 def output_begining_messages Toolshed.logger.info "Current Branch: #{branch.name}" Toolshed.logger.info "Branched From: #{Toolshed::Git::Branch.from}" Toolshed.logger.info "Using Defaults: #{(Toolshed::Client.instance.use_defaults.nil?) ? 'No' : 'Yes'}" # rubocop:disable Metrics/LineLength end
output_ticket_information()
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 94 def output_ticket_information Toolshed.logger.info "Ticket Tracking URL: #{ticket_tracking_url}" Toolshed.logger.info "Ticket Tracking title: #{ticket_tracking_title}" Toolshed.logger.info "Ticket ID: #{ticket_id}" end
pull_request_created_message()
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 138 def pull_request_created_message Toolshed.logger.info "Created Pull Request: #{pull_request_url}" end
read_user_input_add_note_to_ticket(message)
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 60 def read_user_input_add_note_to_ticket(message) return true if Toolshed::Client.instance.use_defaults puts message value = $stdin.gets.chomp until %w(y n).include?(value.downcase) puts 'Value must be Y or N' puts message value = $stdin.gets.chomp end (value == 'y') ? true : false end
read_user_input_ticket_tracker_ticket_id(message, options)
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 75 def read_user_input_ticket_tracker_ticket_id(message, options) read_user_input(message, options) end
send_pull_request()
click to toggle source
# File lib/toolshed/commands/create_pull_request.rb, line 172 def send_pull_request Toolshed.logger.info 'Your pull request is being created.' git_pull_request_result = git_tool.create_pull_request(pull_request_title, pull_request_body) # rubocop:disable Metrics/LineLength self.pull_request_url = git_pull_request_result['html_url'] return if git_pull_request_result['message'].nil? if git_pull_request_result['message'].downcase == 'bad credentials' Toolshed.logger.fatal 'Bad Credentials please try again.' Toolshed.die end if git_pull_request_result['message'].downcase == 'not found' Toolshed.logger.fatal 'Pull request not found please try again.' Toolshed.die end self.pull_request_url = git_pull_request_result['html_url'] end