grpc-rest 0.3.1 → 0.4.0
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 +5 -0
- data/lib/generator/controller.rb.erb +1 -1
- data/lib/grpc_rest/version.rb +1 -1
- data/lib/grpc_rest.rb +19 -8
- data/spec/__snapshots__/service.snap +4 -4
- data/spec/testdata/base/app/controllers/my_service_controller.rb +4 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 624b3de8eba78302edff97ecf421a9d660fe781c72452b7f642fa5772e3a6234
|
4
|
+
data.tar.gz: 39143f78f27e6c0905cfb2092b23c4427c70c5810d78243935baf5c38bee9443
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1d3897f28befb1aadf27163d67771605116de984a80d86d9ae3b41d131729bfa75c0bd04c84f63ef622cf77637fe1958078d62e59afb1fc8cb95a073137e8733
|
7
|
+
data.tar.gz: 415c00d2059a1cbd9923d5689333f6ae8c07ac9f2c595e0abaed8183106aa6f30e2da751fdeefb5b856969a62fac5f6ae63e0e36cd146c409768f23df7e02a34
|
data/CHANGELOG
CHANGED
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
7
7
|
|
8
8
|
## UNRELEASED
|
9
9
|
|
10
|
+
# 0.4.0 - 2025-07-08
|
11
|
+
|
12
|
+
- Feature: Forward request headers to the gRPC call as metadata.
|
13
|
+
- ***BREAKING CHANGE***: Update interceptors to pass a Gruf::Controller::Request instead of the raw gRPC request object. This allows e.g. checking metadata inside the interceptor.
|
14
|
+
|
10
15
|
# 0.3.1 - 2025-07-02
|
11
16
|
- Fix: Include full error backtrace in logs
|
12
17
|
|
@@ -21,7 +21,7 @@ class <%= service.name.demodulize %>Controller < ActionController::Base
|
|
21
21
|
except(*%w(controller action <%= service.name.underscore %>))
|
22
22
|
grpc_request = GrpcRest.init_request(<%= method.request_type %>, parameters)
|
23
23
|
GrpcRest.assign_params(grpc_request, METHOD_PARAM_MAP["<%= method.name.underscore %>"], "<%= method.option_body %>", request.parameters)
|
24
|
-
render json: GrpcRest.send_request("<%= service.namespace %>::<%= service.name.classify %>", "<%= method.name.underscore %>", grpc_request, <%= method.rest_options.inspect
|
24
|
+
render json: GrpcRest.send_request("<%= service.namespace %>::<%= service.name.classify %>", "<%= method.name.underscore %>", grpc_request, <%= method.rest_options.inspect %>, headers: request.headers)
|
25
25
|
end
|
26
26
|
<% end %>
|
27
27
|
end
|
data/lib/grpc_rest/version.rb
CHANGED
data/lib/grpc_rest.rb
CHANGED
@@ -5,6 +5,9 @@ require 'grpc'
|
|
5
5
|
require 'grpc/core/status_codes'
|
6
6
|
|
7
7
|
module GrpcRest
|
8
|
+
|
9
|
+
GrpcRestCall = Struct.new(:metadata)
|
10
|
+
|
8
11
|
class << self
|
9
12
|
attr_accessor :strict_mode
|
10
13
|
|
@@ -208,21 +211,29 @@ module GrpcRest
|
|
208
211
|
end
|
209
212
|
end
|
210
213
|
|
211
|
-
def send_gruf_request(klass, service_obj, method, request)
|
214
|
+
def send_gruf_request(klass, service_obj, method, request, headers: {})
|
212
215
|
ref = service_obj.rpc_descs[method.classify.to_sym]
|
216
|
+
call = GrpcRestCall.new(headers)
|
213
217
|
handler = klass.new(
|
214
218
|
method_key: method.to_sym,
|
215
219
|
service: service_obj,
|
216
220
|
rpc_desc: ref,
|
217
|
-
active_call:
|
221
|
+
active_call: GrpcRestCall.new(headers),
|
222
|
+
message: request
|
223
|
+
)
|
224
|
+
controller_request = Gruf::Controllers::Request.new(
|
225
|
+
method_key: method.to_sym,
|
226
|
+
service: service_obj,
|
227
|
+
rpc_desc: ref,
|
228
|
+
active_call: call,
|
218
229
|
message: request
|
219
230
|
)
|
220
|
-
Gruf::Interceptors::Context.new(gruf_interceptors(
|
231
|
+
Gruf::Interceptors::Context.new(gruf_interceptors(controller_request)).intercept! do
|
221
232
|
handler.send(method.to_sym)
|
222
233
|
end
|
223
234
|
end
|
224
235
|
|
225
|
-
# @param request [
|
236
|
+
# @param request [Gruf::Controllers::Request]
|
226
237
|
# @return [Array<Gruf::Interceptors::Base>]
|
227
238
|
def gruf_interceptors(request)
|
228
239
|
error = Gruf::Error.new
|
@@ -236,19 +247,19 @@ module GrpcRest
|
|
236
247
|
klass.new.public_send(method, request)
|
237
248
|
end
|
238
249
|
|
239
|
-
def get_response(service, method, request)
|
250
|
+
def get_response(service, method, request, headers: {})
|
240
251
|
if defined?(Gruf)
|
241
252
|
service_obj = service.constantize::Service
|
242
253
|
klass = ::Gruf::Controllers::Base.subclasses.find do |k|
|
243
254
|
k.bound_service == service_obj
|
244
255
|
end
|
245
|
-
return send_gruf_request(klass, service_obj, method, request) if klass
|
256
|
+
return send_gruf_request(klass, service_obj, method, request, headers: headers) if klass
|
246
257
|
end
|
247
258
|
send_grpc_request(service, method, request)
|
248
259
|
end
|
249
260
|
|
250
|
-
def send_request(service, method, request, options = {})
|
251
|
-
response = get_response(service, method, request)
|
261
|
+
def send_request(service, method, request, options = {}, headers: {})
|
262
|
+
response = get_response(service, method, request, headers: headers)
|
252
263
|
if options[:emit_defaults]
|
253
264
|
response.to_json(emit_defaults: true)
|
254
265
|
else
|
@@ -29,7 +29,7 @@ class MyServiceController < ActionController::Base
|
|
29
29
|
except(*%w(controller action my_service))
|
30
30
|
grpc_request = GrpcRest.init_request(Testdata::TestRequest, parameters)
|
31
31
|
GrpcRest.assign_params(grpc_request, METHOD_PARAM_MAP["test"], "", request.parameters)
|
32
|
-
render json: GrpcRest.send_request("Testdata::MyService", "test", grpc_request, {:emit_defaults=>true})
|
32
|
+
render json: GrpcRest.send_request("Testdata::MyService", "test", grpc_request, {:emit_defaults=>true}, headers: request.headers)
|
33
33
|
end
|
34
34
|
|
35
35
|
def test2
|
@@ -37,7 +37,7 @@ class MyServiceController < ActionController::Base
|
|
37
37
|
except(*%w(controller action my_service))
|
38
38
|
grpc_request = GrpcRest.init_request(Testdata::TestRequest, parameters)
|
39
39
|
GrpcRest.assign_params(grpc_request, METHOD_PARAM_MAP["test2"], "second_record", request.parameters)
|
40
|
-
render json: GrpcRest.send_request("Testdata::MyService", "test2", grpc_request, {})
|
40
|
+
render json: GrpcRest.send_request("Testdata::MyService", "test2", grpc_request, {}, headers: request.headers)
|
41
41
|
end
|
42
42
|
|
43
43
|
def test3
|
@@ -45,7 +45,7 @@ class MyServiceController < ActionController::Base
|
|
45
45
|
except(*%w(controller action my_service))
|
46
46
|
grpc_request = GrpcRest.init_request(Testdata::TestRequest, parameters)
|
47
47
|
GrpcRest.assign_params(grpc_request, METHOD_PARAM_MAP["test3"], "", request.parameters)
|
48
|
-
render json: GrpcRest.send_request("Testdata::MyService", "test3", grpc_request, {})
|
48
|
+
render json: GrpcRest.send_request("Testdata::MyService", "test3", grpc_request, {}, headers: request.headers)
|
49
49
|
end
|
50
50
|
|
51
51
|
def test4
|
@@ -53,7 +53,7 @@ class MyServiceController < ActionController::Base
|
|
53
53
|
except(*%w(controller action my_service))
|
54
54
|
grpc_request = GrpcRest.init_request(Testdata::TestRequest, parameters)
|
55
55
|
GrpcRest.assign_params(grpc_request, METHOD_PARAM_MAP["test4"], "*", request.parameters)
|
56
|
-
render json: GrpcRest.send_request("Testdata::MyService", "test4", grpc_request, {})
|
56
|
+
render json: GrpcRest.send_request("Testdata::MyService", "test4", grpc_request, {}, headers: request.headers)
|
57
57
|
end
|
58
58
|
|
59
59
|
end
|
@@ -28,7 +28,7 @@ class MyServiceController < ActionController::Base
|
|
28
28
|
except(*%w(controller action my_service))
|
29
29
|
grpc_request = GrpcRest.init_request(Testdata::TestRequest, parameters)
|
30
30
|
GrpcRest.assign_params(grpc_request, METHOD_PARAM_MAP["test"], "", request.parameters)
|
31
|
-
render json: GrpcRest.send_request("Testdata::MyService", "test", grpc_request, {:emit_defaults=>true})
|
31
|
+
render json: GrpcRest.send_request("Testdata::MyService", "test", grpc_request, {:emit_defaults=>true}, headers: request.headers)
|
32
32
|
end
|
33
33
|
|
34
34
|
def test2
|
@@ -36,7 +36,7 @@ class MyServiceController < ActionController::Base
|
|
36
36
|
except(*%w(controller action my_service))
|
37
37
|
grpc_request = GrpcRest.init_request(Testdata::TestRequest, parameters)
|
38
38
|
GrpcRest.assign_params(grpc_request, METHOD_PARAM_MAP["test2"], "second_record", request.parameters)
|
39
|
-
render json: GrpcRest.send_request("Testdata::MyService", "test2", grpc_request, {})
|
39
|
+
render json: GrpcRest.send_request("Testdata::MyService", "test2", grpc_request, {}, headers: request.headers)
|
40
40
|
end
|
41
41
|
|
42
42
|
def test3
|
@@ -44,7 +44,7 @@ class MyServiceController < ActionController::Base
|
|
44
44
|
except(*%w(controller action my_service))
|
45
45
|
grpc_request = GrpcRest.init_request(Testdata::TestRequest, parameters)
|
46
46
|
GrpcRest.assign_params(grpc_request, METHOD_PARAM_MAP["test3"], "", request.parameters)
|
47
|
-
render json: GrpcRest.send_request("Testdata::MyService", "test3", grpc_request, {})
|
47
|
+
render json: GrpcRest.send_request("Testdata::MyService", "test3", grpc_request, {}, headers: request.headers)
|
48
48
|
end
|
49
49
|
|
50
50
|
def test4
|
@@ -52,7 +52,7 @@ class MyServiceController < ActionController::Base
|
|
52
52
|
except(*%w(controller action my_service))
|
53
53
|
grpc_request = GrpcRest.init_request(Testdata::TestRequest, parameters)
|
54
54
|
GrpcRest.assign_params(grpc_request, METHOD_PARAM_MAP["test4"], "*", request.parameters)
|
55
|
-
render json: GrpcRest.send_request("Testdata::MyService", "test4", grpc_request, {})
|
55
|
+
render json: GrpcRest.send_request("Testdata::MyService", "test4", grpc_request, {}, headers: request.headers)
|
56
56
|
end
|
57
57
|
|
58
58
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grpc-rest
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Daniel Orner
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-07-
|
11
|
+
date: 2025-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: google-protobuf
|