grpc-rest 0.1.13 → 0.1.14

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: 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