class Bullit::File

Public Class Methods

add_task(text) click to toggle source
# File lib/bullit/file.rb, line 60
def self.add_task(text)
  file = today_file_contents

  if file[:tasks] == {}
    file[:tasks] = [ Task.new(text: text).to_h ]
  else
    file[:tasks] = today_tasks << Task.new(text: text).to_h
  end

  today_file.write(YAML.dump(file))
end
complete_task(task_number) click to toggle source
# File lib/bullit/file.rb, line 84
def self.complete_task(task_number)
  file = today_file_contents

  unless file[:tasks].nil?
    unless file[:tasks][task_number].nil?
      file[:tasks][task_number] = file[:tasks][task_number].to_task.mark_as_complete
      today_file.write(YAML.dump(file))
    end
  end
end
delete_task(task_number) click to toggle source
# File lib/bullit/file.rb, line 72
def self.delete_task(task_number)
  file = today_file_contents

  unless file[:tasks].nil?
    unless file[:tasks][task_number].nil?
      file[:tasks].delete_at(task_number)
    end
  end
  
  today_file.write(YAML.dump(file))
end
generate_today_file(loud) click to toggle source
# File lib/bullit/file.rb, line 10
def self.generate_today_file(loud)
  today_file.dirname.mkpath unless today_file.dirname.exist?

  unless today_file.exist?
    t = Time.now

    title = "Journal for #{t.strftime('%m/%d/%y')}"

    file_contents = {
      title: title,
      tasks: incomplete_tasks_from_yesterday(loud)
    }

    today_file.write(YAML.dump(file_contents))
    
    puts "#{today_file.to_s} created." if loud
  end
end
incomplete_tasks_from_yesterday(loud) click to toggle source
# File lib/bullit/file.rb, line 29
def self.incomplete_tasks_from_yesterday(loud)
  if yesterday_file.exist?
    file = yesterday_file_contents
    
    return {} if file[:tasks].empty?
    
    file[:tasks].each do |t|
      unless t[:complete] == true
        action = TTY::Prompt.new.select("\nWould you like to complete\n\n\t'#{t[:text]}'\n\nor migrate it to today's entry?\n", %w(complete migrate))
        if action == 'complete'
          t = t.to_task.mark_as_complete
        end
      end
    end

    file[:tasks] = file[:tasks].reject{ |t| t[:complete] == true }

    yesterday_file.write(YAML.dump(file))

    if file[:tasks] == {}
      return nil
    else
      return file[:tasks]
    end
  end
end
today_file() click to toggle source
# File lib/bullit/file.rb, line 95
def self.today_file
  t = Time.now

  year    = t.strftime "%Y"
  week    = t.strftime "%W" 
  weekday = t.strftime "%u"

  Pathname("#{Dir.home}/.bullit/journal/#{year}/#{week}/#{weekday}.yaml")
end
today_file_contents() click to toggle source
# File lib/bullit/file.rb, line 105
def self.today_file_contents
  YAML.load(today_file.read)
end
today_tasks() click to toggle source
# File lib/bullit/file.rb, line 56
def self.today_tasks
  YAML.load(today_file.read)[:tasks]
end
yesterday_file() click to toggle source
# File lib/bullit/file.rb, line 109
def self.yesterday_file
  t = Time.now

  year    = t.strftime "%Y"
  week    = t.strftime "%W" 
  weekday = t.strftime("%u").to_i

  # TODO: the logic here is a bit dodgy... it should look for the latest file in case you don't use your machine for more than one day.
  if weekday > 1
    Pathname("#{Dir.home}/.bullit/journal/#{year}/#{week}/#{(weekday - 1).to_s}.yaml")
  else
    Pathname("#{Dir.home}/.bullit/journal/#{year}/#{week-1}/7.yaml")
  end
end
yesterday_file_contents() click to toggle source
# File lib/bullit/file.rb, line 124
def self.yesterday_file_contents
  YAML.load(yesterday_file.read)
end