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 +4 -4
- data/CHANGELOG +3 -0
- data/README.md +16 -1
- data/lib/base_interceptor.rb +45 -0
- data/lib/grpc_rest/version.rb +1 -1
- data/spec/base_interceptor_spec.rb +30 -0
- data/spec/spec_helper.rb +1 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 47964383a0aa5a5835edd72fae78e2febe1364fdd13f598a588dc3702f5f882b
|
4
|
+
data.tar.gz: 14255db74de1d544d8964f3bb3b2e5515f6a25d50ab54bd0e00e6eb550ec9309
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
data/lib/grpc_rest/version.rb
CHANGED
@@ -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.
|
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-
|
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
|