actionpack 7.0.4 → 7.1.5.1

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 (140) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +495 -257
  3. data/MIT-LICENSE +1 -1
  4. data/README.rdoc +4 -4
  5. data/lib/abstract_controller/base.rb +20 -11
  6. data/lib/abstract_controller/caching/fragments.rb +2 -0
  7. data/lib/abstract_controller/callbacks.rb +31 -6
  8. data/lib/abstract_controller/deprecator.rb +7 -0
  9. data/lib/abstract_controller/helpers.rb +75 -28
  10. data/lib/abstract_controller/railties/routes_helpers.rb +1 -16
  11. data/lib/abstract_controller/rendering.rb +12 -14
  12. data/lib/abstract_controller/translation.rb +11 -6
  13. data/lib/abstract_controller/url_for.rb +2 -0
  14. data/lib/abstract_controller.rb +6 -0
  15. data/lib/action_controller/api.rb +6 -4
  16. data/lib/action_controller/base.rb +3 -17
  17. data/lib/action_controller/caching.rb +2 -0
  18. data/lib/action_controller/deprecator.rb +7 -0
  19. data/lib/action_controller/form_builder.rb +2 -0
  20. data/lib/action_controller/log_subscriber.rb +16 -4
  21. data/lib/action_controller/metal/basic_implicit_render.rb +3 -1
  22. data/lib/action_controller/metal/conditional_get.rb +121 -123
  23. data/lib/action_controller/metal/content_security_policy.rb +5 -5
  24. data/lib/action_controller/metal/data_streaming.rb +20 -18
  25. data/lib/action_controller/metal/default_headers.rb +2 -0
  26. data/lib/action_controller/metal/etag_with_flash.rb +3 -1
  27. data/lib/action_controller/metal/etag_with_template_digest.rb +2 -0
  28. data/lib/action_controller/metal/exceptions.rb +8 -0
  29. data/lib/action_controller/metal/head.rb +9 -7
  30. data/lib/action_controller/metal/helpers.rb +3 -14
  31. data/lib/action_controller/metal/http_authentication.rb +15 -9
  32. data/lib/action_controller/metal/implicit_render.rb +5 -3
  33. data/lib/action_controller/metal/instrumentation.rb +8 -1
  34. data/lib/action_controller/metal/live.rb +25 -1
  35. data/lib/action_controller/metal/mime_responds.rb +2 -2
  36. data/lib/action_controller/metal/params_wrapper.rb +4 -2
  37. data/lib/action_controller/metal/permissions_policy.rb +2 -2
  38. data/lib/action_controller/metal/redirecting.rb +29 -8
  39. data/lib/action_controller/metal/renderers.rb +4 -4
  40. data/lib/action_controller/metal/rendering.rb +114 -9
  41. data/lib/action_controller/metal/request_forgery_protection.rb +144 -53
  42. data/lib/action_controller/metal/rescue.rb +6 -3
  43. data/lib/action_controller/metal/streaming.rb +71 -31
  44. data/lib/action_controller/metal/strong_parameters.rb +200 -103
  45. data/lib/action_controller/metal/url_for.rb +9 -4
  46. data/lib/action_controller/metal.rb +79 -21
  47. data/lib/action_controller/railtie.rb +24 -10
  48. data/lib/action_controller/renderer.rb +99 -85
  49. data/lib/action_controller/test_case.rb +18 -8
  50. data/lib/action_controller.rb +13 -3
  51. data/lib/action_dispatch/constants.rb +32 -0
  52. data/lib/action_dispatch/deprecator.rb +7 -0
  53. data/lib/action_dispatch/http/cache.rb +9 -11
  54. data/lib/action_dispatch/http/content_security_policy.rb +35 -13
  55. data/lib/action_dispatch/http/filter_parameters.rb +23 -32
  56. data/lib/action_dispatch/http/headers.rb +3 -1
  57. data/lib/action_dispatch/http/mime_negotiation.rb +22 -22
  58. data/lib/action_dispatch/http/mime_type.rb +37 -11
  59. data/lib/action_dispatch/http/mime_types.rb +3 -1
  60. data/lib/action_dispatch/http/parameters.rb +1 -1
  61. data/lib/action_dispatch/http/permissions_policy.rb +38 -23
  62. data/lib/action_dispatch/http/rack_cache.rb +2 -0
  63. data/lib/action_dispatch/http/request.rb +85 -32
  64. data/lib/action_dispatch/http/response.rb +80 -63
  65. data/lib/action_dispatch/http/upload.rb +15 -2
  66. data/lib/action_dispatch/journey/formatter.rb +8 -2
  67. data/lib/action_dispatch/journey/path/pattern.rb +14 -14
  68. data/lib/action_dispatch/journey/route.rb +3 -2
  69. data/lib/action_dispatch/journey/router.rb +9 -8
  70. data/lib/action_dispatch/journey/routes.rb +2 -2
  71. data/lib/action_dispatch/log_subscriber.rb +23 -0
  72. data/lib/action_dispatch/middleware/actionable_exceptions.rb +5 -6
  73. data/lib/action_dispatch/middleware/assume_ssl.rb +24 -0
  74. data/lib/action_dispatch/middleware/callbacks.rb +2 -0
  75. data/lib/action_dispatch/middleware/cookies.rb +108 -117
  76. data/lib/action_dispatch/middleware/debug_exceptions.rb +26 -25
  77. data/lib/action_dispatch/middleware/debug_locks.rb +4 -1
  78. data/lib/action_dispatch/middleware/debug_view.rb +7 -2
  79. data/lib/action_dispatch/middleware/exception_wrapper.rb +186 -27
  80. data/lib/action_dispatch/middleware/executor.rb +7 -1
  81. data/lib/action_dispatch/middleware/flash.rb +7 -0
  82. data/lib/action_dispatch/middleware/host_authorization.rb +18 -8
  83. data/lib/action_dispatch/middleware/public_exceptions.rb +5 -3
  84. data/lib/action_dispatch/middleware/reloader.rb +7 -5
  85. data/lib/action_dispatch/middleware/remote_ip.rb +21 -20
  86. data/lib/action_dispatch/middleware/request_id.rb +4 -2
  87. data/lib/action_dispatch/middleware/server_timing.rb +4 -4
  88. data/lib/action_dispatch/middleware/session/abstract_store.rb +5 -0
  89. data/lib/action_dispatch/middleware/session/cache_store.rb +2 -0
  90. data/lib/action_dispatch/middleware/session/cookie_store.rb +11 -5
  91. data/lib/action_dispatch/middleware/session/mem_cache_store.rb +3 -1
  92. data/lib/action_dispatch/middleware/show_exceptions.rb +39 -22
  93. data/lib/action_dispatch/middleware/ssl.rb +18 -6
  94. data/lib/action_dispatch/middleware/stack.rb +7 -2
  95. data/lib/action_dispatch/middleware/static.rb +14 -10
  96. data/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb +2 -2
  97. data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +4 -4
  98. data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +8 -1
  99. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.html.erb +7 -3
  100. data/lib/action_dispatch/middleware/templates/rescues/blocked_host.text.erb +5 -3
  101. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +7 -7
  102. data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +2 -2
  103. data/lib/action_dispatch/middleware/templates/rescues/layout.erb +17 -0
  104. data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +16 -12
  105. data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +1 -1
  106. data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +3 -3
  107. data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +4 -4
  108. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +1 -1
  109. data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +1 -1
  110. data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +3 -0
  111. data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +59 -41
  112. data/lib/action_dispatch/railtie.rb +13 -4
  113. data/lib/action_dispatch/request/session.rb +16 -6
  114. data/lib/action_dispatch/request/utils.rb +8 -3
  115. data/lib/action_dispatch/routing/inspector.rb +54 -6
  116. data/lib/action_dispatch/routing/mapper.rb +97 -26
  117. data/lib/action_dispatch/routing/polymorphic_routes.rb +2 -0
  118. data/lib/action_dispatch/routing/redirection.rb +15 -6
  119. data/lib/action_dispatch/routing/route_set.rb +53 -23
  120. data/lib/action_dispatch/routing/routes_proxy.rb +10 -15
  121. data/lib/action_dispatch/routing/url_for.rb +26 -22
  122. data/lib/action_dispatch/routing.rb +7 -7
  123. data/lib/action_dispatch/system_test_case.rb +3 -3
  124. data/lib/action_dispatch/system_testing/browser.rb +25 -19
  125. data/lib/action_dispatch/system_testing/driver.rb +15 -23
  126. data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +27 -16
  127. data/lib/action_dispatch/testing/assertion_response.rb +1 -1
  128. data/lib/action_dispatch/testing/assertions/response.rb +14 -7
  129. data/lib/action_dispatch/testing/assertions/routing.rb +67 -28
  130. data/lib/action_dispatch/testing/assertions.rb +3 -1
  131. data/lib/action_dispatch/testing/integration.rb +27 -17
  132. data/lib/action_dispatch/testing/request_encoder.rb +4 -1
  133. data/lib/action_dispatch/testing/test_process.rb +4 -3
  134. data/lib/action_dispatch/testing/test_request.rb +1 -1
  135. data/lib/action_dispatch/testing/test_response.rb +23 -9
  136. data/lib/action_dispatch.rb +41 -4
  137. data/lib/action_pack/gem_version.rb +4 -4
  138. data/lib/action_pack/version.rb +1 -1
  139. data/lib/action_pack.rb +1 -1
  140. metadata +68 -32
