class UserSessionsPrinter

Attributes

pastel[R]
user_sessions[R]

Public Class Methods

new(user_sessions) click to toggle source
# File lib/ft_42.rb, line 466
def initialize(user_sessions)
  @pastel = Pastel.new
  @user_sessions = user_sessions
end

Public Instance Methods

active_or_last_active() click to toggle source
# File lib/ft_42.rb, line 492
def active_or_last_active
  unless user_sessions.sessions.empty?
    active = false
    user_sessions.sessions.each do |session|
      unless session.end_at.nil?
        if session.end_at - session.begin_at == 600.0
          unless active
            puts "Is #{highlight('active')} at " + highlight("#{cluster(session.host)}") + " computer #{session.host}."
          end
          unless session.primary?
            puts warning("Warning: Logged in on more than one computer. Please logout from #{session.host} ASAP.")
          end
          active = true
        end
      end
    end

    unless active
      last_active
    end
  end    
end
all() click to toggle source
# File lib/ft_42.rb, line 471
def all
  active_or_last_active
  hours_this_week
end
hours_progress_bar() click to toggle source
# File lib/ft_42.rb, line 530
def hours_progress_bar
  percent_complete = ((hours.to_f / HOURS_NEEDED.to_f) * 100).round
  if (percent_complete <= 100)
    progressbar_needed = ProgressBar.create(progress_mark: "█", length: 64, format: "%t:     |" + warning("%B") + "| #{hours}/38 hours")
    percent_complete.times { progressbar_needed.increment }
    print "Minimum "
    print progressbar_needed
    puts
  end
end
hours_progress_bar_achievement() click to toggle source
# File lib/ft_42.rb, line 541
def hours_progress_bar_achievement
  percent_complete = ((hours.to_f / HOURS_ACHIEVEMENT.to_f) * 100).round
  if (percent_complete <= 100)
    progressbar_needed = ProgressBar.create(progress_mark: "█", length: 60, format: "%t: |" + warning("%B") + "| #{hours}/90 hours")
    percent_complete.times { progressbar_needed.increment }
    print "Achievement "
    print progressbar_needed
    puts
  end
end
hours_progress_bar_challenge() click to toggle source
# File lib/ft_42.rb, line 552
def hours_progress_bar_challenge
  percent_complete = ((hours.to_f / HOURS_CHALLENGE.to_f) * 100).round
  if (percent_complete <= 100)
    progressbar_needed = ProgressBar.create(progress_mark: "█", length: 63, format: "%t:   |" + warning("%B") + "| #{hours}/100 hours")
    percent_complete.times { progressbar_needed.increment }
    print "Challenge "
    print progressbar_needed
    puts
  end
end
hours_this_week() click to toggle source
# File lib/ft_42.rb, line 519
def hours_this_week
  puts "Has " + highlight("#{hours} #{hours_pluralize}") + " in the clusters this week, starting #{last_monday}."

end
last_active() click to toggle source
# File lib/ft_42.rb, line 515
def last_active
  puts "Was last active " + (last_active_time_ago || "") + " at #{last_active_computer}."
end
progress_bar() click to toggle source
# File lib/ft_42.rb, line 524
def progress_bar
  hours_progress_bar
  hours_progress_bar_achievement
  hours_progress_bar_challenge
end
sessions() click to toggle source
# File lib/ft_42.rb, line 476
def sessions
  unless user_sessions.sessions.empty?
    user_sessions.sessions.each do |session|
      session_start       = "Session start:    " + session.begin_at.to_time.strftime("%A, %B %d at %I:%M:%S %p")
      session_end         = "Session end:      " + session.end_at.to_time.strftime("%A, %B %d at %I:%M:%S %p")
      duration_in_hours = ActiveSupport::NumberHelper.number_to_rounded((session.end_at.to_time - session.begin_at.to_time) / 60 / 60, :precision => 2)
      puts
      puts "Session duration: " + highlight("#{duration_in_hours} hours")
      puts session_start
      puts session_end
      puts "Session host:     " + session.host + " at " + cluster(session.host)
    end
    puts
  end
end
sessions_this_week() click to toggle source
# File lib/ft_42.rb, line 563
def sessions_this_week
  unless user_sessions.sessions.empty?
    user_sessions.sessions.each do |session|
      puts "#{session.host} from #{session.begin_at} to #{session.end_at}"
    end
  end
end

Private Instance Methods

cluster(host) click to toggle source
# File lib/ft_42.rb, line 593
def cluster(host)
  case true
  when host.include?("z1") then "Cluster 1"
  when host.include?("z2") then "Cluster 2"
  when host.include?("z3") then "Cluster 3"
  when host.include?("z3") then "Cluster 4"
  else host
  end
end
highlight(string) click to toggle source
# File lib/ft_42.rb, line 585
def highlight(string)
  pastel.bright_green.bold(string)
end
hours() click to toggle source
# File lib/ft_42.rb, line 573
def hours
  user_sessions.total_hours_this_week
end
hours_pluralize() click to toggle source
# File lib/ft_42.rb, line 577
def hours_pluralize
  if hours == 1
    "hour"
  else
    "hours"
  end
end
last_active_computer() click to toggle source
# File lib/ft_42.rb, line 607
def last_active_computer
  highlight(cluster(user_sessions.sessions.first.host))
end
last_active_time_ago() click to toggle source
# File lib/ft_42.rb, line 603
def last_active_time_ago
  highlight("#{ActionView::Base.new.time_ago_in_words(user_sessions.sessions.first.end_at)} ago") unless user_sessions.sessions.first.end_at.nil?
end
last_monday() click to toggle source
# File lib/ft_42.rb, line 611
def last_monday
  Time.current.beginning_of_week.strftime("%A, %B #{Time.current.beginning_of_week.day.ordinalize}")
end
warning(string) click to toggle source
# File lib/ft_42.rb, line 589
def warning(string)
  pastel.red(string)
end