class Git::Lint::Analyzers::CommitTrailerCollaboratorDuplication

Public Class Methods

defaults() click to toggle source
# File lib/git/lint/analyzers/commit_trailer_collaborator_duplication.rb, line 7
def self.defaults
  {
    enabled: true,
    severity: :error
  }
end
new(commit:, settings: self.class.defaults, parser: Parsers::Trailers::Collaborator) click to toggle source
Calls superclass method Git::Lint::Analyzers::Abstract::new
# File lib/git/lint/analyzers/commit_trailer_collaborator_duplication.rb, line 14
def initialize commit:,
               settings: self.class.defaults,
               parser: Parsers::Trailers::Collaborator
  super commit: commit, settings: settings
  @parser = parser
  @tally = build_tally
end

Public Instance Methods

build_tally() click to toggle source
# File lib/git/lint/analyzers/commit_trailer_collaborator_duplication.rb, line 44
def build_tally
  zeros = Hash.new { |new_hash, missing_key| new_hash[missing_key] = 0 }

  zeros.tap do |collection|
    commit.trailers.each { |line| collection[line] += 1 if parser.new(line).match? }
  end
end
invalid_line?(line) click to toggle source
# File lib/git/lint/analyzers/commit_trailer_collaborator_duplication.rb, line 35
def invalid_line? line
  collaborator = parser.new line
  collaborator.match? && tally[line] != 1
end
issue() click to toggle source
# File lib/git/lint/analyzers/commit_trailer_collaborator_duplication.rb, line 24
def issue
  return {} if valid?

  {
    hint: "Avoid duplication.",
    lines: affected_commit_trailers
  }
end
valid?(= affected_commit_trailers.empty?) click to toggle source
# File lib/git/lint/analyzers/commit_trailer_collaborator_duplication.rb, line 22
  def valid? = affected_commit_trailers.empty?

  def issue
    return {} if valid?

    {
      hint: "Avoid duplication.",
      lines: affected_commit_trailers
    }
  end

  protected

  def invalid_line? line
    collaborator = parser.new line
    collaborator.match? && tally[line] != 1
  end

  private

  attr_reader :parser, :tally

  def build_tally
    zeros = Hash.new { |new_hash, missing_key| new_hash[missing_key] = 0 }

    zeros.tap do |collection|
      commit.trailers.each { |line| collection[line] += 1 if parser.new(line).match? }
    end
  end
end