class Milestoner::Commits::Versioner

Calculates next version based on commit trailer version keys.

Constants

DEFAULTS

Attributes

collector[R]
defaults[R]

Public Class Methods

new(defaults: DEFAULTS, collector: Collector.new, **) click to toggle source
Calls superclass method
# File lib/milestoner/commits/versioner.rb, line 18
def initialize(defaults: DEFAULTS, collector: Collector.new, **)
  @defaults = defaults
  @collector = collector
  super(**)
end

Public Instance Methods

call() click to toggle source
# File lib/milestoner/commits/versioner.rb, line 24
def call
  trailer_milestones.then { |milestones| bump milestones }
                    .value_or(fallback)
end

Private Instance Methods

bump(milestones) click to toggle source
# File lib/milestoner/commits/versioner.rb, line 39
def bump milestones
  last_tag_or_fallback_for milestones
rescue Versionaire::Error => error
  logger.debug { error.message }
  Failure error
end
fallback(= defaults.fetch __method__) click to toggle source
# File lib/milestoner/commits/versioner.rb, line 53
  def fallback = defaults.fetch __method__
end
last_tag_or_fallback_for(milestones) click to toggle source
# File lib/milestoner/commits/versioner.rb, line 46
def last_tag_or_fallback_for milestones
  target = fallback.members.intersection(milestones).first
  git.tag_last.fmap { |tag| target ? Version(tag).bump(target) : fallback }
end
trailer_key(= defaults.fetch __method__) click to toggle source
# File lib/milestoner/commits/versioner.rb, line 51
    def trailer_key = defaults.fetch __method__

    def fallback = defaults.fetch __method__
  end
end
trailer_milestones() click to toggle source
# File lib/milestoner/commits/versioner.rb, line 33
def trailer_milestones
  collector.call.value_or(Core::EMPTY_ARRAY).each.with_object [] do |commit, values|
    commit.trailer_value_for(trailer_key).bind { |milestone| values.append milestone.to_sym }
  end
end