aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorGravatar Paul Yang <TeBoring@users.noreply.github.com>2018-05-17 17:11:06 -0700
committerGravatar Bo Yang <teboring@google.com>2018-05-25 13:02:59 -0700
commit5289ee0c2139b691111037806f088e306a31ac70 (patch)
tree9b01f1b28b942699f349c4fb5227c34e2d916c96 /src
parentd8483a92d7867af37afb8b439e4f64c915654c1f (diff)
Adopt ruby_package in ruby generated code. (#4627)
* Adopt ruby_package in ruby generated code. * Add test for ruby_package
Diffstat (limited to 'src')
-rw-r--r--src/google/protobuf/compiler/ruby/ruby_generator.cc19
1 files changed, 16 insertions, 3 deletions
diff --git a/src/google/protobuf/compiler/ruby/ruby_generator.cc b/src/google/protobuf/compiler/ruby/ruby_generator.cc
index 02aa61d1..bd737c02 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);
}