rails_twirp 0.9.1 → 0.10.0

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: ff69015b104dada61abed7c68ad1f17c4f2f0d0ead6e05cf445060f69f4064aa
4
- data.tar.gz: 00f4b9f8551e568d4887d4072adb3e0ba0e8465e412d9c419f45a19eb1a8725a
3
+ metadata.gz: 2e2d7bf09840bf1a4d5aef432df4a47d50e653fe618781324d535c382b222cd9
4
+ data.tar.gz: 7481248258f806ea042f16bd12e09822be2f3d0abcd80c864ab0328572f428ce
5
5
  SHA512:
6
- metadata.gz: 75262234b40b10f6de6e4b650c7a7ad024c841d324acb44fadef6042f9725c1f1f1f423bb7d55c7ca300fcf54edf18f033a149331667c907f772ba7d1991e7e9
7
- data.tar.gz: 50eb75a5f7b293d873f9b2014ec642779e7622da4ae25e6a79352f3ed61e3e93ea13c1b5f53dcdb4e8f34337cbb29b1b7d99753fe19755a3fbb89512091220c4
6
+ metadata.gz: ed132bcafa1a4801ad6196bb26c76e11dbee3ec64a672363eaf46583189fdc58a6fcc515d5bc4525c5125f6ce06b11a00ac914dbfcc4252c93abedc89a58f4f1
7
+ data.tar.gz: 2469cfc961274f0cac6938951723e425f182becba4b95349c70c981e93f197551068b5124cf3afe687d1f537a3355787b3621275506650c02f5ac1c1c914530e
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 3.0.3
data/Gemfile CHANGED
@@ -7,3 +7,12 @@ gem "sqlite3"
7
7
  gem "pbbuilder", "~> 0.10.0"
8
8
  gem "standard"
9
9
  gem "pry"
10
+
11
+ # HACK(bouk): Overwrite Bundler's platform matcher to ignore universal CPU
12
+ # The protobuf and gRPC 'universal' macOS gems break on M1
13
+ module Bundler::MatchPlatform
14
+ def match_platform(p)
15
+ return false if ::Gem::Platform === platform && platform.cpu == "universal"
16
+ Bundler::MatchPlatform.platforms_match?(platform, p)
17
+ end
18
+ end
@@ -12,6 +12,7 @@ require "rails_twirp/rescue"
12
12
  require "rails_twirp/url_for"
13
13
  require "rails_twirp/implicit_render"
14
14
  require "rails_twirp/instrumentation"
15
+ require "rails_twirp/exception_handling"
15
16
 
16
17
  module RailsTwirp
17
18
  class Base < AbstractController::Base
@@ -36,6 +37,7 @@ module RailsTwirp
36
37
  include AbstractController::Callbacks
37
38
  include Rescue
38
39
  include Instrumentation
40
+ include ExceptionHandling
39
41
 
40
42
  attr_internal :request, :env, :response_class, :rpc_name
41
43
  def initialize
@@ -0,0 +1,26 @@
1
+ require "twirp/error"
2
+
3
+ module RailsTwirp
4
+ module ExceptionHandling
5
+ extend ActiveSupport::Concern
6
+
7
+ include AbstractController::Logger
8
+
9
+ def process_action(*)
10
+ super
11
+ rescue Exception => e
12
+ # We adopt the same error handling logic as Rails' standard middlewares:
13
+ # 1. When we 'show exceptions' we make the exception bubble up—this is useful for testing
14
+ raise e unless http_request.show_exceptions?
15
+
16
+ # 2. When we want to show detailed exceptions we include the exception message in the error
17
+ if http_request.get_header("action_dispatch.show_detailed_exceptions")
18
+ self.response_body = Twirp::Error.internal_with(e)
19
+ return
20
+ end
21
+
22
+ # 3. Otherwise we just return a vague internal error message
23
+ self.response_body = Twirp::Error.internal("Internal error")
24
+ end
25
+ end
26
+ end
@@ -29,6 +29,8 @@ module RailsTwirp
29
29
 
30
30
  def initialize(service_class)
31
31
  @service_class = service_class
32
+ @service_class.raise_exceptions = true
33
+
32
34
  @rpcs = {}
33
35
  end
34
36
 
@@ -1,3 +1,3 @@
1
1
  module RailsTwirp
2
- VERSION = "0.9.1"
2
+ VERSION = "0.10.0"
3
3
  end
@@ -46,12 +46,38 @@ class PingControllerTest < RailsTwirp::IntegrationTest
46
46
  assert_equal :not_found, response.code
47
47
  end
48
48
 
49
- test "uncaught error" do
49
+ test "uncaught errors should bubble up to the test" do
50
+ req = RPC::DummyAPI::PingRequest.new
51
+ assert_raises StandardError, "Uncaught" do
52
+ rpc RPC::DummyAPI::DummyService, "UncaughtError", req
53
+ end
54
+ end
55
+
56
+ test "uncaught errors should return an internal error with details if show_exceptions is true" do
57
+ Rails.application.env_config["action_dispatch.show_exceptions"] = true
58
+
50
59
  req = RPC::DummyAPI::PingRequest.new
51
60
  rpc RPC::DummyAPI::DummyService, "UncaughtError", req
52
61
  assert_instance_of Twirp::Error, response
62
+ assert_equal :internal, response.code
53
63
  assert_equal "Uncaught", response.msg
64
+ assert_equal "StandardError", response.meta["cause"]
65
+ ensure
66
+ Rails.application.env_config["action_dispatch.show_exceptions"] = false
67
+ end
68
+
69
+ test "uncaught errors should return an internal error without if show_exceptions is true and show_detailed_exceptions is false" do
70
+ Rails.application.env_config["action_dispatch.show_exceptions"] = true
71
+ Rails.application.env_config["action_dispatch.show_detailed_exceptions"] = false
72
+
73
+ req = RPC::DummyAPI::PingRequest.new
74
+ rpc RPC::DummyAPI::DummyService, "UncaughtError", req
75
+ assert_instance_of Twirp::Error, response
54
76
  assert_equal :internal, response.code
77
+ assert_equal "Internal error", response.msg
78
+ ensure
79
+ Rails.application.env_config["action_dispatch.show_detailed_exceptions"] = true
80
+ Rails.application.env_config["action_dispatch.show_exceptions"] = false
55
81
  end
56
82
 
57
83
  test "before error" do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails_twirp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.1
4
+ version: 0.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bouke van der Bijl
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-12-07 00:00:00.000000000 Z
11
+ date: 2021-12-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -47,6 +47,7 @@ extra_rdoc_files: []
47
47
  files:
48
48
  - ".github/workflows/test.yml"
49
49
  - ".gitignore"
50
+ - ".ruby-version"
50
51
  - ".standard.yml"
51
52
  - Gemfile
52
53
  - MIT-LICENSE
@@ -59,6 +60,7 @@ files:
59
60
  - lib/rails_twirp/base.rb
60
61
  - lib/rails_twirp/engine.rb
61
62
  - lib/rails_twirp/errors.rb
63
+ - lib/rails_twirp/exception_handling.rb
62
64
  - lib/rails_twirp/implicit_render.rb
63
65
  - lib/rails_twirp/instrumentation.rb
64
66
  - lib/rails_twirp/log_subscriber.rb
@@ -157,7 +159,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
159
  - !ruby/object:Gem::Version
158
160
  version: '0'
159
161
  requirements: []
160
- rubygems_version: 3.2.26
162
+ rubygems_version: 3.2.32
161
163
  signing_key:
162
164
  specification_version: 4
163
165
  summary: Integrate Twirp into Rails