Class: PairSee::Seer

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(log_lines, config_file) ⇒ Seer

Returns a new instance of Seer.



11
12
13
14
15
16
# File 'lib/pair_see/seer.rb', line 11

def initialize(log_lines, config_file)
  @log_lines = log_lines
  @devs = active_devs(config_file)
  @dev_pairs = devs.combination(2)
  @card_prefix = get_card_prefix(config_file)
end

Instance Attribute Details

#card_prefixObject (readonly)

Returns the value of attribute card_prefix.



9
10
11
# File 'lib/pair_see/seer.rb', line 9

def card_prefix
  @card_prefix
end

#dev_pairsObject (readonly)

Returns the value of attribute dev_pairs.



9
10
11
# File 'lib/pair_see/seer.rb', line 9

def dev_pairs
  @dev_pairs
end

#devsObject (readonly)

Returns the value of attribute devs.



9
10
11
# File 'lib/pair_see/seer.rb', line 9

def devs
  @devs
end

#log_linesObject (readonly)

Returns the value of attribute log_lines.



9
10
11
# File 'lib/pair_see/seer.rb', line 9

def log_lines
  @log_lines
end

Instance Method Details

#active_devs(config_file) ⇒ Object



70
71
72
73
74
75
76
# File 'lib/pair_see/seer.rb', line 70

def active_devs(config_file)
  config = YAML.load_file(config_file)
  devs_in_config = config['names'].split(' ')
  devs_in_config.select do |dev|
    is_active(dev)
  end
end

#all_commitsObject



94
95
96
# File 'lib/pair_see/seer.rb', line 94

def all_commits
  (pair_commits + solo_commits).sort_by(&:count).reject(&:empty?).map(&:to_s)
end

#all_most_recent_commitsObject



111
112
113
114
115
# File 'lib/pair_see/seer.rb', line 111

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

#card_data(card_prefix) ⇒ Object



46
47
48
49
50
51
# File 'lib/pair_see/seer.rb', line 46

def card_data(card_prefix)
  card_numbers(card_prefix).map do |card_name|
    commits = commits_on_card(card_name)
    Card.new(card_name, commits.count, commits.first.date, commits.last.date)
  end.sort_by(&:duration).reverse
end

#card_numbers(card_prefix) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/pair_see/seer.rb', line 57

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

#cards_dev_worked_on(log_lines, dev) ⇒ Object



32
33
34
35
36
37
38
# File 'lib/pair_see/seer.rb', line 32

def cards_dev_worked_on(log_lines, dev)
  log_lines.select do |log_line|
    log_line.authored_by?(dev)
  end.map do|log_line|
    log_line.card_number(@card_prefix)
  end.compact
end

#cards_per_personObject



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/pair_see/seer.rb', line 18

def cards_per_person
  @devs.map do |dev|
    { dev => cards_dev_worked_on(log_lines, dev) }
  end.inject({}) do |result, element|
    result.merge(element)
  end.map do |dev_name, cards_worked|
    { dev_name => cards_worked.uniq }
  end.inject({}) do |result, element|
    result.merge(element)
  end.map do|dev, cards|
    "#{dev}: [#{cards.size} cards] #{cards.sort.join(', ')}"
  end
end

#commits_for_pair(person1, person2) ⇒ Object



98
99
100
# File 'lib/pair_see/seer.rb', line 98

def commits_for_pair(person1, person2)
  log_lines.commits_for_pair person1, person2
end

#commits_not_by_known_pairObject



102
103
104
# File 'lib/pair_see/seer.rb', line 102

def commits_not_by_known_pair
  log_lines.commits_not_by_known_pair devs
end

#commits_on_card(card_name) ⇒ Object



53
54
55
# File 'lib/pair_see/seer.rb', line 53

def commits_on_card(card_name)
  log_lines.select { |line| line.contains_card_name?(card_name) }
end

#get_card_prefix(config_file) ⇒ Object



65
66
67
68
# File 'lib/pair_see/seer.rb', line 65

def get_card_prefix(config_file)
  config = YAML.load_file(config_file)
  config['card_prefix']
end

#is_active(dev) ⇒ Object



78
79
80
# File 'lib/pair_see/seer.rb', line 78

def is_active(dev)
  log_lines.active? dev
end

#least_recent_pairObject



122
123
124
125
126
# File 'lib/pair_see/seer.rb', line 122

def least_recent_pair
  devs.select do |dev|
    log_lines.last.line.match(dev)
  end.join(', ')
end

#most_recent_commit_date(person1, person2) ⇒ Object



106
107
108
109
# File 'lib/pair_see/seer.rb', line 106

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

#pair_commitsObject



82
83
84
85
86
# File 'lib/pair_see/seer.rb', line 82

def pair_commits
  dev_pairs.map do |person1, person2|
    Combo.new(commits_for_pair(person1, person2).count, person1, person2)
  end
end

#pretty_card_dataObject



40
41
42
43
44
# File 'lib/pair_see/seer.rb', line 40

def pretty_card_data
  card_data(card_prefix).map do |card|
    "#{card.card_name} - - - commits: #{card.number_of_commits} - - - duration: #{card.duration} days " unless card.nil?
  end
end


117
118
119
120
# File 'lib/pair_see/seer.rb', line 117

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

#solo_commitsObject



88
89
90
91
92
# File 'lib/pair_see/seer.rb', line 88

def solo_commits
  devs.map do |dev|
    Combo.new(log_lines.solo_commits(devs, dev).count, dev)
  end
end

#unpaired_in_rangeObject



128
129
130
131
132
133
134
# File 'lib/pair_see/seer.rb', line 128

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