module Timetrap::Helpers

Public Instance Methods

format_date(time) click to toggle source
# File lib/timetrap/helpers.rb, line 66
def format_date time
  return '' unless time.respond_to?(:strftime)
  time.strftime('%a %b %d, %Y')
end
format_date_if_new(time, last_time) click to toggle source
# File lib/timetrap/helpers.rb, line 71
def format_date_if_new time, last_time
  return '' unless time.respond_to?(:strftime)
  same_day?(time, last_time) ? '' : format_date(time)
end
format_duration(secs)
Alias for: format_seconds
format_seconds(secs) click to toggle source
# File lib/timetrap/helpers.rb, line 80
def format_seconds secs
  negative = secs < 0
  secs = secs.abs
  formatted = "%2s:%02d:%02d" % [secs/3600, (secs%3600)/60, secs%60]
  formatted = "-#{formatted}" if negative
  formatted
end
Also aliased as: format_duration
format_time(time) click to toggle source
# File lib/timetrap/helpers.rb, line 61
def format_time time
  return '' unless time.respond_to?(:strftime)
  time.strftime('%H:%M:%S')
end
format_total(entries) click to toggle source
# File lib/timetrap/helpers.rb, line 89
def format_total entries
  secs = entries.inject(0) do |m, e|
    m += e.duration
  end
  "%2s:%02d:%02d" % [secs/3600, (secs%3600)/60, secs%60]
end
same_day?(time, other_time) click to toggle source
# File lib/timetrap/helpers.rb, line 76
def same_day? time, other_time
  format_date(time) == format_date(other_time)
end
selected_entries() click to toggle source
# File lib/timetrap/helpers.rb, line 41
def selected_entries
  ee = if (sheet = sheet_name_from_string(unused_args)) == 'all'
    Timetrap::Entry.where(Sequel.lit('sheet not like ? escape "!"', '!_%'))
  elsif (sheet = sheet_name_from_string(unused_args)) == 'full'
    Timetrap::Entry.where()
  elsif sheet =~ /.+/
    Timetrap::Entry.where(sheet: sheet)
  else
    Timetrap::Entry.where(sheet: Timer.current_sheet)
  end
  ee = ee.filter(Sequel.lit('start >= ?', Date.parse(Timer.process_time(args['-s']).to_s))) if args['-s']
  ee = ee.filter(Sequel.lit('start <= ?', Date.parse(Timer.process_time(args['-e']).to_s) + 1)) if args['-e']
  ee = ee.order(:start)
  if args['-g']
    re = Regexp::new(args['-g'])
    ee = ee.find_all{|e| re.match(e.note)}
  end
  ee
end
sheet_name_from_string(string) click to toggle source
# File lib/timetrap/helpers.rb, line 96
def sheet_name_from_string string
  string = string.strip
  case string
  when /^\W*all\W*$/ then "all"
  when /^\W*full\W*$/ then "full"
  when /^$/ then Timer.current_sheet
  else
    entry = DB[:entries].filter(Sequel.like(:sheet,string)).first ||
      DB[:entries].filter(Sequel.like(:sheet, "#{string}%")).first
    if entry
      entry[:sheet]
    else
      raise "Can't find sheet matching #{string.inspect}"
    end
  end
end