class Milestoner::Commits::Categorizer

Retrieves and categorizes Git repository commit tagged or untagged history.

Attributes

container[R]
expression[R]

Public Class Methods

new(expression: Regexp, container: Container) click to toggle source
# File lib/milestoner/commits/categorizer.rb, line 9
def initialize expression: Regexp, container: Container
  @expression = expression
  @container = container
end

Public Instance Methods

call(configuration = CLI::Configuration::Loader.call) click to toggle source
# File lib/milestoner/commits/categorizer.rb, line 14
def call configuration = CLI::Configuration::Loader.call
  prefixes = configuration.git_commit_prefixes

  prefixes.reduce({}) { |group, prefix| group.merge prefix => [] }
          .merge("Unknown" => [])
          .then { |groups| group_by_prefix prefixes, groups }
          .each_value { |commits| commits.sort_by!(&:subject) }
          .values
          .flatten
          .uniq(&:subject)
end

Private Instance Methods

computed_commits(= repository.tagged? ? tagged_commits : saved_commits) click to toggle source
# File lib/milestoner/commits/categorizer.rb, line 42
    def computed_commits = repository.tagged? ? tagged_commits : saved_commits

    def tagged_commits = repository.commits("#{repository.tag_last}..HEAD")

    def saved_commits = repository.commits

    def repository = container[__method__]
  end
end
group_by_prefix(prefixes, groups) click to toggle source
# File lib/milestoner/commits/categorizer.rb, line 30
def group_by_prefix prefixes, groups
  computed_commits.each.with_object groups do |commit, collection|
    prefix = commit.subject[subject_pattern(prefixes)]
    key = collection.key?(prefix) ? prefix : "Unknown"
    collection[key] << commit
  end
end
repository(= container[__method__]) click to toggle source
# File lib/milestoner/commits/categorizer.rb, line 48
  def repository = container[__method__]
end
saved_commits(= repository.commits) click to toggle source
# File lib/milestoner/commits/categorizer.rb, line 46
    def saved_commits = repository.commits

    def repository = container[__method__]
  end
end
subject_pattern(prefixes) click to toggle source
# File lib/milestoner/commits/categorizer.rb, line 38
def subject_pattern prefixes
  prefixes.empty? ? expression.new(//) : expression.union(prefixes)
end
tagged_commits(= repository.commits(" click to toggle source
# File lib/milestoner/commits/categorizer.rb, line 44
      def tagged_commits = repository.commits("#{repository.tag_last}..HEAD")

      def saved_commits = repository.commits

      def repository = container[__method__]
    end
  end
end