class Milestoner::Tags::Creator

Handles the creation of project repository tags.

def build version

def build version
  builder.call.fmap do |body|
    "Version #{version}\n\n#{body.reread}\n\n"
  end
end

def call override = nil

def call override = nil
  version = compute_version override
  return false if local? version
  fail Error, "Unable to tag without commits." if collector.call.value_or([]).empty?
  create version
end

def compute_version value

def compute_version value
  Version value || input.project_version
rescue Versionaire::Error => error
  raise Error, error
end

def create version

def create version
  build(version).fmap { |body| git.tag_create version, body }
                .or { |error| fail Error, error }
                .bind { true }
end

def initialize(

def initialize(
  collector: Commits::Collector.new,
  builder: Builders::Stream.new(kernel: StringIO.new),
  **
)
  @collector = collector
  @builder = builder
  super(**)
end

def local? version

def local? version
  if git.tag_local? version
    logger.warn { "Local tag exists: #{version}. Skipped." }
    true
  else
    false
  end
end