SHOW:
|
|
- or go back to the newest paste.
| 1 | # DSH's mini-assignment 2! | |
| 2 | # Super awesome to-do list of doom | |
| 3 | ||
| 4 | class ToDoList | |
| 5 | attr_accessor :todo | |
| 6 | ||
| 7 | @@filename = "save.todo" | |
| 8 | def filename | |
| 9 | - | @@filename |
| 9 | + | @@filename |
| 10 | end | |
| 11 | ||
| 12 | def initialize | |
| 13 | puts "Welcome to DSH's Ruby to-do list!" | |
| 14 | ||
| 15 | self.todo = [] | |
| 16 | data = self.load | |
| 17 | if data != "" | |
| 18 | self.todo = Marshal.load(data) #Marshal is used to deserialize arrays | |
| 19 | end | |
| 20 | - | self.printTodoList |
| 20 | + | |
| 21 | ||
| 22 | def addTodo(newTodo) | |
| 23 | self.todo.push(newTodo) | |
| 24 | end | |
| 25 | ||
| 26 | def remove(index) | |
| 27 | self.todo.delete_at(index.to_i) | |
| 28 | end | |
| 29 | ||
| 30 | def edit(index, newText) | |
| 31 | self.todo[index] = newText | |
| 32 | end | |
| 33 | ||
| 34 | def printTodoList | |
| 35 | if self.todo.length == 0 | |
| 36 | puts "\nYou have no items in your to-do list!" | |
| 37 | else | |
| 38 | print "\nYour current to-do list:\n" | |
| 39 | self.todo.each_with_index{|item, index| puts "#{index+1}: #{item}"}
| |
| 40 | end | |
| 41 | end | |
| 42 | ||
| 43 | def load | |
| 44 | file = File.new(self.filename, "a+") | |
| 45 | data = "" | |
| 46 | while (line = file.gets) | |
| 47 | data += line | |
| 48 | end | |
| 49 | file.close | |
| 50 | return data | |
| 51 | end | |
| 52 | ||
| 53 | def save | |
| 54 | out_file = File.open(self.filename, "w") { |f| f.puts(Marshal.dump(self.todo)) } #Marshal is used to serialize arrays
| |
| 55 | end | |
| 56 | end | |
| 57 | ||
| 58 | list = ToDoList.new | |
| 59 | input = "0" #0 does nothing | |
| 60 | while input != "4" #This part is the "flow" of the program. This is essentially the UI of the console | |
| 61 | if input == "0" | |
| 62 | #Do nothing, we just don't wanna fall into the else | |
| 63 | elsif input == "1" #Add item | |
| 64 | puts "\nAwesome! What do you want to add to your list?" | |
| 65 | newItem = gets.chomp | |
| 66 | list.addTodo(newItem) | |
| 67 | elsif input == "2" #Edit item | |
| 68 | if list.todo.length > 0 #This is kind of important here because the user will get stuck in a loop if there are no items | |
| 69 | puts "\nWhich item would you like to edit? (Enter the number to the left of the item!)" | |
| 70 | indexToEdit = gets.chomp.to_i | |
| 71 | while indexToEdit > list.todo.length | |
| 72 | list.printTodoList | |
| 73 | puts "\nThat is not a valid index! Please select an index to edit." | |
| 74 | indexToEdit = gets.chomp.to_i | |
| 75 | end | |
| 76 | puts "\nWhat would you like your item to say now?" | |
| 77 | newText = gets.chomp | |
| 78 | list.edit(indexToEdit-1, newText) | |
| 79 | else | |
| 80 | puts "You don't have any items to edit!" | |
| 81 | end | |
| 82 | elsif input == "3" #Remove | |
| 83 | if list.todo.length > 0 #This is kind of important here because the user will get stuck in a loop if there are no items | |
| 84 | puts "\nWhich item would you like to remove? (Enter the number to the left of the item)" | |
| 85 | indexToDelete = gets.chomp.to_i | |
| 86 | while indexToDelete > list.todo.length | |
| 87 | list.printTodoList | |
| 88 | puts "\nThat is not a valid index! Please select an index to remove." | |
| 89 | indexToDelete = gets.chomp.to_i | |
| 90 | end | |
| 91 | indexToDelete -= 1 | |
| 92 | puts "\nAre you sure you want to remove '#{list.todo[indexToDelete]}'? (Yes or no)"
| |
| 93 | confirmation = gets.chomp.downcase | |
| 94 | if confirmation.index("y") == 0
| |
| 95 | list.remove(indexToDelete) | |
| 96 | puts "\nThe item was successfully removed!" | |
| 97 | else | |
| 98 | puts "\nAlright then, the item was not removed!" | |
| 99 | end | |
| 100 | else | |
| 101 | puts "You don't have any items to remove!" | |
| 102 | end | |
| 103 | else | |
| 104 | #We didn't hit any of the elses so the thing the user entered doesn't make sense, I guess. | |
| 105 | puts "\nUnknown command. Please select a number from 1 to 4 that corresponds with your desired action." | |
| 106 | end | |
| 107 | ||
| 108 | list.printTodoList | |
| 109 | - | if input != "0" |
| 109 | + | |
| 110 | - | list.printTodoList |
| 110 | + | |
| 111 | puts "2: Edit item" | |
| 112 | puts "3: Remove item" | |
| 113 | puts "4: Save and quit" | |
| 114 | input = gets.chomp | |
| 115 | end | |
| 116 | list.save |