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