class Minder::TaskManager

Attributes

database[R]
lines[RW]
search_results[R]
tasks[R]

Public Class Methods

new(database: nil) click to toggle source
# File lib/minder/tasks/task_manager.rb, line 11
def initialize(database: nil)
  @database = database
  @selected_task_index = 0
  @selected_search_result = 0
  @search_results = []
  @filter = ''
  reload
end

Public Instance Methods

add_task(task) click to toggle source
# File lib/minder/tasks/task_manager.rb, line 46
def add_task(task)
  File.open(DOING_FILE, 'a') do |file|
    file.write("#{task}\n")
  end
  database.add_task(task)
  reload
end
add_to_done_file(text) click to toggle source
# File lib/minder/tasks/task_manager.rb, line 101
def add_to_done_file(text)
  File.open(DONE_FILE, 'a') do |file|
    file.write("[#{Time.now.strftime('%Y-%m-%d %H:%M:%S')}] #{text}\n")
  end
end
complete_task() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 92
def complete_task
  task = selected_task
  database.complete_task(task)
  write_file_with_backup
  reload
  select_previous_task
  add_to_done_file("Finished: #{task.description}")
end
delete_task() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 78
def delete_task
  database.delete_task(selected_task)
  @tasks = nil
  write_file_with_backup
  reload

  select_previous_task
end
fetch_filtered_tasks() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 34
def fetch_filtered_tasks
  database.tasks_filtered_by(@filter)
end
filter(text) click to toggle source
# File lib/minder/tasks/task_manager.rb, line 20
def filter(text)
  @tasks = nil
  @filter = text
  @selected_task_index = 0
end
reload() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 87
def reload
  self.lines = File.read(DOING_FILE).strip.split("\n")
  @tasks = nil
end
select_first_task() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 144
def select_first_task
  @selected_task_index = 0
end
select_last_task() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 140
def select_last_task
  @selected_task_index = tasks.length - 1
end
select_next_task() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 54
def select_next_task
  if @selected_task_index + 1 <= tasks.length - 1
    @selected_task_index += 1
  else
    @selected_task_index = 0
  end
end
select_previous_task() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 62
def select_previous_task
  if @selected_task_index == 0
    @selected_task_index = tasks.length - 1
  else
    @selected_task_index -= 1
  end
end
select_search_result(search_index = 0) click to toggle source
# File lib/minder/tasks/task_manager.rb, line 155
def select_search_result(search_index = 0)
  return if search_results.empty?

  @selected_task_index = tasks.find_index do |task|
    task.description == search_results[search_index].description
  end
end
selected_task() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 74
def selected_task
  tasks[selected_task_index]
end
selected_task_index() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 70
def selected_task_index
  @selected_task_index
end
start_task() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 122
def start_task
  database.start_task(selected_task)
  write_file_with_backup
  add_to_done_file("Started: #{selected_task.description}")
  reload
end
started_task() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 136
def started_task
  tasks.find(&:started?)
end
tasks?() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 38
def tasks?
  !tasks.empty?
end
unfiltered_tasks() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 30
def unfiltered_tasks
  database.tasks
end
unstart_task() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 129
def unstart_task
  database.unstart_task(selected_task)
  write_file_with_backup
  add_to_done_file("Un-started: #{selected_task.description}")
  reload
end
update_task(task, options = {}) click to toggle source
# File lib/minder/tasks/task_manager.rb, line 42
def update_task(task, options = {})
  database.update_task(task, options)
end
write_file(path) click to toggle source
# File lib/minder/tasks/task_manager.rb, line 112
def write_file(path)
  File.open(path, 'w') do |file|
    unfiltered_tasks.each do |task|
      line = task.to_s
      line = "* #{line}" if task.started?
      file.write("#{line}\n")
    end
  end
end
write_file_with_backup() click to toggle source
# File lib/minder/tasks/task_manager.rb, line 107
def write_file_with_backup
  FileUtils.cp(DOING_FILE, DOING_FILE + '.old')
  write_file(DOING_FILE)
end