Class: PairSee::Seer

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

Constant Summary collapse

@@maximum_commits_to_parse =
9999

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Seer

Returns a new instance of Seer.



14
15
16
17
18
19
20
21
# File 'lib/pair_see/seer.rb', line 14

def initialize(options)
  @log_lines = _lines_from(options[:repo_location], options[:after_date])
  @sub_seer = CardsPerPerson.new(@log_lines, options)
  @active_devs = ActiveDevs.new(@log_lines, options).devs
  @devs = @sub_seer.devs
  @card_prefix = options[:card_prefix]
  @dev_pairs = devs.combination(2)
end

Instance Attribute Details

#card_prefixObject (readonly)

Returns the value of attribute card_prefix.



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

def card_prefix
  @card_prefix
end

#dev_pairsObject (readonly)

Returns the value of attribute dev_pairs.



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

def dev_pairs
  @dev_pairs
end

#devsObject (readonly)

Returns the value of attribute devs.



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

def devs
  @devs
end

#log_linesObject (readonly)

Returns the value of attribute log_lines.



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

def log_lines
  @log_lines
end

Instance Method Details

#_lines_from(git_home, date_string) ⇒ Object



35
36
37
38
39
40
41
# File 'lib/pair_see/seer.rb', line 35

def _lines_from(git_home, date_string)
  g = Git.open(git_home)
  lines = g.log(@@maximum_commits_to_parse).since(date_string).map do |l|
    LogLine.new("#{l.date} #{l.message}")
  end
  LogLines.new(lines)
end

#active_devs(config_file) ⇒ Object



73
74
75
# File 'lib/pair_see/seer.rb', line 73

def active_devs(config_file)
  @active_devs
end

#all_commitsObject



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

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

#all_most_recent_commitsObject



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

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



49
50
51
52
53
54
# File 'lib/pair_see/seer.rb', line 49

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



60
61
62
63
64
65
66
# File 'lib/pair_see/seer.rb', line 60

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_per_personObject



31
32
33
# File 'lib/pair_see/seer.rb', line 31

def cards_per_person
  @sub_seer.cards_per_person
end

#commits_for_pair(person1, person2) ⇒ Object



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

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

#commits_not_by_known_pairObject



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

def commits_not_by_known_pair
  log_lines.commits_not_by_known_pair devs
end

#commits_on_card(card_name) ⇒ Object



56
57
58
# File 'lib/pair_see/seer.rb', line 56

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

#get_card_prefix(config_file) ⇒ Object



68
69
70
71
# File 'lib/pair_see/seer.rb', line 68

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

#least_recent_pairObject



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

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

#most_recent_commit_date(person1, person2) ⇒ Object



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

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



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

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

#pretty_card_dataObject



43
44
45
46
47
# File 'lib/pair_see/seer.rb', line 43

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


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

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

#solo_commitsObject



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

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

#unpaired_in_rangeObject



123
124
125
126
127
128
129
# File 'lib/pair_see/seer.rb', line 123

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