Sha256: 292d4652552c527b90b183c06872a7398cc91fbf7acb543df0888a972b367868

Contents?: true

Size: 1.83 KB

Versions: 3

Compression:

Stored size: 1.83 KB

Contents

# frozen_string_literal: true

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::Errors::Cast, GitPlus::Errors::Base => error
        raise Error, error.message
      end

      private

      attr_reader :categorizer, :presenter, :container

      def local? configuration
        version = Version configuration.git_tag_version

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

      def sign configuration
        version = configuration.git_tag_version
        content = message configuration

        if configuration.git_tag_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.git_tag_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

3 entries across 3 versions & 1 rubygems

Version Path
milestoner-12.0.2 lib/milestoner/tags/creator.rb
milestoner-12.0.1 lib/milestoner/tags/creator.rb
milestoner-12.0.0 lib/milestoner/tags/creator.rb