class Feature::Diff
Multi purpose feature. It creates a pull request or pushes latest commits to the existing pull request
Attributes
feature_name[R]
Public Class Methods
new()
click to toggle source
# File lib/straight_line/common/feature/diff.rb, line 20 def initialize @feature_name = current_feature if @feature_name == 'master' raise UserError, 'Failed to create diff: you\'re on the master branch' end return if changes_committed? raise UserError, 'Commit your changes before creating a diff' end
Public Instance Methods
create_pull_request(title, body)
click to toggle source
# File lib/straight_line/common/feature/diff.rb, line 97 def create_pull_request(title, body) Github.create_pull_request feature_name, title, body end
diff(params)
click to toggle source
# File lib/straight_line/common/feature/diff.rb, line 29 def diff(params) pull_cmd = GitCommands::Pull.new('master') pull_cmd.run if pull_request_exists? diff_pull_request_exists params else diff_no_pull_request params end end
diff_no_pull_request(params)
click to toggle source
# File lib/straight_line/common/feature/diff.rb, line 50 def diff_no_pull_request(params) GitCommands::Rebase.new('master', feature_name).run GitCommands::Push.new(feature_name, false).run title, body = extract_params params, [:title, :body] pr = create_pull_request title, body Util.logger.info %(Pull request created: #{pr.html_url}.) end
diff_pull_request_exists(params)
click to toggle source
# File lib/straight_line/common/feature/diff.rb, line 39 def diff_pull_request_exists(params) GitCommands::Merge.new(feature_name, 'master').run title, body = extract_params params, [:title, :body] begin GitCommands::Commit.new(title, body).run rescue StandardError => e raise e unless e.message =~ /nothing to commit/ end GitCommands::Push.new(feature_name).run end
extract_params(params, keys)
click to toggle source
# File lib/straight_line/common/feature/diff.rb, line 66 def extract_params(params, keys) keys.map do |key| case key when :title params[:title] || last_commit_message else params[key] end end end
last_commit_message()
click to toggle source
# File lib/straight_line/common/feature/diff.rb, line 77 def last_commit_message GitCommands::Log.new('-1 --pretty=%B').run.split("\n").first end
pull_request_exists?()
click to toggle source
# File lib/straight_line/common/feature/diff.rb, line 89 def pull_request_exists? if Github.pull_request_for_feature(feature_name) true else false end end
require_params(params, required)
click to toggle source
# File lib/straight_line/common/feature/diff.rb, line 58 def require_params(params, required) required_errors = required.map do |o| validate_param params, o end.compact raise required_errors.join "\n" unless required_errors.empty? end
validate_param(params, param_spec)
click to toggle source
@return String error message if there is an error, else nil
# File lib/straight_line/common/feature/diff.rb, line 82 def validate_param(params, param_spec) case param_spec.class when Symbol "#{param_spec} is not provided." unless params[param_spec] end end