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