class PairSee::TooMuchStuff

Public Class Methods

new(options) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 13
def initialize(options)
  @log_lines = LogLineParse.new(options[:repo_locations], options[:after_date]).log_lines
  @active_devs = ActiveDevs.new(@log_lines, options[:names]).devs

  cards_per_person = CardsPerPerson.new(@log_lines, options[:card_prefix], options[:names])
  @devs = cards_per_person.people
  @dev_pairs = cards_per_person.dev_pairs

  @card_prefixes = options[:card_prefix]
end

Public Instance Methods

a(log_line, person1, person2) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 115
def a(log_line, person1, person2)
  log_line.authored_by?(person1, person2)
end
all_commits() click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 72
def all_commits
  pairs_result = Hash[@dev_pairs.map { |k, v| [names_key(k, v), 0] }]
  solos_result = Hash[@devs.map { |k| [k.display_name, 0] }]
  result = pairs_result.merge solos_result

  @log_lines.each do |ll|
    result = method_name(ll, result)
  end
  result
    .sort_by { |_, count| count }
    .reject { |_, count| count == 0 }
    .map { |names, count| "#{names}: #{count}" }
end
all_most_recent_commits() click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 132
def all_most_recent_commits
  @dev_pairs.map do |person1, person2|
    DateCombo.new(most_recent_commit_date(person1, person2), person1, person2)
  end.sort.reverse.map &:to_s
end
b(log_line, person1) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 111
def b(log_line, person1)
  log_line.authored_by?(person1) && (people - [person1]).none? { |single_person| log_line.authored_by?(single_person) }
end
card_data(card_prefixes) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 34
def card_data(card_prefixes)
  card_prefixes.map do |card_prefix|
    card_numbers(card_prefix).map do |card_name|
      Card.new(card_name, commits_on_card(card_name).sort_by(&:date))
    end
  end.flatten.sort_by(&:duration).reverse
end
card_numbers(card_prefix) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 46
def card_numbers(card_prefix)
  @log_lines.select do |line|
    line.contains_card?(card_prefix)
  end.map do |line|
    line.card_name([card_prefix])
  end.uniq.compact
end
commits_for_pair(person1, person2) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 119
def commits_for_pair(person1, person2)
  @log_lines.commits_for_pair person1, person2
end
commits_not_by_known_person() click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 123
def commits_not_by_known_person
  @log_lines.commits_not_by_known_person @devs
end
commits_on_card(card_name) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 42
def commits_on_card(card_name)
  @log_lines.select { |line| line.contains_card_name?(card_name) }
end
get_card_prefix(config_file) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 54
def get_card_prefix(config_file)
  config = YAML.load_file(config_file)
  config['card_prefix']
end
is_solo_by?(devs, person, log_line) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 102
def is_solo_by?(devs, person, log_line)
  no_other_devs_in_commit = (devs - [person]).none? { |dx| log_line.authored_by?(dx) }
  log_line.authored_by?(person) && no_other_devs_in_commit
end
least_recent_pair() click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 143
def least_recent_pair
  devs.select do |person|
    person.names.any? { |name| @log_lines.last.line.match(name) }
  end.map(&:display_name).join(', ')
end
method_name(ll, result) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 86
def method_name(ll, result)
  @dev_pairs.each do |d1, d2|
    if ll.authored_by?(d1, d2)
      result[names_key(d1, d2)] += 1
      return result
    elsif is_solo_by?(@devs, d1, ll)
      result[d1.display_name] += 1
      return result
    elsif is_solo_by?(@devs, d2, ll)
      result[d2.display_name] += 1
      return result
    end
  end
  result
end
most_recent_commit_date(person1, person2) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 127
def most_recent_commit_date(person1, person2)
  recent_commit = commits_for_pair(person1, person2).sort_by(&:date).first
  recent_commit ? recent_commit.date : nil
end
names_key(k, v) click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 107
def names_key(k, v)
  [k, v].sort_by(&:display_name).map(&:to_s).join(', ')
end
pair_commits() click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 59
def pair_commits
  @dev_pairs.map do |person1, person2|
    log_lines_commits_for_pair = @log_lines.commits_for_pair person1, person2
    PairCommitCount.new(log_lines_commits_for_pair.count, person1, person2)
  end
end
pretty_card_data() click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 24
def pretty_card_data
  card_data(@card_prefixes).map do |card|
    card&.pretty
  end
end
pretty_card_data_by_commits() click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 30
def pretty_card_data_by_commits
  card_data(@card_prefixes).compact.sort_by.sort_by(&:number_of_commits).reverse.map(&:pretty)
end
solo_commits() click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 66
def solo_commits
  @devs.map do |dev|
    PairCommitCount.new(@log_lines.solo_commits(@devs, dev).count, dev)
  end
end
unpaired_in_range() click to toggle source
# File lib/pair_see/too_much_stuff.rb, line 149
def unpaired_in_range
  @dev_pairs.select do |person1, person2|
    most_recent_commit_date(person1, person2).nil?
  end.map do |person1, person2|
    "#{person1}, #{person2}"
  end
end