1#! /usr/bin/env ruby 2 3# See README.md for information and build instructions. 4 5require './addressbook_pb' 6require 'pry' 7 8# creates Person object and fills it with data from user input 9def prompt_for_address() 10 person = Tutorial::Person.newlD() 11 12 puts "Enter person ID number:" 13 person.id = STDIN.gets.chomp.to_i 14 puts "Enter name:" 15 person.name = STDIN.gets.chomp 16 17 puts "Enter email address (blank for none):" 18 email = STDIN.gets.chomp 19 20 if email != "" 21 person.email = email 22 end 23 24 loop do 25 puts "Enter a phone number (or leave blank to finish):" 26 number = STDIN.gets.chomp 27 28 if number == "" 29 break 30 end 31 32 phone_number = Tutorial::Person::PhoneNumber.new(number: number) 33 puts "Is this a mobile, home or work phone?" 34 type = STDIN.gets.chomp 35 36 case type 37 when "mobile" 38 phone_number.type = :MOBILE 39 when "home" 40 phone_number.type = :HOME 41 when "work" 42 phone_number.type = :WORK 43 else 44 puts "Unknown phone type; leaving as default value." 45 end 46 person.phones.push(phone_number) 47 end 48 person 49end 50 51# Main procedure: Reads the entire address book from a file, 52# adds one person based on user input, then writes it back out to the same 53# file. 54if ARGV.length != 1 55 puts "Usage: #{$0} ADDRESS_BOOK_FILE" 56 exit(-1) 57end 58 59address_book = Tutorial::AddressBook.new() 60if File.exist?(ARGV[0]) 61 # Read the existing address book if it exists 62 f = File.open(ARGV[0], "rb") 63 address_book = Tutorial::AddressBook.decode(f.read) 64 f.close 65else 66 puts "#{$PROGRAM_NAME}: File not found. Creating new file." 67end 68 69person = prompt_for_address 70 71# Add an address. 72address_book.people.push(person) 73 74# Write the new address book back to disk. 75f = File.open(ARGV[0], "wb") 76f.write(Tutorial::AddressBook.encode(address_book)) 77f.close 78