Class: TaskManager

Inherits:
Object
  • Object
show all
Defined in:
lib/task_manager.rb

Overview

TaskManager to manage tasks

Constant Summary collapse

TASKS_FILE =
File.join(Dir.home, 'tasks.json')

Instance Method Summary collapse

Constructor Details

#initializeTaskManager

Returns a new instance of TaskManager.



42
43
44
# File 'lib/task_manager.rb', line 42

def initialize
  @tasks = load_tasks
end

Instance Method Details

#create_task(description) ⇒ Object

Create a new task



67
68
69
70
71
72
73
# File 'lib/task_manager.rb', line 67

def create_task(description)
  task = Task.new(description)
  task.id = @tasks.empty? ? 1 : @tasks.last.id + 1
  @tasks << task
  save_tasks
  puts "Task added successfully (ID: #{task.id})"
end

#delete_task(id) ⇒ Object

Delete a task



112
113
114
115
116
117
118
119
120
121
# File 'lib/task_manager.rb', line 112

def delete_task(id)
  task = find_task(id)
  if task
    @tasks.delete(task)
    save_tasks
    puts "Task deleted successfully!"
  else
    puts "Task not found."
  end
end

#find_task(id) ⇒ Object

Find a task by ID



95
96
97
# File 'lib/task_manager.rb', line 95

def find_task(id)
  @tasks.find { |task| task.id == id }
end

#list_tasksObject

List all tasks



76
77
78
79
80
81
82
# File 'lib/task_manager.rb', line 76

def list_tasks
  if @tasks.empty?
    puts "No tasks found.\n"
  else
    @tasks.each { |task| puts task }
  end
end

#list_tasks_by_status(status) ⇒ Object

List tasks by status



85
86
87
88
89
90
91
92
# File 'lib/task_manager.rb', line 85

def list_tasks_by_status(status)
  filtered_tasks = @tasks.select { |task| task.status == status }
  if filtered_tasks.empty?
    puts "No tasks found with status '#{status}'."
  else
    filtered_tasks.each { |task| puts task }
  end
end

#load_tasksObject



46
47
48
49
50
51
52
53
54
55
56
57
58
# File 'lib/task_manager.rb', line 46

def load_tasks
  return [] unless File.exist?(TASKS_FILE)

  file = File.read(TASKS_FILE)
  data = JSON.parse(file, symbolize_names: true)
  data.map do |task_data|
    task = Task.new(task_data[:description], task_data[:status])
    task.id = task_data[:id]
    task.created_at = Time.parse(task_data[:created_at])
    task.updated_at = Time.parse(task_data[:updated_at])
    task
  end
end

#mark_done(id) ⇒ Object

Mark a task as done



136
137
138
139
140
141
142
143
144
145
# File 'lib/task_manager.rb', line 136

def mark_done(id)
  task = find_task(id)
  if task
    task.update(task.description, 'done')
    save_tasks
    puts "Task marked as done!"
  else
    puts "Task not found."
  end
end

#mark_in_progress(id) ⇒ Object

Mark a task as in progress



124
125
126
127
128
129
130
131
132
133
# File 'lib/task_manager.rb', line 124

def mark_in_progress(id)
  task = find_task(id)
  if task
    task.update(task.description, 'in-progress')
    save_tasks
    puts "Task marked as in-progress!"
  else
    puts "Task not found."
  end
end

#save_tasksObject



60
61
62
63
64
# File 'lib/task_manager.rb', line 60

def save_tasks
  File.open(TASKS_FILE, 'w') do |file|
    file.write(JSON.pretty_generate(@tasks.map(&:to_h)))
  end
end

#update_task(id, new_description) ⇒ Object

Update a task



100
101
102
103
104
105
106
107
108
109
# File 'lib/task_manager.rb', line 100

def update_task(id, new_description)
  task = find_task(id)
  if task
    task.update(new_description, task.status)
    save_tasks
    puts "Task updated successfully!"
  else
    puts "Task not found."
  end
end