• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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