data/CHANGELOG.md CHANGED
@@ -1,481 +1,719 @@
1
- ## Rails 7.0.4 (September 09, 2022) ##
1
+ ## Rails 7.1.5.1 (December 10, 2024) ##
2
2
 
3
- * Prevent `ActionDispatch::ServerTiming` from overwriting existing values in `Server-Timing`.
3
+ * Add validation to content security policies to disallow spaces and semicolons.
4
+ Developers should use multiple arguments, and different directive methods instead.
4
5
 
5
- Previously, if another middleware down the chain set `Server-Timing` header,
6
- it would overwritten by `ActionDispatch::ServerTiming`.
6
+ [CVE-2024-54133]
7
7
 
8
- *Jakub Malinowski*
8
+ *Gannon McGibbon*
9
9
 
10
10
 
11
- ## Rails 7.0.3.1 (July 12, 2022) ##
11
+ ## Rails 7.1.5 (October 30, 2024) ##
12
12
 
13
13
  * No changes.
14
14
 
15
15
 
16
- ## Rails 7.0.3 (May 09, 2022) ##
16
+ ## Rails 7.1.4.2 (October 23, 2024) ##
17
17
 
18
- * Allow relative redirects when `raise_on_open_redirects` is enabled.
18
+ * No changes.
19
19
 
20
- *Tom Hughes*
21
20
 
22
- * Fix `authenticate_with_http_basic` to allow for missing password.
21
+ ## Rails 7.1.4.1 (October 15, 2024) ##
23
22
 
24
- Before Rails 7.0 it was possible to handle basic authentication with only a username.
23
+ * Avoid regex backtracking in HTTP Token authentication
25
24
 
26
- ```ruby
27
- authenticate_with_http_basic do |token, _|
28
- ApiClient.authenticate(token)
29
- end
30
- ```
25
+ [CVE-2024-47887]
31
26
 
32
- This ability is restored.
27
+ *John Hawthorn*
33
28
 
34
- *Jean Boussier*
29
+ * Avoid regex backtracking in query parameter filtering
35
30
 
36
- * Fix `content_security_policy` returning invalid directives.
31
+ [CVE-2024-41128]
37
32
 
38
- Directives such as `self`, `unsafe-eval` and few others were not
39
- single quoted when the directive was the result of calling a lambda
40
- returning an array.
33
+ *John Hawthorn*
41
34
 
42
- ```ruby
43
- content_security_policy do |policy|
44
- policy.frame_ancestors lambda { [:self, "https://example.com"] }
45
- end
46
- ```
35
+ ## Rails 7.1.4 (August 22, 2024) ##
47
36
 
48
- With this fix the policy generated from above will now be valid.
37
+ * Resolve deprecation warning in latest `selenium-webdriver`.
49
38
 
50
- *Edouard Chin*
39
+ *Earlopain*
51
40
 
52
- * Fix `skip_forgery_protection` to run without raising an error if forgery
53
- protection has not been enabled / `verify_authenticity_token` is not a
54
- defined callback.
41
+ * Don't preload Selenium browser when remote.
55
42
 
56
- This fix prevents the Rails 7.0 Welcome Page (`/`) from raising an
57
- `ArgumentError` if `default_protect_from_forgery` is false.
43
+ *Noah Horton*
58
44
 
59
- *Brad Trick*
45
+ * Fix crash for invalid Content-Type in ShowExceptions middleware.
60
46
 
61
- * Fix `ActionController::Live` to copy the IsolatedExecutionState in the ephemeral thread.
47
+ *Earlopain*
62
48
 
63
- Since its inception `ActionController::Live` has been copying thread local variables
64
- to keep things such as `CurrentAttributes` set from middlewares working in the controller action.
49
+ * Fix inconsistent results of `params.deep_transform_keys`.
65
50
 
66
- With the introduction of `IsolatedExecutionState` in 7.0, some of that global state was lost in
67
- `ActionController::Live` controllers.
51
+ *Iago Pimenta*
52
+
53
+ * Do not report rendered errors except 500.
54
+
55
+ *Nikita Vasilevsky*
56
+
57
+ * Improve routes source location detection.
68
58
 
