diff --git a/protoc-gen-twirp_ruby/main.go b/protoc-gen-twirp_ruby/main.go index 2a872af..cde449d 100644 --- a/protoc-gen-twirp_ruby/main.go +++ b/protoc-gen-twirp_ruby/main.go @@ -234,7 +234,9 @@ func (g *generator) toRubyType(protoType string) string { } var prefix string - if pkg := g.fileToGoPackageName[def.File]; pkg != "" { + if pkg := def.File.GetOptions().GetRubyPackage(); pkg != "" { + prefix = strings.Join(splitRubyConstants(pkg), "::") + "::" + } else if pkg := g.fileToGoPackageName[def.File]; pkg != "" { prefix = strings.Join(splitRubyConstants(pkg), "::") + "::" } diff --git a/protoc-gen-twirp_ruby/main_test.go b/protoc-gen-twirp_ruby/main_test.go index 66d8126..f6f84bb 100644 --- a/protoc-gen-twirp_ruby/main_test.go +++ b/protoc-gen-twirp_ruby/main_test.go @@ -13,8 +13,8 @@ import ( "github.com/stretchr/testify/require" ) -func loadTestPb(t *testing.T) []*descriptor.FileDescriptorProto { - f, err := ioutil.ReadFile(filepath.Join("testdata", "fileset.pb")) +func loadTestPb(t *testing.T, file string) []*descriptor.FileDescriptorProto { + f, err := ioutil.ReadFile(filepath.Join("testdata", file)) require.NoError(t, err, "unable to read testdata protobuf file") set := new(descriptor.FileDescriptorSet) @@ -27,7 +27,7 @@ func loadTestPb(t *testing.T) []*descriptor.FileDescriptorProto { func testGenerator(t *testing.T) *generator { genReq := &plugin_go.CodeGeneratorRequest{ FileToGenerate: []string{"rubytypes.proto"}, - ProtoFile: loadTestPb(t), + ProtoFile: loadTestPb(t, "fileset.pb"), } return newGenerator(genReq) } @@ -80,6 +80,20 @@ func TestToRubyType(t *testing.T) { t.Errorf("expected %v; actual %v", tt.expected, actual) } } + + t.Run("ruby_package", func(t *testing.T) { + gen := newGenerator( + &plugin_go.CodeGeneratorRequest{ + FileToGenerate: []string{"ruby_package.proto"}, + ProtoFile: loadTestPb(t, "ruby_package.pb"), + }, + ) + + actual := gen.toRubyType(".twirp.rubytypes.request") + if actual != "The::API::Request" { + t.Errorf("expected %v; actual %v", "The::API::Request", actual) + } + }) } func TestSplitRubyConstants(t *testing.T) { diff --git a/protoc-gen-twirp_ruby/testdata/gen.go b/protoc-gen-twirp_ruby/testdata/gen.go index 62b03dc..aa42143 100644 --- a/protoc-gen-twirp_ruby/testdata/gen.go +++ b/protoc-gen-twirp_ruby/testdata/gen.go @@ -14,3 +14,4 @@ package testdata //go:generate protoc --descriptor_set_out=fileset.pb --include_imports --include_source_info ./rubytypes.proto +//go:generate protoc --descriptor_set_out=ruby_package.pb --include_imports --include_source_info ./ruby_package.proto diff --git a/protoc-gen-twirp_ruby/testdata/ruby_package.pb b/protoc-gen-twirp_ruby/testdata/ruby_package.pb new file mode 100644 index 0000000..0244a57 Binary files /dev/null and b/protoc-gen-twirp_ruby/testdata/ruby_package.pb differ diff --git a/protoc-gen-twirp_ruby/testdata/ruby_package.proto b/protoc-gen-twirp_ruby/testdata/ruby_package.proto new file mode 100644 index 0000000..8956cdc --- /dev/null +++ b/protoc-gen-twirp_ruby/testdata/ruby_package.proto @@ -0,0 +1,7 @@ +syntax = "proto3"; + +package twirp.rubytypes; + +option ruby_package = "The::API"; + +message request {}