parent
e83848f092
commit
14a5d1a34a
3 changed files with 138 additions and 2 deletions
@ -0,0 +1,77 @@ |
|||||||
|
#! /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 |
@ -0,0 +1,42 @@ |
|||||||
|
#! /usr/bin/env ruby |
||||||
|
|
||||||
|
require './addressbook_pb' |
||||||
|
require 'pry' |
||||||
|
|
||||||
|
# Iterates though all people in the AddressBook and prints info about them. |
||||||
|
def list_people(address_book) |
||||||
|
address_book.people.each do |person| |
||||||
|
puts "Person ID: #{person.id}" |
||||||
|
puts " Name: #{person.name}" |
||||||
|
if person.email != "" |
||||||
|
puts " Email: #{person.email}" |
||||||
|
end |
||||||
|
|
||||||
|
person.phones.each do |phone_number| |
||||||
|
type = |
||||||
|
case phone_number.type |
||||||
|
when :MOBILE |
||||||
|
"Mobile phone" |
||||||
|
when :HOME |
||||||
|
"Home phone" |
||||||
|
when :WORK |
||||||
|
"Work phone" |
||||||
|
end |
||||||
|
puts " #{type} #: #{phone_number.number}" |
||||||
|
end |
||||||
|
end |
||||||
|
end |
||||||
|
|
||||||
|
# Main procedure: Reads the entire address book from a file and prints all |
||||||
|
# the information inside. |
||||||
|
if ARGV.length != 1 |
||||||
|
puts "Usage: #{$PROGRAM_NAME} ADDRESS_BOOK_FILE" |
||||||
|
exit(-1) |
||||||
|
end |
||||||
|
|
||||||
|
# Read the existing address book. |
||||||
|
f = File.open(ARGV[0], "rb") |
||||||
|
address_book = Tutorial::AddressBook.decode(f.read) |
||||||
|
f.close |
||||||
|
|
||||||
|
list_people(address_book) |
Loading…
Reference in new issue