69
59
  *Jean Boussier*
70
60
 
71
- * Fix setting `trailing_slash: true` in route definition.
61
+ * Fix `Request#raw_post` raising `NoMethodError` when `rack.input` is `nil`.
72
62
 
73
- ```ruby
74
- get '/test' => "test#index", as: :test, trailing_slash: true
63
+ *Hartley McGuire*
75
64
 
76
- test_path() # => "/test/"
65
+ * Fix url generation in nested engine when script name is empty.
66
+
67
+ *zzak*
68
+
69
+ * Fix `Mime::Type.parse` handling type parameters for HTTP Accept headers.
70
+
71
+ *Taylor Chaparro*
72
+
73
+ * Fix the error page that is displayed when a view template is missing to account for nested controller paths in the
74
+ suggested correct location for the missing template.
75
+
76
+ *Joshua Young*
77
+
78
+ * Fix a regression in 7.1.3 passing a `to:` option without a controller when the controller is already defined by a scope.
79
+
80
+ ```ruby
81
+ Rails.application.routes.draw do
82
+ controller :home do
83
+ get "recent", to: "recent_posts"
84
+ end
85
+ end
77
86
  ```
78
87
 
88
+ *Étienne Barrié*
89
+
90
+ * Fix `ActionDispatch::Executor` middleware to report errors handled by `ActionDispatch::ShowExceptions`
91
+
92
+ In the default production environment, `ShowExceptions` rescues uncaught errors
93
+ and returns a response. Because of this the executor wouldn't report production
94
+ errors with the default Rails configuration.
95
+
79
96
  *Jean Boussier*
80
97
 
81
- ## Rails 7.0.2.4 (April 26, 2022) ##
82
98
 
83
- * Allow Content Security Policy DSL to generate for API responses.
99
+ ## Rails 7.1.3.4 (June 04, 2024) ##
84
100
 
85
- *Tim Wade*
101
+ * Include the HTTP Permissions-Policy on non-HTML Content-Types
102
+ [CVE-2024-28103]
103
+
104
+ *Aaron Patterson*
86
105
 
87
- ## Rails 7.0.2.3 (March 08, 2022) ##
106
+ ## Rails 7.1.3.3 (May 16, 2024) ##
88
107
 
89
108
  * No changes.
90
109
 
91
110
 
92
- ## Rails 7.0.2.2 (February 11, 2022) ##
111
+ ## Rails 7.1.3.2 (February 21, 2024) ##
93
112
 
94
- * No changes.
113
+ * Fix `raise_on_missing_translations` not working correctly with the
114
+ `translate` method in controllers after the patch for CVE-2024-26143.
95
115
 
116
+ *John Hawthorn*
96
117
 
97
- ## Rails 7.0.2.1 (February 11, 2022) ##
118
+ ## Rails 7.1.3.1 (February 21, 2024) ##
98
119
 
99
- * Under certain circumstances, the middleware isn't informed that the
100
- response body has been fully closed which result in request state not
101
- being fully reset before the next request
120
+ * Fix possible XSS vulnerability with the `translate` method in controllers
102
121
 
103
- [CVE-2022-23633]
122
+ CVE-2024-26143
104
123
 
124
+ *ooooooo-q + Aaron Patterson*
105
125
 
106
- ## Rails 7.0.2 (February 08, 2022) ##
126
+ * Fix ReDoS in Accept header parsing
107
127
 
108
- * No changes.
128
+ CVE-2024-26142
109
129
 
130
+ *Aaron Patterson*
110
131
 
111
- ## Rails 7.0.1 (January 06, 2022) ##
132
+ ## Rails 7.1.3 (January 16, 2024) ##
112
133
 
113
- * Fix `ActionController::Parameters` methods to keep the original logger context when creating a new copy
114
- of the original object.
134
+ * Fix including `Rails.application.routes.url_helpers` directly in an
135
+ `ActiveSupport::Concern.`
115
136
 
116
- *Yutaka Kamei*
137
+ *Jonathan Hefner*
117
138
 
139
+ * Fix system tests when using a Chrome binary that has been downloaded by
140
+ Selenium.
118
141
 
119
- ## Rails 7.0.0 (December 15, 2021) ##
142
+ *Jonathan Hefner*
120
143
 
121
- * Deprecate `Rails.application.config.action_controller.urlsafe_csrf_tokens`. This config is now always enabled.
122
144
 
123
- *Étienne Barrié*
145
+ ## Rails 7.1.2 (November 10, 2023) ##
124
146
 
125
- * Instance variables set in requests in a `ActionController::TestCase` are now cleared before the next request
147
+ * Fix a race condition that could cause a `Text file busy - chromedriver`
148
+ error with parallel system tests
126
149
 
127
- This means if you make multiple requests in the same test, instance variables set in the first request will
128
- not persist into the second one. (It's not recommended to make multiple requests in the same test.)
150
+ *Matt Brictson*
129
151
 
130
- *Alex Ghiculescu*
152
+ * Fix `StrongParameters#extract_value` to include blank values
153
+
154
+ Otherwise composite parameters may not be parsed correctly when one of the
155
+ component is blank.
156
+
157
+ *fatkodima*, *Yasha Krasnou*, *Matthias Eiglsperger*
158
+
159
+ * Add `racc` as a dependency since it will become a bundled gem in Ruby 3.4.0
160
+
161
+ *Hartley McGuire*
131
162
 
163
+ * Support handling Enumerator for non-buffered responses.
132
164
 
133
- ## Rails 7.0.0.rc3 (December 14, 2021) ##
165
+ *Zachary Scott*
166
+
167
+
168
+ ## Rails 7.1.1 (October 11, 2023) ##
169
+
170
+ * No changes.
171
+
172
+
173
+ ## Rails 7.1.0 (October 05, 2023) ##
174
+
175
+ * No changes.
176
+
177
+
178
+ ## Rails 7.1.0.rc2 (October 01, 2023) ##
134
179
 
135
180
  * No changes.
136
181
 
137
182
 
138
- ## Rails 7.0.0.rc2 (December 14, 2021) ##
183
+ ## Rails 7.1.0.rc1 (September 27, 2023) ##
139
184
 
140
- * Fix X_FORWARDED_HOST protection. [CVE-2021-44528]
185
+ * Add support for `#deep_merge` and `#deep_merge!` to
186
+ `ActionController::Parameters`.
141
187
 
188
+ *Sean Doyle*
142
189
 
143
- ## Rails 7.0.0.rc1 (December 06, 2021) ##
144
190
 
145
- * `Rails.application.executor` hooks can now be called around every request in a `ActionController::TestCase`
191
+ ## Rails 7.1.0.beta1 (September 13, 2023) ##
146
192
 
