Sha256: af33e0fc00e53c65f9c5e29c41d7dadfa4c86b70477b061d254d7bbc8e60fa2d
Contents?: true
Size: 1.62 KB
Versions: 7
Compression:
Stored size: 1.62 KB
Contents
# frozen_string_literal: true require "git_plus" require "versionaire" module Milestoner module Tags # Handles the creation of project repository tags. class Creator include Import[:repository, :logger] using Versionaire::Cast def initialize categorizer: Commits::Categorizer.new, presenter: Presenters::Commit, **dependencies super(**dependencies) @categorizer = categorizer @presenter = presenter end def call configuration = Container[:configuration] return false if local? configuration fail Error, "Unable to tag without commits." if categorizer.call.empty? create configuration rescue Versionaire::Error, GitPlus::Error => error raise Error, error.message end private attr_reader :categorizer, :presenter def local? configuration version = Version configuration.version if repository.tag_local? version logger.warn { "Local tag exists: #{version}. Skipped." } true else false end end def create configuration label = configuration.version repository.tag_version label, message(configuration) logger.debug { "Local tag created: #{label}." } end def message configuration categorizer.call(configuration) .map { |record| presenter.new(record).line_item } .then do |line_items| %(Version #{configuration.version}\n\n#{line_items.join "\n"}\n\n) end end end end end
Version data entries
7 entries across 7 versions & 1 rubygems