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

Version Path
milestoner-14.5.0 lib/milestoner/tags/creator.rb
milestoner-14.4.0 lib/milestoner/tags/creator.rb
milestoner-14.3.0 lib/milestoner/tags/creator.rb
milestoner-14.2.0 lib/milestoner/tags/creator.rb
milestoner-14.1.0 lib/milestoner/tags/creator.rb
milestoner-14.0.2 lib/milestoner/tags/creator.rb
milestoner-14.0.1 lib/milestoner/tags/creator.rb