rails_twirp 0.13.1 → 0.14

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +21 -0
  3. data/CHANGELOG.md +6 -0
  4. data/Gemfile +2 -0
  5. data/Rakefile +2 -0
  6. data/bin/test +5 -0
  7. data/lib/commands/twirp/routes_command.rb +2 -0
  8. data/lib/rails_twirp/application.rb +2 -0
  9. data/lib/rails_twirp/engine.rb +2 -0
  10. data/lib/rails_twirp/errors.rb +2 -0
  11. data/lib/rails_twirp/exception_handling.rb +2 -0
  12. data/lib/rails_twirp/implicit_render.rb +2 -0
  13. data/lib/rails_twirp/instrumentation.rb +2 -0
  14. data/lib/rails_twirp/log_subscriber.rb +2 -0
  15. data/lib/rails_twirp/mapper.rb +2 -0
  16. data/lib/rails_twirp/render_pb.rb +2 -0
  17. data/lib/rails_twirp/rescue.rb +2 -0
  18. data/lib/rails_twirp/route_set.rb +2 -0
  19. data/lib/rails_twirp/testing/integration_test.rb +108 -0
  20. data/lib/rails_twirp/url_for.rb +2 -0
  21. data/lib/rails_twirp/version.rb +3 -1
  22. data/lib/rails_twirp.rb +2 -0
  23. data/rails_twirp.gemspec +3 -1
  24. data/test/dummy/Rakefile +8 -0
  25. data/test/dummy/app/assets/config/manifest.js +2 -0
  26. data/test/dummy/app/assets/images/.keep +0 -0
  27. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  28. data/test/dummy/app/channels/application_cable/channel.rb +6 -0
  29. data/test/dummy/app/channels/application_cable/connection.rb +6 -0
  30. data/test/dummy/app/controllers/application_controller.rb +4 -0
  31. data/test/dummy/app/controllers/application_twirp_controller.rb +9 -0
  32. data/test/dummy/app/controllers/concerns/.keep +0 -0
  33. data/test/dummy/app/controllers/dummy_controller.rb +7 -0
  34. data/test/dummy/app/controllers/pings_controller.rb +42 -0
  35. data/test/dummy/app/controllers/testmod/nested/other_controller.rb +12 -0
  36. data/test/dummy/app/helpers/application_helper.rb +4 -0
  37. data/test/dummy/app/helpers/random_helper.rb +7 -0
  38. data/test/dummy/app/javascript/packs/application.js +15 -0
  39. data/test/dummy/app/jobs/application_job.rb +9 -0
  40. data/test/dummy/app/mailers/application_mailer.rb +6 -0
  41. data/test/dummy/app/models/application_record.rb +5 -0
  42. data/test/dummy/app/models/concerns/.keep +0 -0
  43. data/test/dummy/app/views/dummy/rpc_name_check.pb.pbbuilder +3 -0
  44. data/test/dummy/app/views/layouts/application.html.erb +15 -0
  45. data/test/dummy/app/views/layouts/mailer.html.erb +13 -0
  46. data/test/dummy/app/views/layouts/mailer.text.erb +1 -0
  47. data/test/dummy/app/views/pings/ping_template.pb.pbbuilder +1 -0
  48. data/test/dummy/bin/generate +3 -0
  49. data/test/dummy/bin/rails +4 -0
  50. data/test/dummy/bin/rake +4 -0
  51. data/test/dummy/bin/setup +33 -0
  52. data/test/dummy/config/application.rb +25 -0
  53. data/test/dummy/config/boot.rb +7 -0
  54. data/test/dummy/config/cable.yml +10 -0
  55. data/test/dummy/config/database.yml +25 -0
  56. data/test/dummy/config/environment.rb +7 -0
  57. data/test/dummy/config/environments/development.rb +78 -0
  58. data/test/dummy/config/environments/production.rb +122 -0
  59. data/test/dummy/config/environments/test.rb +61 -0
  60. data/test/dummy/config/initializers/application_controller_renderer.rb +10 -0
  61. data/test/dummy/config/initializers/backtrace_silencers.rb +10 -0
  62. data/test/dummy/config/initializers/content_security_policy.rb +30 -0
  63. data/test/dummy/config/initializers/cookies_serializer.rb +7 -0
  64. data/test/dummy/config/initializers/filter_parameter_logging.rb +8 -0
  65. data/test/dummy/config/initializers/inflections.rb +18 -0
  66. data/test/dummy/config/initializers/mime_types.rb +6 -0
  67. data/test/dummy/config/initializers/permissions_policy.rb +13 -0
  68. data/test/dummy/config/initializers/wrap_parameters.rb +16 -0
  69. data/test/dummy/config/locales/en.yml +33 -0
  70. data/test/dummy/config/puma.rb +45 -0
  71. data/test/dummy/config/routes.rb +5 -0
  72. data/test/dummy/config/storage.yml +34 -0
  73. data/test/dummy/config/twirp/routes.rb +24 -0
  74. data/test/dummy/config.ru +8 -0
  75. data/test/dummy/lib/assets/.keep +0 -0
  76. data/test/dummy/log/.keep +0 -0
  77. data/test/dummy/proto/api.proto +30 -0
  78. data/test/dummy/proto/api_pb.rb +31 -0
  79. data/test/dummy/proto/api_twirp.rb +27 -0
  80. data/test/dummy/public/404.html +67 -0
  81. data/test/dummy/public/422.html +67 -0
  82. data/test/dummy/public/500.html +66 -0
  83. data/test/dummy/public/apple-touch-icon-precomposed.png +0 -0
  84. data/test/dummy/public/apple-touch-icon.png +0 -0
  85. data/test/dummy/public/favicon.ico +0 -0
  86. data/test/dummy_test.rb +12 -0
  87. data/test/other_controller_test.rb +11 -0
  88. data/test/ping_controller_test.rb +116 -0
  89. data/test/rails_twirp_test.rb +9 -0
  90. data/test/test_helper.rb +18 -0
  91. metadata +72 -2
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Code generated by protoc-gen-twirp_ruby 1.8.0, DO NOT EDIT.
4
+ require "twirp"
5
+ require_relative "api_pb"
6
+
7
+ module RPC
8
+ module DummyAPI
9
+ class DummyService < Twirp::Service
10
+ package "dummy.api"
11
+ service "Dummy"
12
+ rpc :Ping, PingRequest, PingResponse, ruby_method: :ping
13
+ rpc :PingRender, PingRequest, PingResponse, ruby_method: :ping_render
14
+ rpc :PingTemplate, PingRequest, PingResponse, ruby_method: :ping_template
15
+ rpc :ErrorResponse, PingRequest, PingResponse, ruby_method: :error_response
16
+ rpc :RaiseError, PingRequest, PingResponse, ruby_method: :raise_error
17
+ rpc :UncaughtError, PingRequest, PingResponse, ruby_method: :uncaught_error
18
+ rpc :BeforeError, PingRequest, PingResponse, ruby_method: :before_error
19
+ rpc :Nested, PingRequest, PingResponse, ruby_method: :nested
20
+ rpc :RpcNameCheck, RpcNameCheckRequest, RpcNameCheckResponse, ruby_method: :rpc_name_check
21
+ end
22
+
23
+ class DummyClient < Twirp::Client
24
+ client_for DummyService
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The page you were looking for doesn't exist (404)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/404.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The page you were looking for doesn't exist.</h1>
62
+ <p>You may have mistyped the address or the page may have moved.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,67 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>The change you wanted was rejected (422)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/422.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>The change you wanted was rejected.</h1>
62
+ <p>Maybe you tried to change something you didn't have access to.</p>
63
+ </div>
64
+ <p>If you are the application owner check the logs for more information.</p>
65
+ </div>
66
+ </body>
67
+ </html>
@@ -0,0 +1,66 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <head>
4
+ <title>We're sorry, but something went wrong (500)</title>
5
+ <meta name="viewport" content="width=device-width,initial-scale=1">
6
+ <style>
7
+ .rails-default-error-page {
8
+ background-color: #EFEFEF;
9
+ color: #2E2F30;
10
+ text-align: center;
11
+ font-family: arial, sans-serif;
12
+ margin: 0;
13
+ }
14
+
15
+ .rails-default-error-page div.dialog {
16
+ width: 95%;
17
+ max-width: 33em;
18
+ margin: 4em auto 0;
19
+ }
20
+
21
+ .rails-default-error-page div.dialog > div {
22
+ border: 1px solid #CCC;
23
+ border-right-color: #999;
24
+ border-left-color: #999;
25
+ border-bottom-color: #BBB;
26
+ border-top: #B00100 solid 4px;
27
+ border-top-left-radius: 9px;
28
+ border-top-right-radius: 9px;
29
+ background-color: white;
30
+ padding: 7px 12% 0;
31
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
32
+ }
33
+
34
+ .rails-default-error-page h1 {
35
+ font-size: 100%;
36
+ color: #730E15;
37
+ line-height: 1.5em;
38
+ }
39
+
40
+ .rails-default-error-page div.dialog > p {
41
+ margin: 0 0 1em;
42
+ padding: 1em;
43
+ background-color: #F7F7F7;
44
+ border: 1px solid #CCC;
45
+ border-right-color: #999;
46
+ border-left-color: #999;
47
+ border-bottom-color: #999;
48
+ border-bottom-left-radius: 4px;
49
+ border-bottom-right-radius: 4px;
50
+ border-top-color: #DADADA;
51
+ color: #666;
52
+ box-shadow: 0 3px 8px rgba(50, 50, 50, 0.17);
53
+ }
54
+ </style>
55
+ </head>
56
+
57
+ <body class="rails-default-error-page">
58
+ <!-- This file lives in public/500.html -->
59
+ <div class="dialog">
60
+ <div>
61
+ <h1>We're sorry, but something went wrong.</h1>
62
+ </div>
63
+ <p>If you are the application owner check the logs for more information.</p>
64
+ </div>
65
+ </body>
66
+ </html>
File without changes
File without changes
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class DummyControllerTest < RailsTwirp::IntegrationTest
6
+ test "controller gets rpc name" do
7
+ req = RPC::DummyAPI::RpcNameCheckRequest.new
8
+ rpc RPC::DummyAPI::DummyService, "RpcNameCheck", req
9
+ assert_instance_of RPC::DummyAPI::RpcNameCheckResponse, response
10
+ assert_equal "RpcNameCheck", response.rpc_name
11
+ end
12
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class OtherControllerTest < RailsTwirp::IntegrationTest
6
+ test "modules work" do
7
+ req = RPC::DummyAPI::PingRequest.new(name: "Bouke")
8
+ rpc RPC::DummyAPI::DummyService, "Nested", req
9
+ assert_equal "BoukeBouke", response.double_name
10
+ end
11
+ end
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class PingControllerTest < RailsTwirp::IntegrationTest
6
+ test "you can ping it" do
7
+ req = RPC::DummyAPI::PingRequest.new(name: "Bouke")
8
+ rpc RPC::DummyAPI::DummyService, "Ping", req
9
+ assert_equal "BoukeBouke", response.double_name
10
+ end
11
+
12
+ test "you can ping render" do
13
+ req = RPC::DummyAPI::PingRequest.new(name: "Bouke")
14
+ rpc RPC::DummyAPI::DummyService, "PingRender", req
15
+ refute_instance_of Twirp::Error, response
16
+ assert_equal "http://www.example.com/twirp BoukeBouke", response.double_name
17
+ end
18
+
19
+ test "you can ping render with host and https" do
20
+ host! "localhost"
21
+ https!
22
+ req = RPC::DummyAPI::PingRequest.new(name: "Bouke")
23
+ rpc RPC::DummyAPI::DummyService, "PingRender", req
24
+ refute_instance_of Twirp::Error, response
25
+ assert_equal "https://localhost/twirp BoukeBouke", response.double_name
26
+ end
27
+
28
+ test "you can ping template" do
29
+ req = RPC::DummyAPI::PingRequest.new(name: "Bouke")
30
+ rpc RPC::DummyAPI::DummyService, "PingTemplate", req
31
+ refute_instance_of Twirp::Error, response
32
+ assert_equal "BoukeBouke", response.double_name
33
+ end
34
+
35
+ test "error response" do
36
+ req = RPC::DummyAPI::PingRequest.new
37
+ rpc RPC::DummyAPI::DummyService, "ErrorResponse", req
38
+ assert_instance_of Twirp::Error, response
39
+ assert_equal "You are not authenticated!!", response.msg
40
+ assert_equal :unauthenticated, response.code
41
+ end
42
+
43
+ test "raise error" do
44
+ req = RPC::DummyAPI::PingRequest.new
45
+ rpc RPC::DummyAPI::DummyService, "RaiseError", req
46
+ assert_instance_of Twirp::Error, response
47
+ assert_equal "Not found", response.msg
48
+ assert_equal :not_found, response.code
49
+ end
50
+
51
+ test "uncaught errors should bubble up to the test" do
52
+ req = RPC::DummyAPI::PingRequest.new
53
+ assert_raises StandardError, "Uncaught" do
54
+ rpc RPC::DummyAPI::DummyService, "UncaughtError", req
55
+ end
56
+ end
57
+
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
+
61
+ req = RPC::DummyAPI::PingRequest.new
62
+ rpc RPC::DummyAPI::DummyService, "UncaughtError", req
63
+ assert_instance_of Twirp::Error, response
64
+ assert_equal :internal, response.code
65
+ assert_equal "Uncaught", response.msg
66
+ assert_equal "StandardError", response.meta["cause"]
67
+ ensure
68
+ Rails.application.env_config["action_dispatch.show_exceptions"] = false
69
+ end
70
+
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
73
+
74
+ captured_exception = nil
75
+ RailsTwirp.unhandled_exception_handler = ->(e) { captured_exception = e }
76
+
77
+ req = RPC::DummyAPI::PingRequest.new
78
+ rpc RPC::DummyAPI::DummyService, "UncaughtError", req
79
+ assert_instance_of Twirp::Error, response
80
+ assert_equal :internal, response.code
81
+ assert_equal "Uncaught", response.msg
82
+ assert_equal "StandardError", response.meta["cause"]
83
+ assert_kind_of StandardError, captured_exception
84
+ ensure
85
+ RailsTwirp.unhandled_exception_handler = nil
86
+ Rails.application.env_config["action_dispatch.show_exceptions"] = false
87
+ end
88
+
89
+ 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
91
+ Rails.application.env_config["action_dispatch.show_detailed_exceptions"] = false
92
+
93
+ req = RPC::DummyAPI::PingRequest.new
94
+ rpc RPC::DummyAPI::DummyService, "UncaughtError", req
95
+ assert_instance_of Twirp::Error, response
96
+ assert_equal :internal, response.code
97
+ assert_equal "Internal error", response.msg
98
+ ensure
99
+ Rails.application.env_config["action_dispatch.show_detailed_exceptions"] = true
100
+ Rails.application.env_config["action_dispatch.show_exceptions"] = false
101
+ end
102
+
103
+ test "before error" do
104
+ req = RPC::DummyAPI::PingRequest.new
105
+ rpc RPC::DummyAPI::DummyService, "BeforeError", req
106
+ assert_instance_of Twirp::Error, response
107
+ assert_equal "yOuR ReQuEsT Is mAlFoRmEd", response.msg
108
+ assert_equal :malformed, response.code
109
+ end
110
+
111
+ test "controller is set to the controller that handled the request" do
112
+ req = RPC::DummyAPI::PingRequest.new(name: "Bouke")
113
+ rpc RPC::DummyAPI::DummyService, "Ping", req
114
+ assert_instance_of PingsController, controller
115
+ end
116
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ class RailsTwirpTest < ActiveSupport::TestCase
6
+ test "it has a version number" do
7
+ assert RailsTwirp::VERSION
8
+ end
9
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Configure Rails Environment
4
+ ENV["RAILS_ENV"] = "test"
5
+
6
+ require_relative "../test/dummy/config/environment"
7
+ ActiveRecord::Migrator.migrations_paths = [File.expand_path("../test/dummy/db/migrate", __dir__)]
8
+ require "rails/test_help"
9
+ require "rails/test_unit/reporter"
10
+ Rails::TestUnitReporter.executable = "bin/test"
11
+
12
+ # Load fixtures from the engine
13
+ if ActiveSupport::TestCase.respond_to?(:fixture_path=)
14
+ ActiveSupport::TestCase.fixture_path = File.expand_path("fixtures", __dir__)
15
+ ActionDispatch::IntegrationTest.fixture_path = ActiveSupport::TestCase.fixture_path
16
+ ActiveSupport::TestCase.file_fixture_path = ActiveSupport::TestCase.fixture_path + "/files"
17
+ ActiveSupport::TestCase.fixtures :all
18
+ end
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.13.1
4
+ version: '0.14'
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: 2023-01-25 00:00:00.000000000 Z
11
+ date: 2023-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -52,6 +52,7 @@ extensions: []
52
52
  extra_rdoc_files: []
