Class: TaskManager
- Inherits:
-
Object
- Object
- TaskManager
- 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
-
#create_task(description) ⇒ Object
Create a new task.
-
#delete_task(id) ⇒ Object
Delete a task.
-
#find_task(id) ⇒ Object
Find a task by ID.
-
#initialize ⇒ TaskManager
constructor
A new instance of TaskManager.
-
#list_tasks ⇒ Object
List all tasks.
-
#list_tasks_by_status(status) ⇒ Object
List tasks by status.
- #load_tasks ⇒ Object
-
#mark_done(id) ⇒ Object
Mark a task as done.
-
#mark_in_progress(id) ⇒ Object
Mark a task as in progress.
- #save_tasks ⇒ Object
-
#update_task(id, new_description) ⇒ Object
Update a task.
Constructor Details
#initialize ⇒ TaskManager
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_tasks ⇒ Object
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_tasks ⇒ Object
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_tasks ⇒ Object
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 |