grpc-rest 0.1.21 → 0.1.22

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '090bea208182dd067a0a1f0347e9cb4484610dca9a7a4f1c2f7689fa216d40e8'
4
- data.tar.gz: 3695746b75dcbba972e88249ad2785551d7e0e4fbd9d8a01140496dfa4f2a002
3
+ metadata.gz: 47964383a0aa5a5835edd72fae78e2febe1364fdd13f598a588dc3702f5f882b
4
+ data.tar.gz: 14255db74de1d544d8964f3bb3b2e5515f6a25d50ab54bd0e00e6eb550ec9309
5
5
  SHA512:
6
- metadata.gz: 963b26c2d6141a20a3739341bd564005000a7dfdbe42a0bee3becffd04bc1f7d455a692135f21037399e12431c0bba91e73c17b4aa0d4bef6c75944fef4d2782
7
- data.tar.gz: eaad993e480c9a9e7d05c55dedd4a7de06712666b3cd5601b6566bcd5da955a5b30e7528562b117b35297862cc4a6ad3930c8aabcc5eb81bbba6417ab3babae5
6
+ metadata.gz: 8d85e2f3169ec0dedff6f49e193ac1208caeee918c54b99ab3ee18f05973defad99edb8587fab5fe89cdbfb89d44278eda50f329e00e1bb304722ef10ef7c693
7
+ data.tar.gz: 7ab65c78dc7aadac67a325705d28a3b79873ce24562fa02f1e4f71500536612d49c58806259ed8340b65bd53b3f2f64bf9946b597751d4ff67ae29b086856d63
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.22 - 2024-10-31
11
+ - Fix: calling `fail!` in gruf Interceptors was failing with an unrelated exception.
12
+
10
13
  # 0.1.21 - 2024-09-12
11
14
  - Feature: Support gruf Interceptors.
12
15
 