53
53
  files:
54
54
  - ".github/dependabot.yml"
55
+ - ".github/workflows/test.yml"
55
56
  - ".gitignore"
56
57
  - ".ruby-version"
57
58
  - ".standard.yml"
@@ -60,6 +61,7 @@ files:
60
61
  - MIT-LICENSE
61
62
  - README.md
62
63
  - Rakefile
64
+ - bin/test
63
65
  - lib/commands/twirp/routes_command.rb
64
66
  - lib/rails_twirp.rb
65
67
  - lib/rails_twirp/application.rb
@@ -75,9 +77,77 @@ files:
75
77
  - lib/rails_twirp/render_pb.rb
76
78
  - lib/rails_twirp/rescue.rb
77
79
  - lib/rails_twirp/route_set.rb
80
+ - lib/rails_twirp/testing/integration_test.rb
78
81
  - lib/rails_twirp/url_for.rb
79
82
  - lib/rails_twirp/version.rb
80
83
  - rails_twirp.gemspec
84
+ - test/dummy/Rakefile
85
+ - test/dummy/app/assets/config/manifest.js
86
+ - test/dummy/app/assets/images/.keep
87
+ - test/dummy/app/assets/stylesheets/application.css
88
+ - test/dummy/app/channels/application_cable/channel.rb
89
+ - test/dummy/app/channels/application_cable/connection.rb
90
+ - test/dummy/app/controllers/application_controller.rb
91
+ - test/dummy/app/controllers/application_twirp_controller.rb
92
+ - test/dummy/app/controllers/concerns/.keep
93
+ - test/dummy/app/controllers/dummy_controller.rb
94
+ - test/dummy/app/controllers/pings_controller.rb
95
+ - test/dummy/app/controllers/testmod/nested/other_controller.rb
96
+ - test/dummy/app/helpers/application_helper.rb
97
+ - test/dummy/app/helpers/random_helper.rb
98
+ - test/dummy/app/javascript/packs/application.js
99
+ - test/dummy/app/jobs/application_job.rb
100
+ - test/dummy/app/mailers/application_mailer.rb
101
+ - test/dummy/app/models/application_record.rb
102
+ - test/dummy/app/models/concerns/.keep
103
+ - test/dummy/app/views/dummy/rpc_name_check.pb.pbbuilder
104
+ - test/dummy/app/views/layouts/application.html.erb
105
+ - test/dummy/app/views/layouts/mailer.html.erb
106
+ - test/dummy/app/views/layouts/mailer.text.erb
107
+ - test/dummy/app/views/pings/ping_template.pb.pbbuilder
108
+ - test/dummy/bin/generate
109
+ - test/dummy/bin/rails
110
+ - test/dummy/bin/rake
111
+ - test/dummy/bin/setup
112
+ - test/dummy/config.ru
113
+ - test/dummy/config/application.rb
114
+ - test/dummy/config/boot.rb
115
+ - test/dummy/config/cable.yml
116
+ - test/dummy/config/database.yml
117
+ - test/dummy/config/environment.rb
118
+ - test/dummy/config/environments/development.rb
119
+ - test/dummy/config/environments/production.rb
120
+ - test/dummy/config/environments/test.rb
121
+ - test/dummy/config/initializers/application_controller_renderer.rb
122
+ - test/dummy/config/initializers/backtrace_silencers.rb
123
+ - test/dummy/config/initializers/content_security_policy.rb
124
+ - test/dummy/config/initializers/cookies_serializer.rb
125
+ - test/dummy/config/initializers/filter_parameter_logging.rb
126
+ - test/dummy/config/initializers/inflections.rb
127
+ - test/dummy/config/initializers/mime_types.rb
128
+ - test/dummy/config/initializers/permissions_policy.rb
129
+ - test/dummy/config/initializers/wrap_parameters.rb
130
+ - test/dummy/config/locales/en.yml
131
+ - test/dummy/config/puma.rb
132
+ - test/dummy/config/routes.rb
133
+ - test/dummy/config/storage.yml
134
+ - test/dummy/config/twirp/routes.rb
135
+ - test/dummy/lib/assets/.keep
136
+ - test/dummy/log/.keep
137
+ - test/dummy/proto/api.proto
138
+ - test/dummy/proto/api_pb.rb
139
+ - test/dummy/proto/api_twirp.rb
140
+ - test/dummy/public/404.html
141
+ - test/dummy/public/422.html
142
+ - test/dummy/public/500.html
143
+ - test/dummy/public/apple-touch-icon-precomposed.png
144
+ - test/dummy/public/apple-touch-icon.png
145
+ - test/dummy/public/favicon.ico
146
+ - test/dummy_test.rb
147
+ - test/other_controller_test.rb
148
+ - test/ping_controller_test.rb
149
+ - test/rails_twirp_test.rb
150
+ - test/test_helper.rb
81
151
  homepage: https://github.com/cheddar-me/rails-twirp
82
152
  licenses:
83
153
  - MIT