grpc-rest 0.1.20 → 0.1.21

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: 3b19a325cd920ec6632682c8f91b54e06a09444cece910dbc176e898f8e504cb
4
- data.tar.gz: 3fa53b62032088e7e57cae354326188cb93c22312d7dc463111b4d5a6992b68c
3
+ metadata.gz: '090bea208182dd067a0a1f0347e9cb4484610dca9a7a4f1c2f7689fa216d40e8'
4
+ data.tar.gz: 3695746b75dcbba972e88249ad2785551d7e0e4fbd9d8a01140496dfa4f2a002
5
5
  SHA512:
6
- metadata.gz: 235e5ea946e9e6b10be20485775d0f55f46b0ab1ecb7612f75e98c75be7ff0ca75b438e1649d3abc298196501615425675968cf0605f8968e3771cd8cde897e6
7
- data.tar.gz: 10d3caaa87389dca93982af06ce8143e615d0b6b2133f9485c4d51ec6e18b043faaa836960fcc141954e0fac07b644eba50b256062a22f5fed8c5b5a4f04da4a
6
+ metadata.gz: 963b26c2d6141a20a3739341bd564005000a7dfdbe42a0bee3becffd04bc1f7d455a692135f21037399e12431c0bba91e73c17b4aa0d4bef6c75944fef4d2782
7
+ data.tar.gz: eaad993e480c9a9e7d05c55dedd4a7de06712666b3cd5601b6566bcd5da955a5b30e7528562b117b35297862cc4a6ad3930c8aabcc5eb81bbba6417ab3babae5
data/CHANGELOG CHANGED
@@ -7,6 +7,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## UNRELEASED
9
9
 
10
+ # 0.1.21 - 2024-09-12
11
+ - Feature: Support gruf Interceptors.
12
+
10
13
  # 0.1.20 - 2024-09-10
11
14
  - Fix: Repeated float values weren't being treated as arrays and were crashing.
12
15
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- grpc-rest (0.1.19)
4
+ grpc-rest (0.1.21)
5
5
  grpc
6
6
  rails (>= 6.0)
7
7
 
@@ -91,8 +91,18 @@ GEM
91
91
  grpc (1.62.0-x86_64-linux)
92
92
  google-protobuf (~> 3.25)
93
93
  googleapis-common-protos-types (~> 1.0)
94
+ grpc-tools (1.64.0)
95
+ gruf (2.20.0)
96
+ activesupport (> 4)
97
+ concurrent-ruby (> 1)
98
+ grpc (~> 1.10)
99
+ grpc-tools (~> 1.10)
100
+ json (>= 2.3)
101
+ slop (>= 4.6)
102
+ zeitwerk (>= 2)
94
103
  i18n (1.14.4)
95
104
  concurrent-ruby (~> 1.0)
105
+ json (2.7.2)
96
106
  loofah (2.22.0)
97
107
  crass (~> 1.0.2)
98
108
  nokogiri (>= 1.12.0)
@@ -169,6 +179,7 @@ GEM
169
179
  rspec-mocks (~> 3.13)
170
180
  rspec-support (~> 3.13)
171
181
  rspec-support (3.13.1)
182
+ slop (4.10.1)
172
183
  thor (1.3.1)
173
184
  timeout (0.4.1)
174
185
  tzinfo (2.0.6)
@@ -184,6 +195,7 @@ PLATFORMS
184
195
 
185
196
  DEPENDENCIES
186
197
  grpc-rest!
198
+ gruf
187
199
  rspec-rails
188
200
 
189
201
  BUNDLED WITH
data/README.md CHANGED
@@ -152,6 +152,10 @@ service MyService {
152
152
  }
