Protocol Buffers - Google's data interchange format (grpc依赖)
https://developers.google.com/protocol-buffers/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
1.8 KiB
77 lines
1.8 KiB
#! /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
|
|
|