class Versi::GenerateCommand::Interactors::BuildReleaseTag

Public Instance Methods

call() click to toggle source
# File lib/versi/generate_command/interactors/build_release_tag.rb, line 14
def call
  context.latest_release_version = find_latest_release_version
  generate_release_name
  generate_release_tag
  Versi::LOG.info("Your latest release tag is \"#{context.latest_release_version.to_s}\"")
  Versi::LOG.info("Your next release tag will be \"#{context.release_tag.name}\"")
end

Private Instance Methods

build_tag_message() click to toggle source
# File lib/versi/generate_command/interactors/build_release_tag.rb, line 54
def build_tag_message
  context.options[:message] || "Release #{context.release_name}"
end
build_tag_name() click to toggle source
# File lib/versi/generate_command/interactors/build_release_tag.rb, line 49
def build_tag_name
  suffix = context.options[:suffix] ? "-#{context.options[:suffix]}" : nil
  "#{context.options[:prefix]}#{context.release_name}#{suffix}"
end
extract_release_type_from_last_commit_message() click to toggle source
# File lib/versi/generate_command/interactors/build_release_tag.rb, line 58
def extract_release_type_from_last_commit_message
  Versi::GenerateCommand::Interactors::ExtractReleaseTypeFromCommitMessage \
    .call(commit_message: @git.last_commit_message)
    .release_type
end
find_latest_release_version() click to toggle source
# File lib/versi/generate_command/interactors/build_release_tag.rb, line 68
def find_latest_release_version
  latest_version = nil
  @git.fetch_tags
  
  puts "LIST TAGS"
  puts @git.list_tags.to_s
  return Semantic::Version.new("0.0.0") if @git.list_tags.empty?
  
  @git.list_tags.each do |release_name|
    version = Semantic::Version.new(release_name) rescue next

    if latest_version
      latest_version = version if version > latest_version
    else
      latest_version = version
    end
  end

  latest_version ? latest_version : nil
end
generate_next_semantic_version(release_type) click to toggle source
# File lib/versi/generate_command/interactors/build_release_tag.rb, line 64
def generate_next_semantic_version(release_type)
  context.latest_release_version.send("#{release_type}!")
end
generate_release_name() click to toggle source
# File lib/versi/generate_command/interactors/build_release_tag.rb, line 30
def generate_release_name
  if context.options[:name]
    context.release_name = context.options[:name]
  else
    release_type = context.options[:type]
    release_type ||= extract_release_type_from_last_commit_message
    
    raise(Versi::Errors::UnknownReleaseTypeError) if !release_type
    raise(Versi::Errors::CannotGenerateCommandVersionError, release_type) if !context.latest_release_version

    context.release_version = generate_next_semantic_version(release_type)
    context.release_name    = context.release_version.to_s
  end
end
generate_release_tag() click to toggle source
# File lib/versi/generate_command/interactors/build_release_tag.rb, line 45
def generate_release_tag
  context.release_tag = Versi::Transients::GitTag.new(build_tag_name, build_tag_message)
end
setup() click to toggle source
# File lib/versi/generate_command/interactors/build_release_tag.rb, line 24
def setup
  raise(ArgumentError, "Missing options argument") if !context.options
  remote = context.options ? context.options[:remote] : nil
  @git = Versi::Interfaces::GitInterface.new(remote: remote)
end