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