Add example in ruby (#11717)
examples directory was missing an example in ruby, this PR aims to fix this.
Closes #11717
COPYBARA_INTEGRATE_REVIEW=https://github.com/protocolbuffers/protobuf/pull/11717 from mlitwiniuk:ruby_example 14a5d1a34a
PiperOrigin-RevId: 514756892
pull/12103/head
parent
c440da9e13
commit
ff5007f929
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