Guest User

Untitled

a guest
Dec 29th, 2013
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
  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.     end
  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.     puts "\nWhat do you want to do next?"
  110.     puts "1: Add new item"
  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
Advertisement
Add Comment
Please, Sign In to add comment