diff options
author | Paul Yang <TeBoring@users.noreply.github.com> | 2018-05-17 17:11:06 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-05-17 17:11:06 -0700 |
commit | 9ccc3e536c4d83a79f82843894793fb850e6d4e4 (patch) | |
tree | 2d6170278b6ec354ca36d5f0b8142cce467023fe | |
parent | 036947f63087a48558e46bccfb6c99122a494266 (diff) | |
download | protobuf-9ccc3e536c4d83a79f82843894793fb850e6d4e4.tar.gz |
Adopt ruby_package in ruby generated code. (#4627)
* Adopt ruby_package in ruby generated code.
* Add test for ruby_package
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | ruby/Rakefile | 5 | ||||
-rw-r--r-- | ruby/tests/generated_code_test.rb | 2 | ||||
-rw-r--r-- | ruby/tests/test_ruby_package.proto | 7 | ||||
-rw-r--r-- | src/google/protobuf/compiler/ruby/ruby_generator.cc | 19 |
5 files changed, 31 insertions, 3 deletions
diff --git a/.gitignore b/.gitignore index abd72fc94..d886259c6 100644 --- a/.gitignore +++ b/.gitignore @@ -174,6 +174,7 @@ js/testproto_libs2.js ruby/lib/ ruby/tests/generated_code_pb.rb ruby/tests/test_import_pb.rb +ruby/tests/test_ruby_package_pb.rb ruby/Gemfile.lock ruby/compatibility_tests/v3.0.0/protoc ruby/compatibility_tests/v3.0.0/tests/generated_code_pb.rb diff --git a/ruby/Rakefile b/ruby/Rakefile index ff09cebbb..013bc99a4 100644 --- a/ruby/Rakefile +++ b/ruby/Rakefile @@ -87,6 +87,7 @@ end # Proto for tests. genproto_output << "tests/generated_code.rb" genproto_output << "tests/test_import.rb" +genproto_output << "tests/test_ruby_package.rb" file "tests/generated_code.rb" => "tests/generated_code.proto" do |file_task| sh "../src/protoc --ruby_out=. tests/generated_code.proto" end @@ -95,6 +96,10 @@ file "tests/test_import.rb" => "tests/test_import.proto" do |file_task| sh "../src/protoc --ruby_out=. tests/test_import.proto" end +file "tests/test_ruby_package.rb" => "tests/test_ruby_package.proto" do |file_task| + sh "../src/protoc --ruby_out=. tests/test_ruby_package.proto" +end + task :genproto => genproto_output task :clean do diff --git a/ruby/tests/generated_code_test.rb b/ruby/tests/generated_code_test.rb index b92b0462d..431d681bb 100644 --- a/ruby/tests/generated_code_test.rb +++ b/ruby/tests/generated_code_test.rb @@ -5,6 +5,7 @@ $LOAD_PATH.unshift(File.expand_path(File.dirname(__FILE__))) require 'generated_code_pb' require 'test_import_pb' +require 'test_ruby_package_pb' require 'test/unit' class GeneratedCodeTest < Test::Unit::TestCase @@ -15,5 +16,6 @@ class GeneratedCodeTest < Test::Unit::TestCase # aspect of the extension (basic.rb is for that). m = A::B::C::TestMessage.new() m2 = FooBar::TestImportedMessage.new() + m3 = A::B::TestRubyPackageMessage.new() end end diff --git a/ruby/tests/test_ruby_package.proto b/ruby/tests/test_ruby_package.proto new file mode 100644 index 000000000..b87256202 --- /dev/null +++ b/ruby/tests/test_ruby_package.proto @@ -0,0 +1,7 @@ +syntax = "proto3"; + +package foo_bar; + +option ruby_package = "A.B"; + +message TestRubyPackageMessage {} diff --git a/src/google/protobuf/compiler/ruby/ruby_generator.cc b/src/google/protobuf/compiler/ruby/ruby_generator.cc index 02aa61d1b..bd737c027 100644 --- a/src/google/protobuf/compiler/ruby/ruby_generator.cc +++ b/src/google/protobuf/compiler/ruby/ruby_generator.cc @@ -337,9 +337,20 @@ void GenerateEnumAssignment( } int GeneratePackageModules( - std::string package_name, + const FileDescriptor* file, google::protobuf::io::Printer* printer) { int levels = 0; + bool need_change_to_module; + std::string package_name; + + if (file->options().has_ruby_package()) { + package_name = file->options().ruby_package(); + need_change_to_module = false; + } else { + package_name = file->package(); + need_change_to_module = true; + } + while (!package_name.empty()) { size_t dot_index = package_name.find("."); string component; @@ -350,7 +361,9 @@ int GeneratePackageModules( component = package_name.substr(0, dot_index); package_name = package_name.substr(dot_index + 1); } - component = PackageToModule(component); + if (need_change_to_module) { + component = PackageToModule(component); + } printer->Print( "module $name$\n", "name", component); @@ -462,7 +475,7 @@ bool GenerateFile(const FileDescriptor* file, io::Printer* printer, printer->Print( "end\n\n"); - int levels = GeneratePackageModules(file->package(), printer); + int levels = GeneratePackageModules(file, printer); for (int i = 0; i < file->message_type_count(); i++) { GenerateMessageAssignment("", file->message_type(i), printer); } |