Module: Timetrap::Helpers

Included in:
CLI, Formatters::Text
Defined in:
lib/timetrap/helpers.rb

Instance Method Summary collapse

Instance Method Details

#format_date(time) ⇒ Object



49
50
51
52
# File 'lib/timetrap/helpers.rb', line 49

def format_date time
  return '' unless time.respond_to?(:strftime)
  time.strftime('%a %b %d, %Y')
end

#format_date_if_new(time, last_time) ⇒ Object



54
55
56
57
# File 'lib/timetrap/helpers.rb', line 54

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(stime, etime) ⇒ Object



63
64
65
66
67
# File 'lib/timetrap/helpers.rb', line 63

def format_duration stime, etime
  return '' unless stime and etime
  secs = etime.to_i - stime.to_i
  format_seconds secs
end

#format_seconds(secs) ⇒ Object



69
70
71
# File 'lib/timetrap/helpers.rb', line 69

def format_seconds secs
  "%2s:%02d:%02d" % [secs/3600, (secs%3600)/60, secs%60]
end

#format_time(time) ⇒ Object



44
45
46
47
# File 'lib/timetrap/helpers.rb', line 44

def format_time time
  return '' unless time.respond_to?(:strftime)
  time.strftime('%H:%M:%S')
end

#format_total(entries) ⇒ Object



73
74
75
76
# File 'lib/timetrap/helpers.rb', line 73

def format_total entries
  secs = entries.inject(0){|m, e|e_end = e.end_or_now; m += e_end.to_i - e.start.to_i if e_end && e.start;m}
  "%2s:%02d:%02d" % [secs/3600, (secs%3600)/60, secs%60]
end

#load_formatter(formatter) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/timetrap/helpers.rb', line 4

def load_formatter(formatter)
  err_msg = "Can't load #{formatter.inspect} formatter."
  begin
    paths = (
      Array(Config['formatter_search_paths']) +
      [ File.join( File.dirname(__FILE__), 'formatters') ]
    )
   if paths.detect do |path|
       begin
         fp = File.join(path, formatter)
         require File.join(path, formatter)
         true
       rescue LoadError
         nil
       end
     end
   else
     raise LoadError, "Couldn't find #{formatter}.rb in #{paths.inspect}"
   end
   Timetrap::Formatters.const_get(formatter.camelize)
  rescue LoadError, NameError => e
    err = e.class.new("#{err_msg} (#{e.message})")
    err.set_backtrace(e.backtrace)
    raise err
  end
end

#same_day?(time, other_time) ⇒ Boolean

Returns:

  • (Boolean)


59
60
61
# File 'lib/timetrap/helpers.rb', line 59

def same_day? time, other_time
  format_date(time) == format_date(other_time)
end

#selected_entriesObject



31
32
33
34
35
36
37
38
39
40
41
42
# File 'lib/timetrap/helpers.rb', line 31

def selected_entries
  ee = if (sheet = sheet_name_from_string(unused_args)) == 'all'
    Timetrap::Entry.filter('sheet not like ? escape "!"', '!_%')
  elsif sheet =~ /.+/
    Timetrap::Entry.filter('sheet = ?', sheet)
  else
    Timetrap::Entry.filter('sheet = ?', Timer.current_sheet)
  end
  ee = ee.filter('start >= ?', Date.parse(Timer.process_time(args['-s']).to_s)) if args['-s']
  ee = ee.filter('start <= ?', Date.parse(Timer.process_time(args['-e']).to_s) + 1) if args['-e']
  ee
end

#sheet_name_from_string(string) ⇒ Object



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/timetrap/helpers.rb', line 78

def sheet_name_from_string string
  string = string.strip
  case string
  when /^\W*all\W*$/ then "all"
  when /^$/ then Timer.current_sheet
  else
    entry = DB[:entries].filter(:sheet.like("#{string}")).first ||
      DB[:entries].filter(:sheet.like("#{string}%")).first
    if entry
      entry[:sheet]
    else
      raise "Can't find sheet matching #{string.inspect}"
    end
  end
end