147
- This helps to better simulate request or job local state being reset between requests and prevent state
148
- leaking from one request to another.
193
+ * `AbstractController::Translation.raise_on_missing_translations` removed
149
194
 
150
- To enable this, set `config.active_support.executor_around_test_case = true` (this is the default in Rails 7).
195
+ This was a private API, and has been removed in favour of a more broadly applicable
196
+ `config.i18n.raise_on_missing_translations`. See the upgrading guide for more information.
151
197
 
152
198
  *Alex Ghiculescu*
153
199
 
154
- * Consider onion services secure for cookies.
200
+ * Add `ActionController::Parameters#extract_value` method to allow extracting serialized values from params
155
201
 
156
- *Justin Tracey*
202
+ ```ruby
203
+ params = ActionController::Parameters.new(id: "1_123", tags: "ruby,rails")
204
+ params.extract_value(:id) # => ["1", "123"]
205
+ params.extract_value(:tags, delimiter: ",") # => ["ruby", "rails"]
206
+ ```
157
207
 
158
- * Remove deprecated `Rails.config.action_view.raise_on_missing_translations`.
208
+ *Nikita Vasilevsky*
159
209
 
160
- *Rafael Mendonça França*
210
+ * Parse JSON `response.parsed_body` with `ActiveSupport::HashWithIndifferentAccess`
161
211
 
162
- * Remove deprecated support to passing a path to `fixture_file_upload` relative to `fixture_path`.
212
+ Integrate with Minitest's new `assert_pattern` by parsing the JSON contents
213
+ of `response.parsed_body` with `ActiveSupport::HashWithIndifferentAccess`, so
214
+ that it's pattern-matching compatible.
163
215
 
164
- *Rafael Mendonça França*
216
+ *Sean Doyle*
165
217
 
166
- * Remove deprecated `ActionDispatch::SystemTestCase#host!`.
218
+ * Add support for Playwright as a driver for system tests.
167
219
 
168
- *Rafael Mendonça França*
220
+ *Yuki Nishijima*
169
221
 
170
- * Remove deprecated `Rails.config.action_dispatch.hosts_response_app`.
222
+ * Fix `HostAuthorization` potentially displaying the value of the
223
+ X_FORWARDED_HOST header when the HTTP_HOST header is being blocked.
171
224
 
172
- *Rafael Mendonça França*
225
+ *Hartley McGuire*, *Daniel Schlosser*
173
226
 
174
- * Remove deprecated `ActionDispatch::Response.return_only_media_type_on_content_type`.
227
+ * Rename `fixture_file_upload` method to `file_fixture_upload`
175
228
 
176
- *Rafael Mendonça França*
229
+ Declare an alias to preserve the backwards compatibility of `fixture_file_upload`
230
+
231
+ *Sean Doyle*
232
+
233
+ * `ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper` saves the screenshot path in test metadata on failure.
234
+
235
+ *Matija Čupić*
236
+
237
+ * `config.dom_testing_default_html_version` controls the HTML parser used by
238
+ `ActionDispatch::Assertions#html_document`.
177
239
 
178
- * Raise `ActionController::Redirecting::UnsafeRedirectError` for unsafe `redirect_to` redirects.
240
+ The Rails 7.1 default configuration opts into the HTML5 parser when it is supported, to better
241
+ represent what the DOM would be in a browser user agent. Previously this test helper always used
242
+ Nokogiri's HTML4 parser.
179
243
 
180
- This allows `rescue_from` to be used to add a default fallback route:
244
+ *Mike Dalessio*
245
+
246
+ * Ensure an uncaught exception when rendering a Turbo Frame properly breaks
247
+ out of the Frame and shows the `DebugView` error page in development.
248
+
249
+ *Joé Dupuis*
250
+
251
+ * The `with_routing` helper can now be called at the class level. When called at the class level, the routes will
252
+ be setup before each test, and reset after every test. For example:
181
253
 
182
254
  ```ruby
183
- rescue_from ActionController::Redirecting::UnsafeRedirectError do
184
- redirect_to root_url
255
+ class RoutingTest < ActionController::TestCase
256
+ with_routing do |routes|
257
+ routes.draw do
258
+ resources :articles
259
+ resources :authors
260
+ end
261
+ end
262
+
263
+ def test_articles_route
264
+ assert_routing("/articles", controller: "articles", action: "index")
265
+ end
266
+
267
+ def test_authors_route
268
+ assert_routing("/authors", controller: "authors", action: "index")
269
+ end
185
270
  end
186
271
  ```
187
272
 
