rails_twirp 0.16 → 0.17

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: 49a7d34d89a4dac62fb2125561c1b7aa3dc4fcbe429c13eb14d8cadc04d5ba39
4
- data.tar.gz: '0491bab9e0a82bc44551047c4a1fe5969903e168e66cd1ab98635277a8e94013'
3
+ metadata.gz: 4214210eff742236d7214ff558426f2dc9aed2e929b8e4ccb3c30777f5075bae
4
+ data.tar.gz: 8de1099ab7e26c27ce4c226325f7f0d535e5fe017e2fa4728e336b5293f767cb
5
5
  SHA512:
6
- metadata.gz: 8320ba3215e7cdea0cf333611f3df86a5a134f8c2d61bac51b75a04cccd3f644f5b4cd690239ce4a4b42ad22429de88aacbfb5b40e8da67844145806625d675f
7
- data.tar.gz: 0d6a125a57a4b709702c54db8d6ed1339d6f89f6c5e898b12136fb0ec1de3cb8ceeeede9bb9a040193240922fe00666aa5205b50c7075f118d989993c10d9620
6
+ metadata.gz: a148e4b8363ac7eb45423eef57e98fd3d29cb10cca70ed43c178a453a1e0d6f47b17f22f061656195aa645f8afaeeaf0b58f5dcc3e637410ecb5789137d85f3d
7
+ data.tar.gz: 959f3beeac15882ad998b88733eb1f1a4f54a4d198c5293fabfe9d8c5acd583e84d9e0d32b02ef3b1d4dc9c0909b1eba537db5e62df98ec98651f9eec9ce9c0a
@@ -1,18 +1,24 @@
1
1
  name: Ruby Test
2
- on: push
2
+ on: [push]
3
3
 
4
4
  jobs:
5
5
  test:
6
+ name: Ruby Tests
6
7
  runs-on: ubuntu-latest
8
+ strategy:
9
+ fail-fast: false
10
+ matrix:
11
+ ruby: ["3.0", "3.1", "3.2", "3.3"]
12
+
7
13
  steps:
8
- - name: Checkout code
14
+ - name: Checkout
9
15
  uses: actions/checkout@v3
10
16
 
11
17
  - name: Setup Ruby
12
18
  uses: ruby/setup-ruby@v1
13
19
  with:
14
- ruby-version: 3.3.0
15
20
  bundler-cache: true
21
+ ruby-version: ${{ matrix.ruby }}
16
22
 
17
23
  - name: Run tests
18
24
  run: bin/test
data/CHANGELOG.md CHANGED
@@ -1,9 +1,11 @@
1
- ### 0.16
1
+ ### 0.17
2
+ * Adding support for rails 7.2. Mostly this was fixing the deprecation of `request.show_exceptions?` and support the various
3
+ values of `Rails.application.config.action_dispatch.show_exceptions`.
2
4
 
5
+ ### 0.16
3
6
  * Ensure `decode_rack_response` always calls `#close` on the Rack body in tests, as some middleware might be applying a BodyProxy
4
7
 
5
8
  ### 0.15
6
-
7
9
  * Exclude versions of Rails 7 which were incompatible with the pbbuilder ActionView handler, as pbbuilder cannot work there at all
8
10
  * Fix decode_rack_response to be compatible with Rack response body wrappers (and conform to the Rack SPEC)
9
11
 
data/Gemfile CHANGED
@@ -8,7 +8,6 @@ gemspec
8
8
  gem "sqlite3"
9
9
  gem "pbbuilder"
10
10
  gem "standard"
11
- gem "pry"
12
11
 
13
12
  # HACK(bouk): Overwrite Bundler's platform matcher to ignore universal CPU
14
13
  # The protobuf and gRPC 'universal' macOS gems break on M1
data/Rakefile CHANGED
@@ -6,8 +6,27 @@ require "rake/testtask"
6
6
 
7
7
  Rake::TestTask.new(:test) do |t|
8
8
  t.libs << "test"