153
153
  ```
154
154
 
155
+ ## Gruf Interceptors
156
+
157
+ grpc-rest supports [gruf](https://github.com/bigcommerce/gruf) Interceptors. As long as you're not using a custom interceptor
158
+ registry, your interceptors will be called normally around the controller.
155
159
 
156
160
  ## To Do
157
161
 
data/grpc-rest.gemspec CHANGED
@@ -22,4 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.add_runtime_dependency('rails', '>= 6.0')
23
23
 
24
24
  spec.add_development_dependency('rspec-rails')
25
+ spec.add_development_dependency('gruf')
25
26
  end
@@ -1,3 +1,3 @@
1
1
  module GrpcRest
2
- VERSION = '0.1.20'
2
+ VERSION = '0.1.21'
3
3
  end
data/lib/grpc_rest.rb CHANGED
@@ -203,7 +203,18 @@ module GrpcRest
203
203
  active_call: nil,
204
204
  message: request
205
205
  )
206
- handler.send(method.to_sym)
206
+ Gruf::Interceptors::Context.new(gruf_interceptors(request)).intercept! do
207
+ handler.send(method.to_sym)
208
+ end
209
+ end
210
+
211
+ # @param request [Google::Protobuf::AbstractMessage]
212
+ # @return [Array<Gruf::Interceptors::Base>]
213
+ def gruf_interceptors(request)
214
+ error = Gruf::Error.new
215
+ interceptors = Gruf.interceptors.prepare(request, error)
216
+ interceptors.delete_if { |k| k.class.name.split('::').first == 'Gruf' }
217
+ interceptors
207
218
  end
208
219
 
209
220
  def send_grpc_request(service, method, request)
data/spec/gruf_spec.rb ADDED
@@ -0,0 +1,51 @@
1
+ require_relative './spec_helper'
2
+ require_relative './test_service_services_pb'
3
+ require 'gruf'
4
+
5
+ class GrufServerImpl < Gruf::Controllers::Base
6
+
7
+ bind ::Testdata::MyService::Service
8
+
9
+ def test
10
+ Testdata::TestResponse.new(some_int: 1, full_response: request.message.to_json)
11
+ end
12
+
13
+ def test_2
14
+ Testdata::TestResponse.new(some_int: 2, full_response: request.message.to_json)
15
+ end
16
+
17
+ def test_3
18
+ Testdata::TestResponse.new(some_int: 3, full_response: request.message.to_json)
19
+ end
20
+
21
+ def test_4
22
+ Testdata::TestResponse.new(some_int: 4, full_response: request.message.to_json)
23
+ end
24
+
25
+ cattr_accessor :intercepted
26
+ end
27
+
28
+ class TestInterceptor < ::Gruf::Interceptors::ServerInterceptor
29
+ def call
30
+ GrufServerImpl.intercepted = true
31
+ yield
32
+ end
33
+ end
34
+
35
+ Gruf::Server.new.add_interceptor(TestInterceptor, option_foo: 'value 123')
36
+
37
+ RSpec.describe MyServiceController, type: :request do
38
+ describe 'using get' do
39
+ it 'should be successful and call interceptors' do
40
+ GrufServerImpl.intercepted = false
41
+ get "/test/blah/xyz?test_id=abc"
42
+ expect(response).to be_successful
43
+ expect(response.parsed_body).to eq({
44
+ 'someInt' => 1,
45
+ 'fullResponse' => %({"testId":"abc","foobar":"xyz"}),
46
+ "ignoredKey" => ''
47
+ })
48
+ expect(GrufServerImpl.intercepted).to eq(true)
49
+ end
50
+ end
51
+ 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.1.20
4
+ version: 0.1.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Daniel Orner
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-09-10 00:00:00.000000000 Z
11
+ date: 2024-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grpc
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: gruf
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  description:
56
70
  email:
57
71
  - daniel.orner@flipp.com
@@ -88,6 +102,7 @@ files:
88
102
  - protoc-gen-rails/testdata/test.proto
89
103
  - protoc-gen-rails/testdata/test_service.proto
90
104
  - spec/grpc_rest_spec.rb
105
+ - spec/gruf_spec.rb
91
106
  - spec/protoc-gen-openapiv2/options/annotations_pb.rb
92
107
  - spec/protoc-gen-openapiv2/options/openapiv2_pb.rb
93
108
  - spec/spec_helper.rb
@@ -118,6 +133,7 @@ specification_version: 4
118
133
  summary: Generate Rails controllers and routes from gRPC definitions.
119
134
  test_files:
120
135
  - spec/grpc_rest_spec.rb
136
+ - spec/gruf_spec.rb
121
137
  - spec/protoc-gen-openapiv2/options/annotations_pb.rb
122
138
  - spec/protoc-gen-openapiv2/options/openapiv2_pb.rb
123
139
  - spec/spec_helper.rb