grpc-rest 0.1.18 → 0.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +4 -0
- data/Gemfile.lock +1 -1
- data/README.md +24 -1
- data/lib/grpc_rest/version.rb +1 -1
- data/lib/grpc_rest.rb +10 -1
- data/protoc-gen-rails/go.mod +6 -2
- data/protoc-gen-rails/go.sum +14 -0
- data/protoc-gen-rails/google-deps/protoc-gen-openapiv2/options/annotations.proto +44 -0
- data/protoc-gen-rails/google-deps/protoc-gen-openapiv2/options/openapiv2.proto +720 -0
- data/protoc-gen-rails/internal/output.go +21 -7
- data/protoc-gen-rails/internal/parse.go +19 -0
- data/protoc-gen-rails/testdata/base/app/controllers/my_service_controller.rb +4 -4
- data/protoc-gen-rails/testdata/test_service.proto +10 -0
- data/spec/grpc_rest_spec.rb +2 -1
- data/spec/protoc-gen-openapiv2/options/annotations_pb.rb +46 -0
- data/spec/protoc-gen-openapiv2/options/openapiv2_pb.rb +70 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/test_service_pb.rb +2 -1
- metadata +8 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c9a0fd0dc8a21c8ff8e5103a6bdffe98cc51cb522fb8dac59a65b2e9ceacc7c
|
4
|
+
data.tar.gz: a42ae7274e7a9db0161e3a40374d050a334312c742d8737652ab8fd8aaa55ec4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 624a27f0b5345256376d3a3cbd418543339d9f604ef42866da442a4589fd0732702b61e02f37d14e31b1cb53f5d707d73a8924af45df9be65995942316b75d86
|
7
|
+
data.tar.gz: d548c211f158b8095ec655691e11c1cb815382ecdfce8a42ed014fdcf82d5286e333d2894a8c5bdb3564b861beba29387b2936a39c6d28108e7d3d472da6ff45
|
data/CHANGELOG
CHANGED
@@ -7,6 +7,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## UNRELEASED
|
9
9
|
|
10
|
+
# 0.1.19 - 2024-08-22
|
11
|
+
|
12
|
+
- Add `emit_defaults` extension for JSON responses.
|
13
|
+
|
10
14
|
# 0.1.18 - 2024-08-15
|
11
15
|
- Automatically add prefixes to enum values if not provided
|
12
16
|
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -130,9 +130,32 @@ end
|
|
130
130
|
|
131
131
|
This gem does not currently support the full path expression capabilities of grpc-gateway or the Google [http proto](https://github.com/googleapis/googleapis/blob/master/google/api/http.proto). It only supports very basic single wildcard globbing (`*`). Contributions are welcome for more complex cases if they are needed.
|
132
132
|
|
133
|
+
## Proto Options
|
134
|
+
|
135
|
+
By default, grpc-rest uses the Protobuf default of omitting empty values on response. You can change this behavior by using an OpenAPI extension with the key `x-grpc-rest-emit-defaults`:
|
136
|
+
|
137
|
+
```protobuf
|
138
|
+
service MyService {
|
139
|
+
rpc Test(MyRequest) returns (MyResponse) {
|
140
|
+
option (google.api.http) = {
|
141
|
+
get: "/test/"
|
142
|
+
};
|
143
|
+
option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_operation) = {
|
144
|
+
extensions: {
|
145
|
+
key: 'x-grpc-rest-emit-defaults';
|
146
|
+
value: {
|
147
|
+
bool_value: true;
|
148
|
+
}
|
149
|
+
}
|
150
|
+
};
|
151
|
+
}
|
152
|
+
}
|
153
|
+
```
|
154
|
+
|
155
|
+
|
133
156
|
## To Do
|
134
157
|
|
135
|
-
* Replace Go implementation with Ruby (+ executable)
|
158
|
+
* Replace Go implementation with Ruby (+ executable)
|
136
159
|
|
137
160
|
## Contributing
|
138
161
|
|
data/lib/grpc_rest/version.rb
CHANGED
data/lib/grpc_rest.rb
CHANGED
@@ -212,7 +212,7 @@ module GrpcRest
|
|
212
212
|
klass.new.public_send(method, request)
|
213
213
|
end
|
214
214
|
|
215
|
-
def
|
215
|
+
def get_response(service, method, request)
|
216
216
|
if defined?(Gruf)
|
217
217
|
service_obj = service.constantize::Service
|
218
218
|
klass = ::Gruf::Controllers::Base.subclasses.find do |k|
|
@@ -224,6 +224,15 @@ module GrpcRest
|
|
224
224
|
end
|
225
225
|
send_grpc_request(service, method, request)
|
226
226
|
end
|
227
|
+
|
228
|
+
def send_request(service, method, request, options={})
|
229
|
+
response = get_response(service, method, request)
|
230
|
+
if options[:emit_defaults]
|
231
|
+
response.to_json(emit_defaults: true)
|
232
|
+
else
|
233
|
+
response
|
234
|
+
end
|
235
|
+
end
|
227
236
|
end
|
228
237
|
|
229
238
|
end
|
data/protoc-gen-rails/go.mod
CHANGED
@@ -5,17 +5,21 @@ go 1.22.0
|
|
5
5
|
require (
|
6
6
|
github.com/iancoleman/strcase v0.3.0
|
7
7
|
github.com/stretchr/testify v1.8.4
|
8
|
-
google.golang.org/genproto/googleapis/api v0.0.0-
|
9
|
-
google.golang.org/protobuf v1.
|
8
|
+
google.golang.org/genproto/googleapis/api v0.0.0-20240820151423-278611b39280
|
9
|
+
google.golang.org/protobuf v1.34.2
|
10
10
|
)
|
11
11
|
|
12
12
|
require (
|
13
13
|
github.com/davecgh/go-spew v1.1.1 // indirect
|
14
14
|
github.com/google/go-cmp v0.6.0 // indirect
|
15
|
+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect
|
15
16
|
github.com/kr/pretty v0.3.1 // indirect
|
16
17
|
github.com/pmezard/go-difflib v1.0.0 // indirect
|
17
18
|
github.com/rogpeppe/go-internal v1.12.0 // indirect
|
19
|
+
golang.org/x/text v0.17.0 // indirect
|
18
20
|
google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac // indirect
|
21
|
+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240820151423-278611b39280 // indirect
|
22
|
+
google.golang.org/grpc v1.65.0 // indirect
|
19
23
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
|
20
24
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
21
25
|
)
|
data/protoc-gen-rails/go.sum
CHANGED
@@ -3,6 +3,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
|
|
3
3
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
4
4
|
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
|
5
5
|
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
|
6
|
+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 h1:asbCHRVmodnJTuQ3qamDwqVOIjwqUPTYmYuemVOx+Ys=
|
7
|
+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0/go.mod h1:ggCgvZ2r7uOoQjOyu2Y1NhHmEPPzzuhWgcza5M1Ji1I=
|
6
8
|
github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI=
|
7
9
|
github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho=
|
8
10
|
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
|
@@ -20,14 +22,26 @@ github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU
|
|
20
22
|
github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4=
|
21
23
|
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
|
22
24
|
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
|
25
|
+
golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc=
|
26
|
+
golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY=
|
23
27
|
google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac h1:ZL/Teoy/ZGnzyrqK/Optxxp2pmVh+fmJ97slxSRyzUg=
|
24
28
|
google.golang.org/genproto v0.0.0-20240116215550-a9fa1716bcac/go.mod h1:+Rvu7ElI+aLzyDQhpHMFMMltsD6m7nqpuWDd2CwJw3k=
|
25
29
|
google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe h1:0poefMBYvYbs7g5UkjS6HcxBPaTRAmznle9jnxYoAI8=
|
26
30
|
google.golang.org/genproto/googleapis/api v0.0.0-20240125205218-1f4bbc51befe/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA=
|
27
31
|
google.golang.org/genproto/googleapis/api v0.0.0-20240228224816-df926f6c8641 h1:SO1wX9btGFrwj9EzH3ocqfwiPVOxfv4ggAJajzlHA5s=
|
28
32
|
google.golang.org/genproto/googleapis/api v0.0.0-20240228224816-df926f6c8641/go.mod h1:wLupoVsUfYPgOMwjzhYFbaVklw/INms+dqTp0tc1fv8=
|
33
|
+
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8=
|
34
|
+
google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142/go.mod h1:d6be+8HhtEtucleCbxpPW9PA9XwISACu8nvpPqF0BVo=
|
35
|
+
google.golang.org/genproto/googleapis/api v0.0.0-20240820151423-278611b39280 h1:YDFM9oOjiFhaMAVgbDxfxW+66nRrsvzQzJ51wp3OxC0=
|
36
|
+
google.golang.org/genproto/googleapis/api v0.0.0-20240820151423-278611b39280/go.mod h1:fO8wJzT2zbQbAjbIoos1285VfEIYKDDY+Dt+WpTkh6g=
|
37
|
+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240820151423-278611b39280 h1:XQMA2e105XNlEZ8NRF0HqnUOZzP14sUSsgL09kpdNnU=
|
38
|
+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240820151423-278611b39280/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU=
|
39
|
+
google.golang.org/grpc v1.65.0 h1:bs/cUb4lp1G5iImFFd3u5ixQzweKizoZJAwBNLR42lc=
|
40
|
+
google.golang.org/grpc v1.65.0/go.mod h1:WgYC2ypjlB0EiQi6wdKixMqukr6lBc0Vo+oOgjrM5ZQ=
|
29
41
|
google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I=
|
30
42
|
google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos=
|
43
|
+
google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg=
|
44
|
+
google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw=
|
31
45
|
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
32
46
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
|
33
47
|
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
@@ -0,0 +1,44 @@
|
|
1
|
+
syntax = "proto3";
|
2
|
+
|
3
|
+
package grpc.gateway.protoc_gen_openapiv2.options;
|
4
|
+
|
5
|
+
import "google/protobuf/descriptor.proto";
|
6
|
+
import "protoc-gen-openapiv2/options/openapiv2.proto";
|
7
|
+
|
8
|
+
option go_package = "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options";
|
9
|
+
|
10
|
+
extend google.protobuf.FileOptions {
|
11
|
+
// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.
|
12
|
+
//
|
13
|
+
// All IDs are the same, as assigned. It is okay that they are the same, as they extend
|
14
|
+
// different descriptor messages.
|
15
|
+
Swagger openapiv2_swagger = 1042;
|
16
|
+
}
|
17
|
+
extend google.protobuf.MethodOptions {
|
18
|
+
// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.
|
19
|
+
//
|
20
|
+
// All IDs are the same, as assigned. It is okay that they are the same, as they extend
|
21
|
+
// different descriptor messages.
|
22
|
+
Operation openapiv2_operation = 1042;
|
23
|
+
}
|
24
|
+
extend google.protobuf.MessageOptions {
|
25
|
+
// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.
|
26
|
+
//
|
27
|
+
// All IDs are the same, as assigned. It is okay that they are the same, as they extend
|
28
|
+
// different descriptor messages.
|
29
|
+
Schema openapiv2_schema = 1042;
|
30
|
+
}
|
31
|
+
extend google.protobuf.ServiceOptions {
|
32
|
+
// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.
|
33
|
+
//
|
34
|
+
// All IDs are the same, as assigned. It is okay that they are the same, as they extend
|
35
|
+
// different descriptor messages.
|
36
|
+
Tag openapiv2_tag = 1042;
|
37
|
+
}
|
38
|
+
extend google.protobuf.FieldOptions {
|
39
|
+
// ID assigned by protobuf-global-extension-registry@google.com for gRPC-Gateway project.
|
40
|
+
//
|
41
|
+
// All IDs are the same, as assigned. It is okay that they are the same, as they extend
|
42
|
+
// different descriptor messages.
|
43
|
+
JSONSchema openapiv2_field = 1042;
|
44
|
+
}
|