actionpack 8.0.2.1 → 8.1.0.beta1

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.
Files changed (79) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +251 -141
  3. data/README.rdoc +1 -1
  4. data/lib/abstract_controller/asset_paths.rb +4 -2
  5. data/lib/abstract_controller/base.rb +11 -14
  6. data/lib/abstract_controller/caching.rb +6 -3
  7. data/lib/abstract_controller/collector.rb +1 -1
  8. data/lib/abstract_controller/logger.rb +2 -1
  9. data/lib/action_controller/base.rb +1 -1
  10. data/lib/action_controller/caching.rb +1 -2
  11. data/lib/action_controller/form_builder.rb +1 -1
  12. data/lib/action_controller/log_subscriber.rb +7 -0
  13. data/lib/action_controller/metal/allow_browser.rb +1 -1
  14. data/lib/action_controller/metal/conditional_get.rb +25 -0
  15. data/lib/action_controller/metal/data_streaming.rb +1 -3
  16. data/lib/action_controller/metal/exceptions.rb +5 -0
  17. data/lib/action_controller/metal/flash.rb +1 -4
  18. data/lib/action_controller/metal/head.rb +3 -1
  19. data/lib/action_controller/metal/live.rb +0 -6
  20. data/lib/action_controller/metal/permissions_policy.rb +9 -0
  21. data/lib/action_controller/metal/rate_limiting.rb +22 -7
  22. data/lib/action_controller/metal/redirecting.rb +63 -7
  23. data/lib/action_controller/metal/renderers.rb +27 -6
  24. data/lib/action_controller/metal/rendering.rb +8 -2
  25. data/lib/action_controller/metal/request_forgery_protection.rb +18 -10
  26. data/lib/action_controller/metal/rescue.rb +9 -0
  27. data/lib/action_controller/railtie.rb +2 -6
  28. data/lib/action_controller/renderer.rb +0 -1
  29. data/lib/action_dispatch/constants.rb +6 -0
  30. data/lib/action_dispatch/http/cache.rb +111 -1
  31. data/lib/action_dispatch/http/content_security_policy.rb +13 -1
  32. data/lib/action_dispatch/http/filter_parameters.rb +5 -3
  33. data/lib/action_dispatch/http/mime_negotiation.rb +8 -3
  34. data/lib/action_dispatch/http/mime_types.rb +1 -0
  35. data/lib/action_dispatch/http/param_builder.rb +28 -27
  36. data/lib/action_dispatch/http/parameters.rb +3 -3
  37. data/lib/action_dispatch/http/permissions_policy.rb +4 -0
  38. data/lib/action_dispatch/http/query_parser.rb +12 -10
  39. data/lib/action_dispatch/http/request.rb +10 -5
  40. data/lib/action_dispatch/http/response.rb +65 -17
  41. data/lib/action_dispatch/http/url.rb +101 -5
  42. data/lib/action_dispatch/journey/gtg/simulator.rb +33 -12
  43. data/lib/action_dispatch/journey/gtg/transition_table.rb +29 -39
  44. data/lib/action_dispatch/journey/nodes/node.rb +2 -1
  45. data/lib/action_dispatch/journey/route.rb +45 -31
  46. data/lib/action_dispatch/journey/router/utils.rb +8 -14
  47. data/lib/action_dispatch/journey/router.rb +59 -81
  48. data/lib/action_dispatch/journey/routes.rb +7 -0
  49. data/lib/action_dispatch/journey/visitors.rb +55 -23
  50. data/lib/action_dispatch/journey/visualizer/fsm.js +4 -6
  51. data/lib/action_dispatch/middleware/cookies.rb +4 -2
  52. data/lib/action_dispatch/middleware/debug_exceptions.rb +10 -2
  53. data/lib/action_dispatch/middleware/debug_view.rb +11 -0
  54. data/lib/action_dispatch/middleware/exception_wrapper.rb +14 -8
  55. data/lib/action_dispatch/middleware/executor.rb +12 -2
  56. data/lib/action_dispatch/middleware/public_exceptions.rb +6 -6
  57. data/lib/action_dispatch/middleware/session/cache_store.rb +17 -0
  58. data/lib/action_dispatch/middleware/templates/rescues/_copy_button.html.erb +1 -0
  59. data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +3 -2
  60. data/lib/action_dispatch/middleware/templates/rescues/_trace.html.erb +9 -5
  61. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.html.erb +1 -0
  62. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +1 -0
  63. data/lib/action_dispatch/middleware/templates/rescues/invalid_statement.html.erb +1 -0
  64. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +50 -0
  65. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +1 -0
  66. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +1 -0
  67. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +1 -0
  68. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +1 -0
  69. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +1 -0
  70. data/lib/action_dispatch/railtie.rb +10 -2
  71. data/lib/action_dispatch/routing/inspector.rb +4 -1
  72. data/lib/action_dispatch/routing/mapper.rb +323 -173
  73. data/lib/action_dispatch/routing/route_set.rb +3 -6
  74. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +2 -2
  75. data/lib/action_dispatch/testing/assertion_response.rb +1 -1
  76. data/lib/action_dispatch/testing/assertions/response.rb +14 -0
  77. data/lib/action_dispatch/testing/assertions/routing.rb +11 -3
  78. data/lib/action_pack/gem_version.rb +3 -3
  79. metadata +11 -10
