Sha256: ce7dfd842396f86e16ee8e2b35d27cf552643724c805dcc2a6cde6ace6271b43
Contents?: true
Size: 1.23 KB
Versions: 7
Compression:
Stored size: 1.23 KB
Contents
# frozen_string_literal: true require "dry/monads" require "versionaire" module Milestoner module Commits # Calculates next version based on commit trailer version keys. class Versioner include Import[:git] include Dry::Monads[:result] using Versionaire::Cast DEFAULTS = {trailer_key: "Milestone", fallback: Versionaire::Version.new}.freeze def initialize(defaults: DEFAULTS, collector: Collector.new, **) @defaults = defaults @collector = collector super(**) end def call trailer_milestones.then { |milestones| bump milestones } .value_or(fallback) end private attr_reader :defaults, :collector def trailer_milestones collector.call.value_or([]).each.with_object [] do |commit, values| commit.trailer_value_for(trailer_key).bind { |milestone| values.append milestone.to_sym } end end def bump milestones target = fallback.members.intersection(milestones).first git.tag_last.fmap { |tag| target ? Version(tag).bump(target) : fallback } end def trailer_key = defaults.fetch __method__ def fallback = defaults.fetch __method__ end end end
Version data entries
7 entries across 7 versions & 1 rubygems