78 lines
1.8 KiB
Ruby
Executable File
78 lines
1.8 KiB
Ruby
Executable File
#! /usr/bin/env ruby
|
|
|
|
# See README.md for information and build instructions.
|
|
|
|
require './addressbook_pb'
|
|
require 'pry'
|
|
|
|
# creates Person object and fills it with data from user input
|
|
def prompt_for_address()
|
|
person = Tutorial::Person.newlD()
|
|
|
|
puts "Enter person ID number:"
|
|
person.id = STDIN.gets.chomp.to_i
|
|
puts "Enter name:"
|
|
person.name = STDIN.gets.chomp
|
|
|
|
puts "Enter email address (blank for none):"
|
|
email = STDIN.gets.chomp
|
|
|
|
if email != ""
|
|
person.email = email
|
|
end
|
|
|
|
loop do
|
|
puts "Enter a phone number (or leave blank to finish):"
|
|
number = STDIN.gets.chomp
|
|
|
|
if number == ""
|
|
break
|
|
end
|
|
|
|
phone_number = Tutorial::Person::PhoneNumber.new(number: number)
|
|
puts "Is this a mobile, home or work phone?"
|
|
type = STDIN.gets.chomp
|
|
|
|
case type
|
|
when "mobile"
|
|
phone_number.type = :MOBILE
|
|
when "home"
|
|
phone_number.type = :HOME
|
|
when "work"
|
|
phone_number.type = :WORK
|
|
else
|
|
puts "Unknown phone type; leaving as default value."
|
|
end
|
|
person.phones.push(phone_number)
|
|
end
|
|
person
|
|
end
|
|
|
|
# Main procedure: Reads the entire address book from a file,
|
|
# adds one person based on user input, then writes it back out to the same
|
|
# file.
|
|
if ARGV.length != 1
|
|
puts "Usage: #{$0} ADDRESS_BOOK_FILE"
|
|
exit(-1)
|
|
end
|
|
|
|
address_book = Tutorial::AddressBook.new()
|
|
if File.exist?(ARGV[0])
|
|
# Read the existing address book if it exists
|
|
f = File.open(ARGV[0], "rb")
|
|
address_book = Tutorial::AddressBook.decode(f.read)
|
|
f.close
|
|
else
|
|
puts "#{$PROGRAM_NAME}: File not found. Creating new file."
|
|
end
|
|
|
|
person = prompt_for_address
|
|
|
|
# Add an address.
|
|
address_book.people.push(person)
|
|
|
|
# Write the new address book back to disk.
|
|
f = File.open(ARGV[0], "wb")
|
|
f.write(Tutorial::AddressBook.encode(address_book))
|
|
f.close
|