@@ -38,6 +38,22 @@
38
38
  padding: 0.5em 1.5em;
39
39
  }
40
40
 
41
+ header button {
42
+ appearance: none;
43
+ background-color: hsl(0 0% 0% / 0.2);
44
+ border: 0;
45
+ border-radius: 14px;
46
+ color: white;
47
+ float: right;
48
+ font-weight: 500;
49
+ height: 28px;
50
+ padding-inline: 14px;
51
+ margin: 0.35em 0;
52
+ }
53
+ header button:active {
54
+ background-color: hsl(0 0% 0% / 0.25);
55
+ }
56
+
41
57
  h1 {
42
58
  overflow-wrap: break-word;
43
59
  margin: 0.2em 0;
@@ -54,6 +70,30 @@
54
70
  font-size: 11px;
55
71
  }
56
72
 
73
+ .trace-container {
74
+ margin-top: 10px;
75
+ }
76
+
77
+ code.traces .trace {
78
+ display: flex;
79
+ align-items: center;
80
+ gap: 2px;
81
+ }
82
+
83
+ .edit-icon {
84
+ width: 16px;
85
+ height: 16px;
86
+ display: flex;
87
+ font-size: 13px;
88
+ align-items: center;
89
+ justify-content: center;
90
+ text-decoration: none;
91
+ }
92
+
93
+ .edit-icon:hover {
94
+ scale: 1.05;
95
+ }
96
+
57
97
  .response-heading, .request-heading {
58
98
  margin-top: 30px;
59
99
  }
@@ -274,11 +314,21 @@
274
314
  var toggleEnvDump = function() {
275
315
  return toggle('env_dump');
276
316
  }
317
+ var copyAsText = function() {
318
+ const text = document.getElementById("exception-message-for-copy").textContent;
319
+
320
+ navigator.clipboard.writeText(text).then(() => {
321
+ const beforeText = this.innerText;
322
+ this.innerText = "Copied!"
323
+ setTimeout(() => this.innerText = beforeText, 1000)
324
+ })
325
+ }
277
326
  </script>
278
327
  </head>
279
328
  <body>
280
329
 
281
330
  <%= yield %>
331
+ <script type="text/plain" id="exception-message-for-copy"><%= raw @exception_message_for_copy %></script>
282
332
 
283
333
  </body>
284
334
  </html>
@@ -1,4 +1,5 @@
1
1
  <header role="banner">
2
+ <%= render "rescues/copy_button" %>
2
3
  <h1>No view template for interactive request</h1>
3
4
  </header>
4
5
 
@@ -1,4 +1,5 @@
1
1
  <header role="banner">
2
+ <%= render "rescues/copy_button" %>
2
3
  <h1>Template is missing</h1>
3
4
  </header>
4
5
 
@@ -1,4 +1,5 @@
1
1
  <header role="banner">
2
+ <%= render "rescues/copy_button" %>
2
3
  <h1>Routing Error</h1>
3
4
  </header>
4
5
  <main role="main" id="container">
@@ -1,4 +1,5 @@
1
1
  <header role="banner">
2
+ <%= render "rescues/copy_button" %>
2
3
  <h1>
3
4
  <%= @exception_wrapper.exception_name %> in
4
5
  <%= @request.parameters["controller"].camelize if @request.parameters["controller"] %>#<%= @request.parameters["action"] %>
@@ -1,4 +1,5 @@
1
1
  <header role="banner">
2
+ <%= render "rescues/copy_button" %>
2
3
  <h1>Unknown action</h1>
3
4
  </header>
4
5
  <main role="main" id="container">
@@ -55,8 +55,16 @@ module ActionDispatch
55
55
  ActionDispatch::Http::URL.secure_protocol = app.config.force_ssl
56
56
  ActionDispatch::Http::URL.tld_length = app.config.action_dispatch.tld_length
57
57
 
58
- ActionDispatch::ParamBuilder.ignore_leading_brackets = app.config.action_dispatch.ignore_leading_brackets
59
- ActionDispatch::QueryParser.strict_query_string_separator = app.config.action_dispatch.strict_query_string_separator
58
+ unless app.config.action_dispatch.domain_extractor.nil?
59
+ ActionDispatch::Http::URL.domain_extractor = app.config.action_dispatch.domain_extractor
60
+ end
61
+
62
+ unless app.config.action_dispatch.ignore_leading_brackets.nil?
63
+ ActionDispatch::ParamBuilder.ignore_leading_brackets = app.config.action_dispatch.ignore_leading_brackets
64
+ end
65
+ unless app.config.action_dispatch.strict_query_string_separator.nil?
66
+ ActionDispatch::QueryParser.strict_query_string_separator = app.config.action_dispatch.strict_query_string_separator
67
+ end
60
68
 
61
69
  ActiveSupport.on_load(:action_dispatch_request) do
62
70
  self.ignore_accept_header = app.config.action_dispatch.ignore_accept_header
@@ -89,7 +89,10 @@ module ActionDispatch
89
89
 
90
90
  @engines.each do |name, engine_routes|
91
91
  formatter.section_title "Routes for #{name}"
92
- formatter.section engine_routes
92
+ if engine_routes.any?
93
+ formatter.header engine_routes
94
+ formatter.section engine_routes
95
+ end
93
96
  end
94
97
 
95
98
  formatter.result