grpc-rest 0.1.13 → 0.1.14

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: 1cb358eab4313d2e6f4bc27e6e6e7f41694c4828bc176f91430696cc3153fabf
4
- data.tar.gz: f73e835ef854696b65e2d92f2d650748f25e5d7ce2a16c9bcc397cfc4d96686d
3
+ metadata.gz: 0713304a9f049b5c4cdd88510c9e2b32f9bfd9df2a66987a6b313212be2d6376
4
+ data.tar.gz: 33ca8e2b7014e3abd546967dcd55a8a9c422852026e6dd4275255c66f1c8eed2
5
5
  SHA512:
6
- metadata.gz: dc94a596a11a98b0bf69fa2f3215139d555429b1208d2c91c52266dfad9ddd2e867a1e40de258c8fc2f414b0234decfc5c00c17758291c2ac87d160c8d0c5b10
7
- data.tar.gz: 95f30263280cf09bc426843c27a41afaf35c009079d238c3b611a20fc766b53cc57c16c566f94f3f526b31356cf8509bf1548be2e12322791773594e37699e71
6
+ metadata.gz: 8707159314407984f4b83c5ae31247580c12de1958a0775de68e40a615ba083bfca6445070d566109a8b473b1f7bf7a8070fa94769ce5f3e3ff2222fd04ee924
7
+ data.tar.gz: 2ec048673f1f4ae4adbf42a7d61393aeebe9df4c6247535b2250d554d8c46c41576440133074dda527cf4cfb37b18786088399bcb9f027c1b904d7e83736271e
data/CHANGELOG CHANGED
@@ -7,8 +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.1.14 - 2024-06-25
11
+ - Emit the correct error code on failure.
12
+
10
13
  # 0.1.13 - 2024-06-24
11
- - Use JSON parsing / generation to fix inaccurate transformations (e.g. Timestamp).
14
+ - Use grpc's `to_json` methods to output fields correctly.
12
15
 
13
16
  # 0.1.12 - 2024-05-15
14
17
  - Parse numbers into Ruby number objects.
@@ -1,3 +1,3 @@
1
1
  module GrpcRest
2
- VERSION = '0.1.13'
2
+ VERSION = '0.1.14'
3
3
  end
data/lib/grpc_rest.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'google/protobuf/well_known_types'
2
2
  require 'grpc'
3
+ require 'grpc/core/status_codes'
3
4
 
4
5
  module GrpcRest
5
6
  class << self
@@ -105,16 +106,60 @@ module GrpcRest
105
106
  end
106
107
  end
107
108
 
109
+ # Ported from https://github.com/grpc-ecosystem/grpc-gateway/blob/main/runtime/errors.go#L36
110
+ def grpc_http_status(code)
111
+ case code
112
+ when GRPC::Core::StatusCodes::OK
113
+ :ok
114
+ when GRPC::Core::StatusCodes::CANCELLED
115
+ 499
116
+ when GRPC::Core::StatusCodes::INVALID_ARGUMENT,
117
+ GRPC::Core::StatusCodes::FAILED_PRECONDITION,
118
+ GRPC::Core::StatusCodes::OUT_OF_RANGE
119
+ :bad_request
120
+ when GRPC::Core::StatusCodes::DEADLINE_EXCEEDED
121
+ :gateway_timeout
122
+ when GRPC::Core::StatusCodes::NOT_FOUND
123
+ :not_found
124
+ when GRPC::Core::StatusCodes::ALREADY_EXISTS, GRPC::Core::StatusCodes::ABORTED
125
+ :conflict
126
+ when GRPC::Core::StatusCodes::PERMISSION_DENIED
127
+ :forbidden
128
+ when GRPC::Core::StatusCodes::UNAUTHENTICATED
129
+ :unauthorized
130
+ when GRPC::Core::StatusCodes::RESOURCE_EXHAUSTED
131
+ :too_many_requests
132
+ when GRPC::Core::StatusCodes::UNIMPLEMENTED
133
+ :not_implemented
134
+ when GRPC::Core::StatusCodes::UNAVAILABLE
135
+ :service_unavailable
136
+ else
137
+ :internal_server_error
138
+ end
139
+ end
140
+
108
141
  def error_msg(error)
142
+ if error.respond_to?(:code)
109
143
  {
110
- code: 3,
111
- message: "InvalidArgument: #{error.message}",
144
+ code: error.code,
145
+ message: error.message,
112
146
  details: [
113
147
  {
114
148
  backtrace: error.backtrace
115
149
  }
116
150
  ]
117
151
  }
152
+ else
153
+ {
154
+ code: 3,
155
+ message: "InvalidArgument: #{error.message}",
156
+ details: [
157
+ {
158
+ backtrace: error.backtrace
159
+ }
160
+ ]
161
+ }
162
+ end
118
163
  end
119
164
 
120
165
  def send_gruf_request(klass, service_obj, method, request)
@@ -46,8 +46,14 @@ class {{.ControllerName}}Controller < ActionController::Base
46
46
  protect_from_forgery with: :null_session
47
47
 
48
48
  rescue_from StandardError do |e|
49
- render json: GrpcRest.error_msg(e)
49
+ render json: GrpcRest.error_msg(e), status: :internal_server_error
50
50
  end
51
+ rescue_from GRPC::BadStatus do |e|
52
+ render json: GrpcRest.error_msg(e), status: :internal_server_error
53
+ end
54
+ rescue_from Google::Protobuf::TypeError do |e|
55
+ render json: GrpcRest.error_msg(e), status: :bad_request
56
+ end
51
57
  METHOD_PARAM_MAP = {
52
58
  {{range .Methods }}
53
59
  "{{.Name}}" => [
@@ -6,8 +6,14 @@ class MyServiceController < ActionController::Base
6
6
  protect_from_forgery with: :null_session
7
7
 
8
8
  rescue_from StandardError do |e|
9
- render json: GrpcRest.error_msg(e)
9
+ render json: GrpcRest.error_msg(e), status: :internal_server_error
10
10
  end
11
+ rescue_from GRPC::BadStatus do |e|
12
+ render json: GrpcRest.error_msg(e), status: :internal_server_error
13
+ end
14
+ rescue_from Google::Protobuf::TypeError do |e|
15
+ render json: GrpcRest.error_msg(e), status: :bad_request
16
+ end
11
17
  METHOD_PARAM_MAP = {
12
18
 
13
19
  "test" => [
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.13
4
+ version: 0.1.14
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-06-24 00:00:00.000000000 Z
11
+ date: 2024-06-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: grpc