Created
June 22, 2012 08:39
-
-
Save pzaich/2971384 to your computer and use it in GitHub Desktop.
To Do Terminal App
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| require 'time' | |
| require 'csv' | |
| class TaskItem | |
| attr_accessor :task, :created_at, :completed, :completed_at | |
| ###Intialize with optional hash values for existing todos | |
| def initialize(task_string, optional_values = {}) | |
| values = {created_at: Time.now, completed: false, completed_at: ""}.merge(optional_values) | |
| @task = task_string | |
| @created_at = values[:created_at] | |
| @completed = values[:completed] | |
| @completed_at = values[:completed_at] | |
| end | |
| def complete! | |
| @completed = true | |
| @completed_at = Time.now | |
| self | |
| end | |
| def return_task_item | |
| "#{@task} | #{@created_at} | #{@completed} | #{@completed_at}" | |
| end | |
| def print_to_file | |
| "#{@task},#{@created_at},#{@completed},#{@completed_at}" | |
| end | |
| end | |
| class ToDoList | |
| attr_accessor :incomplete_tasks, :complete_tasks | |
| def initialize | |
| @incomplete_tasks = [] | |
| @complete_tasks = [] | |
| @raw_list = CSV.open('todolist.csv', 'w+', {headers: true, header_converters: :symbol}) | |
| add_items_from_file | |
| end | |
| ### Load existing tasks into task arrays as TaskItem Objects | |
| def add_items_from_file | |
| @raw_list.each do |line| | |
| if line[:completed] != "true" | |
| @incomplete_tasks << TaskItem.new(line[:task], created_at: Time.parse(line[:created_at]), | |
| completed: line[:completed], completed_at: line[:completed_at] ) | |
| else | |
| @complete_tasks << TaskItem.new(line[:task], created_at: Time.parse(line[:created_at]), | |
| completed: line[:completed], completed_at: Time.parse(line[:completed_at])) | |
| end | |
| end | |
| end | |
| def save | |
| @raw_list.rewind | |
| @raw_list.each_by_index do |line| | |
| task = @complete_tasks[line-1] | |
| end | |
| end | |
| ### Code to Write Back to File | |
| #### Output the lists | |
| def sort_by_creation_date | |
| sorted_incomplete_tasks = @incomplete_tasks.sort_by { |task_item| task_item.created_at } | |
| return_list(sorted_incomplete_tasks) | |
| end | |
| def sort_by_completion_date | |
| sorted_complete_tasks = @complete_tasks.sort_by { |task_item| task_item.completed_at }.reverse | |
| return_list(sorted_complete_tasks) | |
| end | |
| def return_list(list_of_items) | |
| list_of_items.each_with_index do |task_item, index| | |
| puts "#{index + 1}. #{task_item.return_task_item}" | |
| end | |
| end | |
| def delete_task_at(item_number) | |
| @incomplete_tasks.delete_at(item_number - 1) | |
| end | |
| ##### Add new TaskItem Object to @incomplete_tasks | |
| def add(task) | |
| @incomplete_tasks << TaskItem.new(task) | |
| end | |
| def append(line_number, task) | |
| @incomplete_tasks.insert(line_number, task) | |
| end | |
| def prepend(line_number, task) | |
| @incomplete_tasks.insert(line_number-1, task) | |
| end | |
| ### Complete task | |
| def complete(index) | |
| @complete_tasks << @incomplete_tasks[index - 1].complete! | |
| delete_task_at(index - 1) | |
| end | |
| end | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment