| #! /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 |