Class: PairSee::Seer
- Inherits:
-
Object
- Object
- PairSee::Seer
- Defined in:
- lib/pair_see/seer.rb
Constant Summary collapse
- @@maximum_commits_to_parse =
9999
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
- #_lines_from(git_home, date_string) ⇒ Object
- #active_devs(config_file) ⇒ Object
- #all_commits ⇒ Object
- #all_most_recent_commits ⇒ Object
- #card_data(card_prefix) ⇒ Object
- #card_numbers(card_prefix) ⇒ 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(options) ⇒ Seer
constructor
A new instance of Seer.
- #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(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() @log_lines = _lines_from([:repo_location], [:after_date]) @sub_seer = CardsPerPerson.new(@log_lines, ) @active_devs = ActiveDevs.new(@log_lines, ).devs @devs = @sub_seer.devs @card_prefix = [:card_prefix] @dev_pairs = devs.combination(2) end |
Instance Attribute Details
#card_prefix ⇒ Object (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_pairs ⇒ Object (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 |
#devs ⇒ Object (readonly)
Returns the value of attribute devs.
11 12 13 |
# File 'lib/pair_see/seer.rb', line 11 def devs @devs end |
#log_lines ⇒ Object (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.}") 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_commits ⇒ Object
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_commits ⇒ Object
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_person ⇒ Object
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_pair ⇒ Object
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_pair ⇒ Object
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_commits ⇒ Object
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_data ⇒ Object
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 |
#recommended_pairings ⇒ Object
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_commits ⇒ Object
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_range ⇒ Object
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 |