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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ffdf1c93c16974e41e9019801cfdee7c2c83753a20b5bed4bb1419ffd662a6f1
4
- data.tar.gz: dfda90c715fa0e254cfbe325680c22497165a0a48eeda53ac5fe4ec582281dde
3
+ metadata.gz: 624b3de8eba78302edff97ecf421a9d660fe781c72452b7f642fa5772e3a6234
4
+ data.tar.gz: 39143f78f27e6c0905cfb2092b23c4427c70c5810d78243935baf5c38bee9443
5
5
  SHA512:
6
- metadata.gz: 9d20315103c25260a4d44c5c21dbb95cfaf0114ef1e59b4b3031442c4a3b2894513f6cb4defb2775fa21c2c4148fb8452bd60d6d23adc0bd97dc8cc112b4e061
7
- data.tar.gz: f232d1ac05cd17b95b09f56e0078914857d012b8cce9a620a6bf0c20ff85505637acac7bc93892a07e45cc29b0423794a78e259a50b7910b9eef953060e54676
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module GrpcRest
4
- VERSION = '0.3.1'
4
+ VERSION = '0.4.0'
5
5
  end
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: nil,
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(request)).intercept! do
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 [Google::Protobuf::AbstractMessage]
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.3.1
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-02 00:00:00.000000000 Z
11
+ date: 2025-07-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: google-protobuf