Class: PairSee::Seer
- Inherits:
-
Object
- Object
- PairSee::Seer
- Defined in:
- lib/pair_see/seer.rb
Instance Attribute Summary collapse
-
#card_prefix ⇒ Object
readonly
Returns the value of attribute card_prefix.
-
#dev_pairs ⇒ Object
readonly
Returns the value of attribute dev_pairs.
-
#devs ⇒ Object
readonly
Returns the value of attribute devs.
-
#log_lines ⇒ Object
readonly
Returns the value of attribute log_lines.
Instance Method Summary collapse
- #active_devs(config_file) ⇒ Object
- #all_commits ⇒ Object
- #all_most_recent_commits ⇒ Object
- #card_data(card_prefix) ⇒ Object
- #card_numbers(card_prefix) ⇒ Object
- #cards_dev_worked_on(log_lines, dev) ⇒ Object
- #cards_per_person ⇒ Object
- #commits_for_pair(person1, person2) ⇒ Object
- #commits_not_by_known_pair ⇒ Object
- #commits_on_card(card_name) ⇒ Object
- #get_card_prefix(config_file) ⇒ Object
-
#initialize(log_lines, config_file) ⇒ Seer
constructor
A new instance of Seer.
- #is_active(dev) ⇒ Object
- #least_recent_pair ⇒ Object
- #most_recent_commit_date(person1, person2) ⇒ Object
- #pair_commits ⇒ Object
- #pretty_card_data ⇒ Object
- #recommended_pairings ⇒ Object
- #solo_commits ⇒ Object
- #unpaired_in_range ⇒ Object
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_prefix ⇒ Object (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_pairs ⇒ Object (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 |
#devs ⇒ Object (readonly)
Returns the value of attribute devs.
9 10 11 |
# File 'lib/pair_see/seer.rb', line 9 def devs @devs end |
#log_lines ⇒ Object (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_commits ⇒ Object
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_commits ⇒ Object
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.(dev) end.map do|log_line| log_line.card_number(@card_prefix) end.compact end |
#cards_per_person ⇒ Object
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_pair ⇒ Object
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_pair ⇒ Object
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_commits ⇒ Object
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_data ⇒ Object
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 |
#recommended_pairings ⇒ Object
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_commits ⇒ Object
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_range ⇒ Object
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 |