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