class MobRotation::Rotation

Public Class Methods

annoying_and_probably_not_accidental_beep(n = number_of_beeps) click to toggle source
# File lib/mob_rotation/rotation.rb, line 42
def self.annoying_and_probably_not_accidental_beep(n = number_of_beeps)
  n.times { print("\a") || sleep(minimum_sleep_between_beeps) }
end
minimum_sleep_between_beeps() click to toggle source
# File lib/mob_rotation/rotation.rb, line 46
def self.minimum_sleep_between_beeps
  0.2
end
new(database, git_dir) click to toggle source
# File lib/mob_rotation/rotation.rb, line 54
def initialize(database, git_dir)
  @git_dir = git_dir
  @database = database
  @real_mobsters = @database.sanitized_entries_in do | entry |
    build_mobster(entry)
  end
end
number_of_beeps() click to toggle source
# File lib/mob_rotation/rotation.rb, line 50
def self.number_of_beeps
  5
end

Public Instance Methods

add_mobster(*mobsters_to_add) click to toggle source
# File lib/mob_rotation/rotation.rb, line 101
def add_mobster(*mobsters_to_add)
  mobsters_to_add.collect(&:to_s).collect(&:strip).each do |mobster_to_add|
    fail if mobster_to_add.empty?

    if @real_mobsters.collect(&:name).include?(mobster_to_add)
      write("user name '#{mobster_to_add}' already exists")
      next
    end

    @real_mobsters << Mobster.new(mobster_to_add)
  end

  sync
end
build_mobster(entry) click to toggle source
# File lib/mob_rotation/rotation.rb, line 62
def build_mobster(entry)
  name = extract_name_from(entry)
  email = extract_email_from(entry)
  Mobster.new(name, email)
end
countdown_to_rotate(seconds = 300) click to toggle source
# File lib/mob_rotation/rotation.rb, line 144
def countdown_to_rotate(seconds = 300)
  sleep(seconds)
  puts("Time to rotate")
  self.class.annoying_and_probably_not_accidental_beep
end
extract_email_from(entry) click to toggle source
# File lib/mob_rotation/rotation.rb, line 68
def extract_email_from(entry)
  if entry =~ /\<(.*)\>/
    Regexp.last_match[1]
  end
end
extract_next_mobster_email() click to toggle source
# File lib/mob_rotation/rotation.rb, line 176
def extract_next_mobster_email
  email = @real_mobsters.first.email.to_s.strip
  email.empty? ? "mob@rubysteps.com" : email
end
format_mobster(role, person) click to toggle source
# File lib/mob_rotation/rotation.rb, line 93
def format_mobster(role, person)
  if person.email.to_s.empty?
    write("#{role} #{person.name}")
  else
    write("#{role} #{person.name.strip} <#{person.email.strip}>")
  end
end
inform_lovely_user(command) click to toggle source
# File lib/mob_rotation/rotation.rb, line 150
def inform_lovely_user(command)
  puts("Unknown command #{command}")
  show_help
end
random(seed = nil) click to toggle source
# File lib/mob_rotation/rotation.rb, line 168
def random(seed = nil)
  puts("Randomized Output")
  rotate_mobsters do
    srand(seed.to_i) if seed
    @real_mobsters.shuffle!
  end
end
remove_mobster(given_mobster) click to toggle source
# File lib/mob_rotation/rotation.rb, line 116
def remove_mobster(given_mobster)
  @real_mobsters.each_with_index do |mobster, i|
    if found_mobster(mobster, given_mobster)
      @real_mobsters.delete_at(i)
    end
  end
  sync
end
remove_mobsters(*mobsters) click to toggle source
# File lib/mob_rotation/rotation.rb, line 125
def remove_mobsters(*mobsters)
  mobsters.each do |mobster|
    remove_mobster(mobster)
  end
end
rotate() click to toggle source
# File lib/mob_rotation/rotation.rb, line 161
def rotate
  puts("")
  rotate_mobsters do
    @real_mobsters << @real_mobsters.shift
  end
end
rotate_mobsters(&rotation_algorithm) click to toggle source
# File lib/mob_rotation/rotation.rb, line 155
def rotate_mobsters(&rotation_algorithm)
  rotation_algorithm.call
  git_config_update
  sync
end
show_help() click to toggle source
# File lib/mob_rotation/rotation.rb, line 131
def show_help
  puts ["Available commands are:",
        "show",
        "help",
        "rotate",
        "random",
        "add <name1> [name2]",
        "remove <name1> [name2]",
        "run_with_timer [seconds]"
       ]
end
show_mobsters() click to toggle source
# File lib/mob_rotation/rotation.rb, line 78
def show_mobsters
  @real_mobsters.each_with_index do |person, index|
    case index
    when 0
      write("git username: #{person.name}")
      write("git user email: #{person.email}")
      format_mobster("Driver", person)
    when 1
      format_mobster("Navigator", person)
    else
      format_mobster("Mobster", person)
    end
  end
end
time_to_rotate() click to toggle source
# File lib/mob_rotation/rotation.rb, line 181
def time_to_rotate
  puts("Time to rotate!")
end
write(text) click to toggle source
# File lib/mob_rotation/rotation.rb, line 74
def write(text)
  puts(text)
end

Private Instance Methods

extract_name_from(entry) click to toggle source
# File lib/mob_rotation/rotation.rb, line 205
def extract_name_from(entry)
  entry_to_array = entry.split("")
  entry_to_array.take_while { |c| c != "<" }.join("")
end
found_mobster(line, mobster) click to toggle source
# File lib/mob_rotation/rotation.rb, line 201
def found_mobster(line, mobster)
  line.to_s.strip == mobster.to_s
end
git_config_for(property, value) click to toggle source
# File lib/mob_rotation/rotation.rb, line 193
def git_config_for(property, value)
  "git --git-dir=#{@git_dir} config user.#{property} '#{value}'"
end
git_config_update() click to toggle source
# File lib/mob_rotation/rotation.rb, line 187
def git_config_update
  # FIX yo that rescue nil is bogus
  system(git_config_for("name", @real_mobsters.first.name)) rescue nil
  system(git_config_for("email", extract_next_mobster_email)) rescue nil
end
sync() click to toggle source
# File lib/mob_rotation/rotation.rb, line 197
def sync
  @database.write(@real_mobsters)
end