class Ptimelog::Command::Add

add a new entrie with the current date and time

Public Class Methods

new(task) click to toggle source
Calls superclass method
# File lib/ptimelog/command/add.rb, line 9
def initialize(task)
  super()

  @task = task
  @timelog = Ptimelog::Timelog.instance
  @new_lines = []
end

Public Instance Methods

needs_entries?() click to toggle source
# File lib/ptimelog/command/add.rb, line 17
def needs_entries?
  false
end
run() click to toggle source
# File lib/ptimelog/command/add.rb, line 21
def run
  add_empty_line if @timelog.previous_entry.date == yesterday
  add_entry(*parse_task(@task))

  save_file
end

Private Instance Methods

add_empty_line() click to toggle source
# File lib/ptimelog/command/add.rb, line 48
def add_empty_line
  @new_lines << ''
end
add_entry(date_time, task) click to toggle source
# File lib/ptimelog/command/add.rb, line 44
def add_entry(date_time, task)
  @new_lines << "#{date_time}: #{task}"
end
parse_task(line) click to toggle source
# File lib/ptimelog/command/add.rb, line 30
def parse_task(line)
  matches = line.match('(?<time>\d{1,2}:\d{2} )?(?<offset>[+-]\d+ )?(?<task>.*)')
  formatted_time = if matches[:time]
                     Time.parse(matches[:time])
                   else
                     Time.now
                   end
                   .localtime
                   .then { |time| time + (matches[:offset].to_i * 60) }
                   .strftime('%F %R')

  [formatted_time, matches[:task]]
end
save_file() click to toggle source
# File lib/ptimelog/command/add.rb, line 52
def save_file
  @timelog.timelog_txt.open('a') do |log|
    @new_lines.each do |line|
      log << "#{line}\n"
    end
  end
end
yesterday() click to toggle source
# File lib/ptimelog/command/add.rb, line 60
def yesterday
  NamedDate.new.named_date('yesterday')
end