9
- t.pattern = "test/**/*_test.rb"
10
- t.verbose = false
9
+ t.libs << "lib"
10
+
11
+ # Running specific tests with line numbers, like with rails test, is not supported by default in rake.
12
+ # By setting the TESTOPS env var we can however specify the name of a single test with underscores instead of spaces.
13
+ # So run your single test by calling for ex:
14
+ #
15
+ # rake test /Users/sebastian/projects/cheddar/rails-twirp/test/ping_controller_test.rb "uncaught errors should bubble up to the test"
16
+
17
+ file_name = ARGV[1]
18
+ test_name = ARGV[2]&.tr(" ", "_")
19
+
20
+ ENV["TESTOPTS"] = "--verbose"
21
+
22
+ t.test_files = if file_name
23
+ if test_name
24
+ ENV["TESTOPTS"] += " --name=test_#{test_name}"
25
+ end
26
+ [file_name]
27
+ else
28
+ FileList["test/**/*_test.rb"]
29
+ end
11
30
  end
12
31
 
13
32
  task default: :test
@@ -18,9 +18,19 @@ module RailsTwirp
18
18
 
19
19
  # We adopt the same error handling logic as Rails' standard middlewares:
20
20
  # 1. When we 'show exceptions' we make the exception bubble up—this is useful for testing
21
- # If the exception gets raised here error reporting will happen in the middleware of the APM package
21
+ # If the exception gets raised here, error reporting will happen in the middleware of the APM package
22
22
  # higher in the call stack.
23
- raise e unless http_request.show_exceptions?
23
+ #
24
+
25
+ # A backtrace cleaner acts like a filter that only shows us the backtrace
26
+ # with a selection of useful lines compared to all lines the code goes through.
27
+ backtrace_cleaner = http_request.get_header("action_dispatch.backtrace_cleaner")
28
+
29
+ # Contains various exception related methods we can use and takes the backtrace_cleaner into consideration.
30
+ exception_wrapper = ActionDispatch::ExceptionWrapper.new(backtrace_cleaner, e)
31
+ # ExceptionWrapper.show? contains the logic that chooses to pass exceptions through or not based on the
32
+ # `Rails.application.config.action_dispatch.show_exceptions` setting of :none, :rescuable and :all
33
+ raise e unless exception_wrapper.show?(http_request)
24
34
 
25
35
  # 2. We report the error to the error tracking service, this needs to be configured.
26
36
  RailsTwirp.unhandled_exception_handler&.call(e)
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module RailsTwirp
4
- VERSION = "0.16"
4
+ VERSION = "0.17"
5
5
  end
data/rails_twirp.gemspec CHANGED
@@ -13,10 +13,9 @@ Gem::Specification.new do |spec|
13
13
 
14
14
  spec.files = `git ls-files`.split("\n")
15
15
 
16
- # Rails has shipped an incompatible change in ActiveView, that was reverted in later versions
17
- # but at this time has not been released as a 7.x version
18
- # @see https://github.com/rails/rails/pull/51023
19
- spec.add_runtime_dependency "rails", ">= 6.1.3", " < 7.1"
20
- spec.add_runtime_dependency "twirp", ">= 1.9", "< 1.11"
16
+ spec.add_runtime_dependency "rails", ">= 6.1.3", "!= 7.1"
17
+ spec.add_runtime_dependency "twirp", ">= 1.9"
18
+ spec.add_development_dependency "pry"
19
+
21
20
  spec.required_ruby_version = ">= 3"
22
21
  end
@@ -28,8 +28,12 @@ Rails.application.configure do
28
28
  config.action_controller.perform_caching = false
29
29
  config.cache_store = :null_store
30
30
 
31
- # Raise exceptions instead of rendering exception templates.
32
- config.action_dispatch.show_exceptions = false
31
+ # Set to one of the following (default is :all):
32
+ #
33
+ # :all - render error pages for all exceptions
34
+ # :rescuable - render error pages for exceptions declared by config.action_dispatch.rescue_responses
35
+ # :none - raise all exceptions
36
+ config.action_dispatch.show_exceptions = :none
33
37
 
34
38
  # Disable request forgery protection in test environment.
35
39
  config.action_controller.allow_forgery_protection = false
@@ -49,14 +49,16 @@ class PingControllerTest < RailsTwirp::IntegrationTest
49
49
  end
50
50
 
51
51
  test "uncaught errors should bubble up to the test" do
52
+ Rails.application.env_config["action_dispatch.show_exceptions"] = :none
53
+
52
54
  req = RPC::DummyAPI::PingRequest.new
53
55
  assert_raises StandardError, "Uncaught" do
54
56
  rpc RPC::DummyAPI::DummyService, "UncaughtError", req
55
57
  end
56
58
  end
57
59
 
58
- test "uncaught errors should return an internal error with details if show_exceptions is true" do
59
- Rails.application.env_config["action_dispatch.show_exceptions"] = true
60
+ test "uncaught errors should return an internal error with details if show_exceptions is all" do
61
+ Rails.application.env_config["action_dispatch.show_exceptions"] = :all
60
62
 
