class Ptimelog::Timelog

Load and tokenize the data from gtimelog

Public Class Methods

load() click to toggle source
# File lib/ptimelog/timelog.rb, line 11
def load
  instance.load
end
previous_entry() click to toggle source
# File lib/ptimelog/timelog.rb, line 19
def previous_entry
  lines = timelog_txt.readlines.last(2)
  last_line = lines.map(&:chomp).delete_if(&:empty?).last
  last_entry = instance.tokenize(last_line)

  Entry.from_timelog(last_entry)
end
timelog_txt() click to toggle source
# File lib/ptimelog/timelog.rb, line 15
def timelog_txt
  Pathname.new(Configuration.instance[:timelog]).expand_path
end

Public Instance Methods

load() click to toggle source
# File lib/ptimelog/timelog.rb, line 28
def load
  @load ||= parse(read)
end
parse(data) click to toggle source
# File lib/ptimelog/timelog.rb, line 44
def parse(data)
  data.split("\n")
      .map { |line| tokenize(line) }
      .group_by { |match| match && match[:date] }
      .to_a
end
previous_entry() click to toggle source
# File lib/ptimelog/timelog.rb, line 36
def previous_entry
  self.class.previous_entry
end
read() click to toggle source
# File lib/ptimelog/timelog.rb, line 40
def read
  timelog_txt.read
end
timelog_txt() click to toggle source
# File lib/ptimelog/timelog.rb, line 32
def timelog_txt
  self.class.timelog_txt
end
tokenize(line) click to toggle source
# File lib/ptimelog/timelog.rb, line 51
def tokenize(line)
  re_date = /(?<date>\d{4}-\d{2}-\d{2})/
  re_time = /(?<time>\d{2}:\d{2})/
  re_tick = /(?:(?<ticket>.*?): )/
  re_desc = /(?<description>.*?)/
  re_tags = /(?: -- (?<tags>.*)?)/

  regexp = /^#{re_date} #{re_time}: #{re_tick}?#{re_desc}#{re_tags}?$/
  line.match(regexp)
end