Class: PairSee::TooMuchStuff

Inherits:
Object
  • Object
show all
Defined in:
lib/pair_see/too_much_stuff.rb

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ TooMuchStuff

Returns a new instance of TooMuchStuff.



13
14
15
16
17
18
19
20
21
22
# 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

Instance Method Details

#a(log_line, person1, person2) ⇒ Object



115
116
117
# File 'lib/pair_see/too_much_stuff.rb', line 115

def a(log_line, person1, person2)
  log_line.authored_by?(person1, person2)
end

#all_commitsObject



72
73
74
75
76
77
78
79
80
81
82
83
84
# 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_commitsObject



132
133
134
135
136
# 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) ⇒ Object



111
112
113
# 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) ⇒ Object



34
35
36
37
38
39
40
# 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) ⇒ Object



46
47
48
49
50
51
52
# 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) ⇒ Object



119
120
121
# 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_personObject



123
124
125
# 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) ⇒ Object



42
43
44
# 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) ⇒ Object



54
55
56
57
# 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) ⇒ Boolean

Returns:

  • (Boolean)


102
103
104
105
# 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_pairObject



143
144
145
146
147
# 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) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# 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) ⇒ Object



127
128
129
130
# 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) ⇒ Object



107
108
109
# 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_commitsObject



59
60
61
62
63
64
# 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_dataObject



24
25
26
27
28
# 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_commitsObject



30
31
32
# 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


138
139
140
141
# File 'lib/pair_see/too_much_stuff.rb', line 138

def recommended_pairings
  should_pair = unpaired_in_range
  should_pair.empty? ? [least_recent_pair] : should_pair
end

#solo_commitsObject



66
67
68
69
70
# 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_rangeObject



149
150
151
152
153
154
155
# 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