Sha256: 0abca398750e2259bf7bd861788e0a332f4ab6dbe5ec929f1d8ca806d1e80e98

Contents?: true

Size: 1.81 KB

Versions: 6

Compression:

Stored size: 1.81 KB

Contents

# frozen_string_literal: true

require "git_plus"
require "versionaire"

module Milestoner
  module Tags
    # Handles the creation of project repository tags.
    class Creator
      using Versionaire::Cast

      def initialize categorizer: Commits::Categorizer.new,
                     presenter: Presenters::Commit,
                     container: Container

        @categorizer = categorizer
        @presenter = presenter
        @container = container
      end

      def call configuration = CLI::Configuration::Loader.call
        return false if local? configuration
        fail Error, "Unable to tag without commits." if categorizer.call.empty?

        sign configuration
      rescue Versionaire::Error, GitPlus::Error => error
        raise Error, error.message
      end

      private

      attr_reader :categorizer, :presenter, :container

      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 sign configuration
        version = configuration.version
        content = message configuration

        if configuration.sign
          repository.tag_sign version, content
        else
          repository.tag_unsign version, content
        end

        logger.debug "Local tag created: #{version}."
      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

      def repository = container[__method__]

      def logger = container[__method__]
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
milestoner-13.3.1 lib/milestoner/tags/creator.rb
milestoner-13.3.0 lib/milestoner/tags/creator.rb
milestoner-13.2.0 lib/milestoner/tags/creator.rb
milestoner-13.1.0 lib/milestoner/tags/creator.rb
milestoner-13.0.1 lib/milestoner/tags/creator.rb
milestoner-13.0.0 lib/milestoner/tags/creator.rb