data/README.md CHANGED
@@ -154,9 +154,24 @@ service MyService {
154
154
 
155
155
  ## Gruf Interceptors
156
156
 
157
- grpc-rest supports [gruf](https://github.com/bigcommerce/gruf) Interceptors. As long as you're not using a custom interceptor
157
+ grpc-rest supports [gruf](https://github.com/bigcommerce/gruf) Interceptors through a custom `GrpcRest::BaseInterceptor` class. As long as you're not using a custom interceptor
158
158
  registry, your interceptors will be called normally around the controller.
159
159
 
160
+ ```ruby
161
+ require 'grpc_rest/base_interceptor'
162
+
163
+ module Interceptors
164
+ # Interceptor for catching errors from controllers
165
+ class ErrorInterceptor < GrpcRest::BaseInterceptor
166
+
167
+ def call
168
+ # Your code here
169
+ end
170
+
171
+ end
172
+ end
173
+ ```
174
+
160
175
  ## To Do
161
176
 
162
177
  * Replace Go implementation with Ruby (+ executable)
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'gruf'
4
+
5
+ module GrpcRest
6
+ # Fixes an issue with the fail! method since the active call is not instantiated yet.
7
+ # Overloads https://github.com/bigcommerce/gruf/blob/main/lib/gruf/errors/helpers.rb#L34
8
+ class BaseInterceptor < ::Gruf::Interceptors::ServerInterceptor
9
+ def fail!(error_code, _app_code, message = 'unknown error', metadata = {})
10
+ raise grpc_error(error_code, message.to_s, metadata)
11
+ end
12
+
13
+ private
14
+
15
+ # Ported from https://github.com/flipp-oss/grpc-rest/blob/main/lib/grpc_rest.rb#L142
16
+ def grpc_error(error_code, message, metadata)
17
+ case error_code
18
+ when :ok
19
+ GRPC::Ok.new(message, metadata)
20
+ when 499
21
+ GRPC::Cancelled.new(message, metadata)
22
+ when :bad_request, :invalid_argument
23
+ GRPC::InvalidArgument.new(message, metadata)
24
+ when :gateway_timeout
25
+ GRPC::DeadlineExceeded.new(message, metadata)
26
+ when :not_found
27
+ GRPC::NotFound.new(message, metadata)
28
+ when :conflict
29
+ GRPC::AlreadyExists.new(message, metadata)
30
+ when :forbidden
31
+ GRPC::PermissionDenied.new(message, metadata)
32
+ when :unauthorized
33
+ GRPC::Unauthenticated.new(message, metadata)
34
+ when :too_many_requests
35
+ GRPC::ResourceExhausted.new(message, metadata)
36
+ when :not_implemented
37
+ GRPC::Unimplemented.new(message, metadata)
38
+ when :service_unavailable
39
+ GRPC::Unavailable.new(message, metadata)
40
+ else
41
+ GRPC::Internal.new(message, metadata)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,3 +1,3 @@
1
1
  module GrpcRest
2
- VERSION = '0.1.21'
2
+ VERSION = '0.1.22'
3
3
  end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative './spec_helper'
4
+ require 'src/proto/grpc/testing/test_services_pb'
5
+
6
+ RSpec.describe GrpcRest::BaseInterceptor, type: :class do
7
+ let(:rpc_service) { Grpc::Testing::TestService::Service.new }
8
+ let(:rpc_desc) { Grpc::Testing::TestService::Service.rpc_descs.values.first}
9
+ let(:message) { Grpc::Testing::SimpleRequest.new }
10
+
11
+ describe '#fail!' do
12
+ let(:error_message) { 'some message' }
13
+ let(:error_code) { :invalid_argument }
14
+
15
+ it 'intercepts and raises the error' do
16
+ request = Gruf::Controllers::Request.new(
17
+ method_key: :UnaryCall,
18
+ service: rpc_service,
19
+ rpc_desc: rpc_desc,
20
+ active_call: nil,
21
+ message: message)
22
+ interceptor = GrpcRest::BaseInterceptor.new(request, Gruf::Error.new)
23
+
24
+ expect{ interceptor.fail!(error_code, error_code, error_message) }.to raise_error(GRPC::InvalidArgument) do |error|
25
+ expect(error.message).to match(error_message)
26
+ expect(error.code).to eq(GRPC::Core::StatusCodes::INVALID_ARGUMENT)
27
+ end
28
+ end
29
+ end
30
+ end
data/spec/spec_helper.rb CHANGED
@@ -17,6 +17,7 @@ loader.inflector.inflect('protoc-gen-openapiv2' => 'ProtocGenOpenapiv2')
17
17
  loader.ignore("#{Rails.root}/spec/test_service_pb.rb")
18
18
  loader.setup
19
19
  require "#{Rails.root}/spec/test_service_pb.rb"
20
+ require "#{Rails.root}/lib/base_interceptor.rb"
20
21
 
21
22
  $LOAD_PATH.unshift(File.expand_path('../lib', __dir__))
22
23
 
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.21
4
+ version: 0.1.22
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-12 00:00:00.000000000 Z
11
+ date: 2024-10-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grpc
@@ -81,6 +81,7 @@ files:
81
81
  - Gemfile.lock
82
82
  - README.md
83
83
  - grpc-rest.gemspec
84
+ - lib/base_interceptor.rb
84
85
  - lib/grpc_rest.rb
85
86
  - lib/grpc_rest/version.rb
86
87
  - protoc-gen-rails/.goreleaser.yml
@@ -101,6 +102,7 @@ files:
101
102
  - protoc-gen-rails/testdata/no_service/.keep
102
103
  - protoc-gen-rails/testdata/test.proto
103
104
  - protoc-gen-rails/testdata/test_service.proto
105
+ - spec/base_interceptor_spec.rb
104
106
  - spec/grpc_rest_spec.rb
105
107
  - spec/gruf_spec.rb
106
108
  - spec/protoc-gen-openapiv2/options/annotations_pb.rb
@@ -132,6 +134,7 @@ signing_key:
132
134
  specification_version: 4
133
135
  summary: Generate Rails controllers and routes from gRPC definitions.
134
136
  test_files:
137
+ - spec/base_interceptor_spec.rb
135
138
  - spec/grpc_rest_spec.rb
136
139
  - spec/gruf_spec.rb
137
140
  - spec/protoc-gen-openapiv2/options/annotations_pb.rb