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
|
@ -10,11 +10,12 @@ go: add_person_go list_people_go
|
|||
gotest: add_person_gotest list_people_gotest
|
||||
java: add_person_java list_people_java
|
||||
python: add_person_python list_people_python
|
||||
ruby: add_person_ruby list_people_ruby
|
||||
|
||||
clean:
|
||||
rm -f add_person_cpp list_people_cpp add_person_java list_people_java add_person_python list_people_python
|
||||
rm -f add_person_cpp list_people_cpp add_person_java list_people_java add_person_python list_people_python add_person_ruby list_people_ruby
|
||||
rm -f javac_middleman AddPerson*.class ListPeople*.class com/example/tutorial/protos/*.class
|
||||
rm -f protoc_middleman addressbook.pb.cc addressbook.pb.h addressbook_pb2.py com/example/tutorial/protos/*.java
|
||||
rm -f protoc_middleman protoc_middleman_ruby addressbook.pb.cc addressbook.pb.h addressbook_pb2.py addressbook_pb.rb com/example/tutorial/protos/*.java
|
||||
rm -f *.pyc
|
||||
rm -f go/tutorialpb/*.pb.go add_person_go list_people_go
|
||||
rm -f protoc_middleman_dart dart_tutorial/*.pb*.dart
|
||||
|
@ -39,6 +40,10 @@ protoc_middleman_dart: addressbook.proto
|
|||
pub get
|
||||
@touch protoc_middleman_dart
|
||||
|
||||
protoc_middleman_ruby: addressbook.proto
|
||||
protoc $$PROTO_PATH --ruby_out=. addressbook.proto
|
||||
@touch protoc_middleman_ruby
|
||||
|
||||
add_person_cpp: add_person.cc protoc_middleman
|
||||
pkg-config --cflags protobuf # fails if protobuf is not installed
|
||||
c++ -std=c++14 add_person.cc addressbook.pb.cc -o add_person_cpp `pkg-config --cflags --libs protobuf`
|
||||
|
@ -90,3 +95,15 @@ list_people_python: list_people.py protoc_middleman
|
|||
@echo '#! /bin/sh' > list_people_python
|
||||
@echo './list_people.py "$$@"' >> list_people_python
|
||||
@chmod +x list_people_python
|
||||
|
||||
add_person_ruby: add_person.rb protoc_middleman_ruby
|
||||
@echo "Writing shortcut script add_person_ruby..."
|
||||
@echo '#! /bin/sh' > add_person_ruby
|
||||
@echo './add_person.rb "$$@"' >> add_person_ruby
|
||||
@chmod +x add_person_ruby
|
||||
|
||||
list_people_ruby: list_people.rb protoc_middleman_ruby
|
||||
@echo "Writing shortcut script list_people_ruby..."
|
||||
@echo '#! /bin/sh' > list_people_ruby
|
||||
@echo './list_people.rb "$$@"' >> list_people_ruby
|
||||
@chmod +x list_people_ruby
|
||||
|
|
|
@ -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