61
63
  req = RPC::DummyAPI::PingRequest.new
62
64
  rpc RPC::DummyAPI::DummyService, "UncaughtError", req
@@ -64,12 +66,10 @@ class PingControllerTest < RailsTwirp::IntegrationTest
64
66
  assert_equal :internal, response.code
65
67
  assert_equal "Uncaught", response.msg
66
68
  assert_equal "StandardError", response.meta["cause"]
67
- ensure
68
- Rails.application.env_config["action_dispatch.show_exceptions"] = false
69
69
  end
70
70
 
71
71
  test "uncaught errors should be fanned out to the exception handler proc if one is defined" do
72
- Rails.application.env_config["action_dispatch.show_exceptions"] = true
72
+ Rails.application.env_config["action_dispatch.show_exceptions"] = :all
73
73
 
74
74
  captured_exception = nil
75
75
  RailsTwirp.unhandled_exception_handler = ->(e) { captured_exception = e }
@@ -83,11 +83,10 @@ class PingControllerTest < RailsTwirp::IntegrationTest
83
83
  assert_kind_of StandardError, captured_exception
84
84
  ensure
85
85
  RailsTwirp.unhandled_exception_handler = nil
86
- Rails.application.env_config["action_dispatch.show_exceptions"] = false
87
86
  end
88
87
 
89
88
  test "uncaught errors should return an internal error without if show_exceptions is true and show_detailed_exceptions is false" do
90
- Rails.application.env_config["action_dispatch.show_exceptions"] = true
89
+ Rails.application.env_config["action_dispatch.show_exceptions"] = :all
91
90
  Rails.application.env_config["action_dispatch.show_detailed_exceptions"] = false
92
91
 
93
92
  req = RPC::DummyAPI::PingRequest.new
@@ -97,7 +96,6 @@ class PingControllerTest < RailsTwirp::IntegrationTest
97
96
  assert_equal "Internal error", response.msg
98
97
  ensure
99
98
  Rails.application.env_config["action_dispatch.show_detailed_exceptions"] = true
100
- Rails.application.env_config["action_dispatch.show_exceptions"] = false
101
99
  end
102
100
 
103
101
  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.16'
4
+ version: '0.17'
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: 2024-03-29 00:00:00.000000000 Z
11
+ date: 2024-09-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -17,7 +17,7 @@ dependencies:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: 6.1.3
20
- - - "<"
20
+ - - "!="
21
21
  - !ruby/object:Gem::Version
22
22
  version: '7.1'
23
23
  type: :runtime
@@ -27,7 +27,7 @@ dependencies:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
29
  version: 6.1.3
30
- - - "<"
30
+ - - "!="
31
31
  - !ruby/object:Gem::Version
32
32
  version: '7.1'
33
33
  - !ruby/object:Gem::Dependency
@@ -37,9 +37,6 @@ dependencies:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
39
  version: '1.9'
40
- - - "<"
41
- - !ruby/object:Gem::Version
42
- version: '1.11'
43
40
  type: :runtime
44
41
  prerelease: false
45
42
  version_requirements: !ruby/object:Gem::Requirement
@@ -47,9 +44,20 @@ dependencies:
47
44
  - - ">="
48
45
  - !ruby/object:Gem::Version
49
46
  version: '1.9'
50
- - - "<"
47
+ - !ruby/object:Gem::Dependency
48
+ name: pry
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
51
59
  - !ruby/object:Gem::Version
52
- version: '1.11'
60
+ version: '0'
53
61
  description:
54
62
  email:
55
63
  - bouke@cheddar.me
@@ -60,7 +68,6 @@ files:
60
68
  - ".github/dependabot.yml"
61
69
  - ".github/workflows/test.yml"
62
70
  - ".gitignore"
63
- - ".ruby-version"
64
71
  - ".standard.yml"
65
72
  - CHANGELOG.md
66
73
  - Gemfile
@@ -173,7 +180,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
173
180
  - !ruby/object:Gem::Version
174
181
  version: '0'
175
182
  requirements: []
176
- rubygems_version: 3.5.3
183
+ rubygems_version: 3.5.18
177
184
  signing_key:
178
185
  specification_version: 4
179
186
  summary: Integrate Twirp into Rails
data/.ruby-version DELETED
@@ -1 +0,0 @@
1
- 3.3.0