188
- *Kasper Timm Hansen*, *Chris Oliver*
273
+ *Andrew Novoselac*
274
+
275
+ * The `Mime::Type` now supports handling types with parameters and correctly handles quotes.
276
+ When parsing the accept header, the parameters before the q-parameter are kept and if a matching mime-type exists it is used.
277
+ To keep the current functionality, a fallback is created to look for the media-type without the parameters.
278
+
279
+ This change allows for custom MIME-types that are more complex like `application/vnd.api+json; profile="https://jsonapi.org/profiles/ethanresnick/cursor-pagination/" ext="https://jsonapi.org/ext/atomic"` for the [JSON API](https://jsonapi.org/).
189
280
 
190
- * Add `url_from` to verify a redirect location is internal.
281
+ *Nicolas Erni*
191
282
 
192
- Takes the open redirect protection from `redirect_to` so users can wrap a
193
- param, and fall back to an alternate redirect URL when the param provided
194
- one is unsafe.
283
+ * The url_for helpers now support a new option called `path_params`.
284
+ This is very useful in situations where you only want to add a required param that is part of the route's URL but for other route not append an extraneous query param.
285
+
286
+ Given the following router...
195
287
 
196
288
  ```ruby
197
- def create
198
- redirect_to url_from(params[:redirect_url]) || root_url
289
+ Rails.application.routes.draw do
290
+ scope ":account_id" do
291
+ get "dashboard" => "pages#dashboard", as: :dashboard
292
+ get "search/:term" => "search#search", as: :search
293
+ end
294
+ delete "signout" => "sessions#destroy", as: :signout
199
295
  end
200
296
  ```
201
297
 
202
- *dmcge*, *Kasper Timm Hansen*
298
+ And given the following `ApplicationController`
203
299
 
204
- * Allow Capybara driver name overrides in `SystemTestCase::driven_by`
300
+ ```ruby
301
+ class ApplicationController < ActionController::Base
302
+ def default_url_options
303
+ { path_params: { account_id: "foo" } }
304
+ end
305
+ end
306
+ ```
205
307
 
206
- Allow users to prevent conflicts among drivers that use the same driver
207
- type (selenium, poltergeist, webkit, rack test).
308
+ The standard url_for helper and friends will now behave as follows:
208
309
 
209
- Fixes #42502
310
+ ```ruby
311
+ dashboard_path # => /foo/dashboard
312
+ dashboard_path(account_id: "bar") # => /bar/dashboard
210
313
 
211
- *Chris LaRose*
314
+ signout_path # => /signout
315
+ signout_path(account_id: "bar") # => /signout?account_id=bar
316
+ signout_path(account_id: "bar", path_params: { account_id: "baz" }) # => /signout?account_id=bar
317
+ search_path("quin") # => /foo/search/quin
318
+ ```
212
319
 
213
- * Allow multiline to be passed in routes when using wildcard segments.
320
+ *Jason Meller, Jeremy Beker*
214
321
 
215
- Previously routes with newlines weren't detected when using wildcard segments, returning
216
- a `No route matches` error.
217
- After this change, routes with newlines are detected on wildcard segments. Example
322
+ * Change `action_dispatch.show_exceptions` to one of `:all`, `:rescuable`, or
323
+ `:none`. `:all` and `:none` behave the same as the previous `true` and
324
+ `false` respectively. The new `:rescuable` option will only show exceptions
325
+ that can be rescued (e.g. `ActiveRecord::RecordNotFound`). `:rescuable` is
326
+ now the default for the test environment.
218
327
 
219
- ```ruby
220
- draw do
221
- get "/wildcard/*wildcard_segment", to: SimpleApp.new("foo#index"), as: :wildcard
222
- end
328
+ *Jon Dufresne*
223
329
 
224
- # After the change, the path matches.
225
- assert_equal "/wildcard/a%0Anewline", url_helpers.wildcard_path(wildcard_segment: "a\nnewline")
330
+ * `config.action_dispatch.cookies_serializer` now accepts `:message_pack` and
331
+ `:message_pack_allow_marshal` as serializers. These serializers require the
332
+ [`msgpack` gem](https://rubygems.org/gems/msgpack) (>= 1.7.0).
333
+
334
+ The Message Pack format can provide improved performance and smaller payload
335
+ sizes. It also supports roundtripping some Ruby types that are not supported
336
+ by JSON. For example:
337
+
338
+ ```ruby
339
+ cookies.encrypted[:foo] = [{ a: 1 }, { b: 2 }.with_indifferent_access, 1.to_d, Time.at(0, 123)]
340
+
341
+ # BEFORE with config.action_dispatch.cookies_serializer = :json
342
+ cookies.encrypted[:foo]
343
+ # => [{"a"=>1}, {"b"=>2}, "1.0", "1969-12-31T18:00:00.000-06:00"]
344
+ cookies.encrypted[:foo].map(&:class)
345
+ # => [Hash, Hash, String, String]
346
+
347
+ # AFTER with config.action_dispatch.cookies_serializer = :message_pack
348
+ cookies.encrypted[:foo]
349
+ # => [{:a=>1}, {"b"=>2}, 0.1e1, 1969-12-31 18:00:00.000123 -0600]
350
+ cookies.encrypted[:foo].map(&:class)
351
+ # => [Hash, ActiveSupport::HashWithIndifferentAccess, BigDecimal, Time]
352
+ ```
353
+
354
+ The `:message_pack` serializer can fall back to deserializing with
355
+ `ActiveSupport::JSON` when necessary, and the `:message_pack_allow_marshal`
356
+ serializer can fall back to deserializing with `Marshal` as well as
357
+ `ActiveSupport::JSON`. Additionally, the `:marshal`, `:json`, and
358
+ `:json_allow_marshal` (AKA `:hybrid`) serializers can now fall back to
359
+ deserializing with `ActiveSupport::MessagePack` when necessary. These
360
+ behaviors ensure old cookies can still be read so that migration is easier.
361
+
362
+ *Jonathan Hefner*
363
+
364
+ * Remove leading dot from domains on cookies set with `domain: :all`, to meet RFC6265 requirements
365
+
366
+ *Gareth Adams*
367
+
368
+ * Include source location in routes extended view.
369
+
370
+ ```bash
371
+ $ bin/rails routes --expanded
372
+
373
+ ...
374
+ --[ Route 14 ]----------
375
+ Prefix | new_gist
376
+ Verb | GET
377
+ URI | /gist(.:format)
378
+ Controller#Action | gists/gists#new
379
+ Source Location | config/routes/gist.rb:3
226
380
  ```
227
381
 
228
- Fixes #39103
382
+ *Luan Vieira, John Hawthorn and Daniel Colson*
383
+
384
+ * Add `without` as an alias of `except` on `ActiveController::Parameters`.
385
+
386
+ *Hidde-Jan Jongsma*
387
+
388
+ * Expand search field on `rails/info/routes` to also search **route name**, **http verb** and **controller#action**.
229
389
 
230
- *Ignacio Chiazzo*
390
+ *Jason Kotchoff*
231
391
 
232
- * Treat html suffix in controller translation.
392
+ * Remove deprecated `poltergeist` and `webkit` (capybara-webkit) driver registration for system testing.
233
393
 
234
- *Rui Onodera*, *Gavin Miller*
394
+ *Rafael Mendonça França*
395
+
396
+ * Remove deprecated ability to assign a single value to `config.action_dispatch.trusted_proxies`.
397
+
398
+ *Rafael Mendonça França*
399
+
400
+ * Deprecate `config.action_dispatch.return_only_request_media_type_on_content_type`.
401
+
402
+ *Rafael Mendonça França*
235
403
 
236
- * Allow permitting numeric params.
404
+ * Remove deprecated behavior on `Request#content_type`.
405
+
406
+ *Rafael Mendonça França*
407
+
408
+ * Change `ActionController::Instrumentation` to pass `filtered_path` instead of `fullpath` in the event payload to filter sensitive query params
237
409
 
238
- Previously it was impossible to permit different fields on numeric parameters.
239
- After this change you can specify different fields for each numbered parameter.
240
- For example params like,
241
410
  ```ruby
242
- book: {
243
- authors_attributes: {
244
- '0': { name: "William Shakespeare", age_of_death: "52" },
245
- '1': { name: "Unattributed Assistant" },
246
- '2': "Not a hash",
247
- 'new_record': { name: "Some name" }
248
- }
249
- }
411
+ get "/posts?password=test"
412
+ request.fullpath # => "/posts?password=test"
413
+ request.filtered_path # => "/posts?password=[FILTERED]"
250
414
  ```
251
415
 
252
- Before you could permit name on each author with,
253
- `permit book: { authors_attributes: [ :name ] }`
416
+ *Ritikesh G*
254
417
 
255
- After this change you can permit different keys on each numbered element,
256
- `permit book: { authors_attributes: { '1': [ :name ], '0': [ :name, :age_of_death ] } }`
418
+ * Deprecate `AbstractController::Helpers::MissingHelperError`
257
419
 
258
- Fixes #41625
420
+ *Hartley McGuire*
259
421
 
260
- *Adam Hess*
422
+ * Change `ActionDispatch::Testing::TestResponse#parsed_body` to parse HTML as
423
+ a Nokogiri document
261
424
 
262
- * Update `HostAuthorization` middleware to render debug info only
263
- when `config.consider_all_requests_local` is set to true.
425
+ ```ruby
426
+ get "/posts"
427
+ response.content_type # => "text/html; charset=utf-8"
428
+ response.parsed_body.class # => Nokogiri::HTML5::Document
429
+ response.parsed_body.to_html # => "<!DOCTYPE html>\n<html>\n..."
430
+ ```
264
431
 
265
- Also, blocked host info is always logged with level `error`.
432
+ *Sean Doyle*
266
433
 
267
- Fixes #42813
434
+ * Deprecate `ActionDispatch::IllegalStateError`.
268
435
 
269
- *Nikita Vyrko*
436
+ *Samuel Williams*
270
437
 
271
- * Add Server-Timing middleware
438
+ * Add HTTP::Request#route_uri_pattern that returns URI pattern of matched route.
272
439
 
273
- Server-Timing specification defines how the server can communicate to browsers performance metrics
274
- about the request it is responding to.
440
+ *Joel Hawksley*, *Kate Higa*
275
441
 
276
- The ServerTiming middleware is enabled by default on `development` environment by default using the
277
- `config.server_timing` setting and set the relevant duration metrics in the `Server-Timing` header
442
+ * Add `ActionDispatch::AssumeSSL` middleware that can be turned on via `config.assume_ssl`.
443
+ It makes the application believe that all requests are arriving over SSL. This is useful
444
+ when proxying through a load balancer that terminates SSL, the forwarded request will appear
445
+ as though its HTTP instead of HTTPS to the application. This makes redirects and cookie
446
+ security target HTTP instead of HTTPS. This middleware makes the server assume that the
447
+ proxy already terminated SSL, and that the request really is HTTPS.
278
448
 
279
- The full specification for Server-Timing header can be found in: https://www.w3.org/TR/server-timing/#dfn-server-timing-header-field
449
+ *DHH*
280
450
 
281
- *Sebastian Sogamoso*, *Guillermo Iguaran*
451
+ * Only use HostAuthorization middleware if `config.hosts` is not empty
282
452
 
453
+ *Hartley McGuire*
283
454
 
284
- ## Rails 7.0.0.alpha2 (September 15, 2021) ##
455
+ * Allow raising an error when a callback's only/unless symbols aren't existing methods.
285
456
 
286
- * No changes.
457
+ When `before_action :callback, only: :action_name` is declared on a controller that doesn't respond to `action_name`, raise an exception at request time. This is a safety measure to ensure that typos or forgetfulness don't prevent a crucial callback from being run when it should.
287
458
 
459
+ For new applications, raising an error for undefined actions is turned on by default. If you do not want to opt-in to this behavior set `config.action_controller.raise_on_missing_callback_actions` to `false` in your application configuration. See #43487 for more details.
288
460
 
289
- ## Rails 7.0.0.alpha1 (September 15, 2021) ##
461
+ *Jess Bees*
290
462
 
291
- * Use a static error message when raising `ActionDispatch::Http::Parameters::ParseError`
292
- to avoid inadvertently logging the HTTP request body at the `fatal` level when it contains
293
- malformed JSON.
463
+ * Allow cookie options[:domain] to accept a proc to set the cookie domain on a more flexible per-request basis
294
464
 
295
- Fixes #41145
465
+ *RobL*
296
466
 
297
- *Aaron Lahey*
467
+ * When a host is not specified for an `ActionController::Renderer`'s env,
468
+ the host and related options will now be derived from the routes'
469
+ `default_url_options` and `ActionDispatch::Http::URL.secure_protocol`.
298
470
 
299
- * Add `Middleware#delete!` to delete middleware or raise if not found.
471
+ This means that for an application with a configuration like:
300
472
 
301
- `Middleware#delete!` works just like `Middleware#delete` but will
302
- raise an error if the middleware isn't found.
473
+ ```ruby
474
+ Rails.application.default_url_options = { host: "rubyonrails.org" }
475
+ Rails.application.config.force_ssl = true
476
+ ```
303
477
 
304
- *Alex Ghiculescu*, *Petrik de Heus*, *Junichi Sato*
478
+ rendering a URL like:
305
479
 
306
- * Raise error on unpermitted open redirects.
480
+ ```ruby
481
+ ApplicationController.renderer.render inline: "<%= blog_url %>"
482
+ ```
307
483
 
308
- Add `allow_other_host` options to `redirect_to`.
309
- Opt in to this behaviour with `ActionController::Base.raise_on_open_redirects = true`.
484
+ will now return `"https://rubyonrails.org/blog"` instead of
485
+ `"http://example.org/blog"`.
310
486
 
311
- *Gannon McGibbon*
487
+ *Jonathan Hefner*
488
+
489
+ * Add details of cookie name and size to `CookieOverflow` exception.
312
490
 
313
- * Deprecate `poltergeist` and `webkit` (capybara-webkit) driver registration for system testing (they will be removed in Rails 7.1). Add `cuprite` instead.
491
+ *Andy Waite*
314
492
 
315
- [Poltergeist](https://github.com/teampoltergeist/poltergeist) and [capybara-webkit](https://github.com/thoughtbot/capybara-webkit) are already not maintained. These usage in Rails are removed for avoiding confusing users.
493
+ * Don't double log the `controller`, `action`, or `namespaced_controller` when using `ActiveRecord::QueryLog`
316
494
 
317
- [Cuprite](https://github.com/rubycdp/cuprite) is a good alternative to Poltergeist. Some guide descriptions are replaced from Poltergeist to Cuprite.
495
+ Previously if you set `config.active_record.query_log_tags` to an array that included
496
+ `:controller`, `:namespaced_controller`, or `:action`, that item would get logged twice.
497
+ This bug has been fixed.
318
498
 
319
- *Yusuke Iwaki*
499
+ *Alex Ghiculescu*
320
500
 
321
- * Exclude additional flash types from `ActionController::Base.action_methods`.
501
+ * Add the following permissions policy directives: `hid`, `idle-detection`, `screen-wake-lock`,
502
+ `serial`, `sync-xhr`, `web-share`.
322
503
 
323
- Ensures that additional flash types defined on ActionController::Base subclasses
324
- are not listed as actions on that controller.
504
+ *Guillaume Cabanel*
325
505
 
326
- class MyController < ApplicationController
327
- add_flash_types :hype
328
- end
506
+ * The `speaker`, `vibrate`, and `vr` permissions policy directives are now
507
+ deprecated.
329
508
 
330
- MyController.action_methods.include?('hype') # => false
509
+ There is no browser support for these directives, and no plan for browser
510
+ support in the future. You can just remove these directives from your
511
+ application.
331
512
 
332
- *Gavin Morrice*
513
+ *Jonathan Hefner*
333
514
 
334
- * OpenSSL constants are now used for Digest computations.
515
+ * Added the `:status` option to `assert_redirected_to` to specify the precise
516
+ HTTP status of the redirect. Defaults to `:redirect` for backwards
517
+ compatibility.
335
518
 
336
- *Dirkjan Bussink*
519
+ *Jon Dufresne*
337
520
 
338
- * Remove IE6-7-8 file download related hack/fix from ActionController::DataStreaming module.
521
+ * Rescue `JSON::ParserError` in Cookies JSON deserializer to discards marshal dumps:
339
522
 
340
- Due to the age of those versions of IE this fix is no longer relevant, more importantly it creates an edge-case for unexpected Cache-Control headers.
523
+ Without this change, if `action_dispatch.cookies_serializer` is set to `:json` and
524
+ the app tries to read a `:marshal` serialized cookie, it would error out which wouldn't
525
+ clear the cookie and force app users to manually clear it in their browser.
341
526
 
342
- *Tadas Sasnauskas*
527
+ (See #45127 for original bug discussion)
343
528
 
344
- * Configuration setting to skip logging an uncaught exception backtrace when the exception is
345
- present in `rescued_responses`.
529
+ *Nathan Bardoux*
346
530
 
347
- It may be too noisy to get all backtraces logged for applications that manage uncaught
348
- exceptions via `rescued_responses` and `exceptions_app`.
349
- `config.action_dispatch.log_rescued_responses` (defaults to `true`) can be set to `false` in
350
- this case, so that only exceptions not found in `rescued_responses` will be logged.
531
+ * Add `HTTP_REFERER` when following redirects on integration tests
351
532
 
352
- *Alexander Azarov*, *Mike Dalessio*
533
+ This makes `follow_redirect!` a closer simulation of what happens in a real browser
353
534
 
354
- * Ignore file fixtures on `db:fixtures:load`.
535
+ *Felipe Sateler*
355
536
 
356
- *Kevin Sjöberg*
537
+ * Added `exclude?` method to `ActionController::Parameters`.
357
538
 
358
- * Fix ActionController::Live controller test deadlocks by removing the body buffer size limit for tests.
539
+ *Ian Neubert*
359
540
 
360
- *Dylan Thacker-Smith*
541
+ * Rescue `EOFError` exception from `rack` on a multipart request.
361
542
 
362
- * New `ActionController::ConditionalGet#no_store` method to set HTTP cache control `no-store` directive.
543
+ *Nikita Vasilevsky*
363
544
 
364
- *Tadas Sasnauskas*
545
+ * Log redirects from routes the same way as redirects from controllers.
365
546
 
366
- * Drop support for the `SERVER_ADDR` header.
547
+ *Dennis Paagman*
367
548
 
368
- Following up https://github.com/rack/rack/pull/1573 and https://github.com/rails/rails/pull/42349.
549
+ * Prevent `ActionDispatch::ServerTiming` from overwriting existing values in `Server-Timing`.
550
+ Previously, if another middleware down the chain set `Server-Timing` header,
551
+ it would overwritten by `ActionDispatch::ServerTiming`.
369
552
 
370
- *Ricardo Díaz*
553
+ *Jakub Malinowski*
371
554
 
372
- * Set session options when initializing a basic session.
555
+ * Allow opting out of the `SameSite` cookie attribute when setting a cookie.
373
556
 
374
- *Gannon McGibbon*
557
+ You can opt out of `SameSite` by passing `same_site: nil`.
375
558
 
376
- * Add `cache_control: {}` option to `fresh_when` and `stale?`.
559
+ `cookies[:foo] = { value: "bar", same_site: nil }`
377
560
 
378
- Works as a shortcut to set `response.cache_control` with the above methods.
561
+ Previously, this incorrectly set the `SameSite` attribute to the value of the `cookies_same_site_protection` setting.
379
562
 
380
- *Jacopo Beschi*
563
+ *Alex Ghiculescu*
381
564
 
382
- * Writing into a disabled session will now raise an error.
565
+ * Allow using `helper_method`s in `content_security_policy` and `permissions_policy`
383
566
 
384
- Previously when no session store was set, writing into the session would silently fail.
567
+ Previously you could access basic helpers (defined in helper modules), but not
568
+ helper methods defined using `helper_method`. Now you can use either.
385
569
 
386
- *Jean Boussier*
570
+ ```ruby
571
+ content_security_policy do |p|
572
+ p.default_src "https://example.com"
573
+ p.script_src "https://example.com" if helpers.script_csp?
574
+ end
575
+ ```
387
576
 
388
- * Add support for 'require-trusted-types-for' and 'trusted-types' headers.
577
+ *Alex Ghiculescu*
389
578
 
390
- Fixes #42034.
579
+ * Reimplement `ActionController::Parameters#has_value?` and `#value?` to avoid parameters and hashes comparison.
391
580
 
392
- *lfalcao*
581
+ Deprecated equality between parameters and hashes is going to be removed in Rails 7.2.
582
+ The new implementation takes care of conversions.
393
583
 
394
- * Remove inline styles and address basic accessibility issues on rescue templates.
584
+ *Seva Stefkin*
395
585
 
396
- *Jacob Herrington*
586
+ * Allow only String and Symbol keys in `ActionController::Parameters`.
587
+ Raise `ActionController::InvalidParameterKey` when initializing Parameters
588
+ with keys that aren't strings or symbols.
397
589
 
398
- * Add support for 'private, no-store' Cache-Control headers.
590
+ *Seva Stefkin*
399
591
 
400
- Previously, 'no-store' was exclusive; no other directives could be specified.
592
+ * Add the ability to use custom logic for storing and retrieving CSRF tokens.
401
593
 
402
- *Alex Smith*
594
+ By default, the token will be stored in the session. Custom classes can be
595
+ defined to specify arbitrary behavior, but the ability to store them in
596
+ encrypted cookies is built in.
403
597
 
404
- * Expand payload of `unpermitted_parameters.action_controller` instrumentation to allow subscribers to
405
- know which controller action received unpermitted parameters.
598
+ *Andrew Kowpak*
406
599
 
407
- *bbuchalter*
600
+ * Make ActionController::Parameters#values cast nested hashes into parameters.
408
601
 
409
- * Add `ActionController::Live#send_stream` that makes it more convenient to send generated streams:
602
+ *Gannon McGibbon*
410
603
 
411
- ```ruby
412
- send_stream(filename: "subscribers.csv") do |stream|
413
- stream.writeln "email_address,updated_at"
604
+ * Introduce `html:` and `screenshot:` kwargs for system test screenshot helper
414
605
 
415
- @subscribers.find_each do |subscriber|
416
- stream.writeln [ subscriber.email_address, subscriber.updated_at ].join(",")
417
- end
418
- end
606
+ Use these as an alternative to the already-available environment variables.
607
+
608
+ For example, this will display a screenshot in iTerm, save the HTML, and output
609
+ its path.
610
+
611
+ ```ruby
612
+ take_screenshot(html: true, screenshot: "inline")
419
613
  ```
420
614
 
421
- *DHH*
615
+ *Alex Ghiculescu*
422
616
 
423
- * Add `ActionController::Live::Buffer#writeln` to write a line to the stream with a newline included.
617
+ * Allow `ActionController::Parameters#to_h` to receive a block.
424
618
 
425
- *DHH*
619
+ *Bob Farrell*
426
620
 
427
- * `ActionDispatch::Request#content_type` now returned Content-Type header as it is.
621
+ * Allow relative redirects when `raise_on_open_redirects` is enabled
428
622
 
429
- Previously, `ActionDispatch::Request#content_type` returned value does NOT contain charset part.
430
- This behavior changed to returned Content-Type header containing charset part as it is.
623
+ *Tom Hughes*
431
624
 
432
- If you want just MIME type, please use `ActionDispatch::Request#media_type` instead.
625
+ * Allow Content Security Policy DSL to generate for API responses.
433
626
 
434
- Before:
627
+ *Tim Wade*
628
+
629
+ * Fix `authenticate_with_http_basic` to allow for missing password.
630
+
631
+ Before Rails 7.0 it was possible to handle basic authentication with only a username.
435
632
 
436
633
  ```ruby
437
- request = ActionDispatch::Request.new("CONTENT_TYPE" => "text/csv; header=present; charset=utf-16", "REQUEST_METHOD" => "GET")
438
- request.content_type #=> "text/csv"
634
+ authenticate_with_http_basic do |token, _|
635
+ ApiClient.authenticate(token)
636
+ end
439
637
  ```
440
638
 
441
- After:
639
+ This ability is restored.
640
+
641
+ *Jean Boussier*
642
+
643
+ * Fix `content_security_policy` returning invalid directives.
644
+
645
+ Directives such as `self`, `unsafe-eval` and few others were not
646
+ single quoted when the directive was the result of calling a lambda
647
+ returning an array.
442
648
 
443
649
  ```ruby
444
- request = ActionDispatch::Request.new("Content-Type" => "text/csv; header=present; charset=utf-16", "REQUEST_METHOD" => "GET")
445
- request.content_type #=> "text/csv; header=present; charset=utf-16"
446
- request.media_type #=> "text/csv"
650
+ content_security_policy do |policy|
651
+ policy.frame_ancestors lambda { [:self, "https://example.com"] }
652
+ end
447
653
  ```
448
654
 
449
- *Rafael Mendonça França*
655
+ With this fix the policy generated from above will now be valid.
450
656
 
451
- * Change `ActionDispatch::Request#media_type` to return `nil` when the request don't have a `Content-Type` header.
657
+ *Edouard Chin*
452
658
 
453
- *Rafael Mendonça França*
659
+ * Fix `skip_forgery_protection` to run without raising an error if forgery
660
+ protection has not been enabled / `verify_authenticity_token` is not a
661
+ defined callback.
454
662
 
455
- * Fix error in `ActionController::LogSubscriber` that would happen when throwing inside a controller action.
663
+ This fix prevents the Rails 7.0 Welcome Page (`/`) from raising an
664
+ `ArgumentError` if `default_protect_from_forgery` is false.
456
665
 
457
- *Janko Marohnić*
666
+ *Brad Trick*
458
667
 
459
- * Allow anything with `#to_str` (like `Addressable::URI`) as a `redirect_to` location.
668
+ * Make `redirect_to` return an empty response body.
460
669
 
461
- *ojab*
670
+ Application controllers that wish to add a response body after calling
671
+ `redirect_to` can continue to do so.
462
672
 
463
- * Change the request method to a `GET` when passing failed requests down to `config.exceptions_app`.
673
+ *Jon Dufresne*
464
674
 
465
- *Alex Robbin*
675
+ * Use non-capturing group for subdomain matching in `ActionDispatch::HostAuthorization`
466
676
 
467
- * Deprecate the ability to assign a single value to `config.action_dispatch.trusted_proxies`
468
- as `RemoteIp` middleware behaves inconsistently depending on whether this is configured
469
- with a single value or an enumerable.
677
+ Since we do nothing with the captured subdomain group, we can use a non-capturing group instead.
470
678
 
471
- Fixes #40772.
679
+ *Sam Bostock*
472
680
 
473
- *Christian Sutter*
681
+ * Fix `ActionController::Live` to copy the IsolatedExecutionState in the ephemeral thread.
474
682
 
475
- * Add `redirect_back_or_to(fallback_location, **)` as a more aesthetically pleasing version of `redirect_back fallback_location:, **`.
476
- The old method name is retained without explicit deprecation.
683
+ Since its inception `ActionController::Live` has been copying thread local variables
684
+ to keep things such as `CurrentAttributes` set from middlewares working in the controller action.
477
685
 
478
- *DHH*
686
+ With the introduction of `IsolatedExecutionState` in 7.0, some of that global state was lost in
687
+ `ActionController::Live` controllers.
688
+
689
+ *Jean Boussier*
690
+
691
+ * Fix setting `trailing_slash: true` in route definition.
692
+
693
+ ```ruby
694
+ get '/test' => "test#index", as: :test, trailing_slash: true
695
+
696
+ test_path() # => "/test/"
697
+ ```
698
+
699
+ *Jean Boussier*
700
+
701
+ * Make `Session#merge!` stringify keys.
702
+
703
+ Previously `Session#update` would, but `merge!` wouldn't.
704
+
705
+ *Drew Bragg*
706
+
707
+ * Add `:unsafe_hashes` mapping for `content_security_policy`
708
+
709
+ ```ruby
710
+ # Before
711
+ policy.script_src :strict_dynamic, "'unsafe-hashes'", "'sha256-rRMdkshZyJlCmDX27XnL7g3zXaxv7ei6Sg+yt4R3svU='"
712
+
713
+ # After
714
+ policy.script_src :strict_dynamic, :unsafe_hashes, "'sha256-rRMdkshZyJlCmDX27XnL7g3zXaxv7ei6Sg+yt4R3svU='"
715
+ ```
479
716
 
717
+ *Igor Morozov*
480
718
 
481
- Please check [6-1-stable](https://github.com/rails/rails/blob/6-1-stable/actionpack/CHANGELOG.md) for previous changes.
719
+ Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/actionpack/CHANGELOG.md) for previous changes.