actionpack 7.0.8.7 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +423 -342
- data/MIT-LICENSE +1 -1
- data/README.rdoc +2 -2
- data/lib/abstract_controller/base.rb +20 -11
- data/lib/abstract_controller/caching/fragments.rb +2 -0
- data/lib/abstract_controller/callbacks.rb +31 -6
- data/lib/abstract_controller/deprecator.rb +7 -0
- data/lib/abstract_controller/helpers.rb +61 -18
- data/lib/abstract_controller/railties/routes_helpers.rb +1 -16
- data/lib/abstract_controller/rendering.rb +3 -3
- data/lib/abstract_controller/translation.rb +7 -24
- data/lib/abstract_controller/url_for.rb +2 -0
- data/lib/abstract_controller.rb +6 -0
- data/lib/action_controller/api.rb +5 -3
- data/lib/action_controller/base.rb +3 -17
- data/lib/action_controller/caching.rb +2 -0
- data/lib/action_controller/deprecator.rb +7 -0
- data/lib/action_controller/form_builder.rb +2 -0
- data/lib/action_controller/log_subscriber.rb +16 -4
- data/lib/action_controller/metal/content_security_policy.rb +1 -1
- data/lib/action_controller/metal/data_streaming.rb +2 -0
- data/lib/action_controller/metal/default_headers.rb +2 -0
- data/lib/action_controller/metal/etag_with_flash.rb +2 -0
- data/lib/action_controller/metal/etag_with_template_digest.rb +2 -0
- data/lib/action_controller/metal/exceptions.rb +8 -0
- data/lib/action_controller/metal/head.rb +8 -6
- data/lib/action_controller/metal/helpers.rb +3 -14
- data/lib/action_controller/metal/http_authentication.rb +13 -8
- data/lib/action_controller/metal/implicit_render.rb +5 -3
- data/lib/action_controller/metal/instrumentation.rb +8 -1
- data/lib/action_controller/metal/live.rb +24 -0
- data/lib/action_controller/metal/mime_responds.rb +2 -2
- data/lib/action_controller/metal/params_wrapper.rb +4 -2
- data/lib/action_controller/metal/permissions_policy.rb +1 -1
- data/lib/action_controller/metal/redirecting.rb +7 -7
- data/lib/action_controller/metal/renderers.rb +2 -2
- data/lib/action_controller/metal/rendering.rb +0 -7
- data/lib/action_controller/metal/request_forgery_protection.rb +139 -50
- data/lib/action_controller/metal/rescue.rb +2 -0
- data/lib/action_controller/metal/streaming.rb +70 -30
- data/lib/action_controller/metal/strong_parameters.rb +174 -54
- data/lib/action_controller/metal/url_for.rb +7 -0
- data/lib/action_controller/metal.rb +79 -21
- data/lib/action_controller/railtie.rb +22 -9
- data/lib/action_controller/renderer.rb +98 -65
- data/lib/action_controller/test_case.rb +18 -8
- data/lib/action_controller.rb +13 -3
- data/lib/action_dispatch/constants.rb +32 -0
- data/lib/action_dispatch/deprecator.rb +7 -0
- data/lib/action_dispatch/http/cache.rb +1 -3
- data/lib/action_dispatch/http/content_security_policy.rb +9 -8
- data/lib/action_dispatch/http/filter_parameters.rb +11 -5
- data/lib/action_dispatch/http/headers.rb +2 -0
- data/lib/action_dispatch/http/mime_negotiation.rb +22 -22
- data/lib/action_dispatch/http/mime_type.rb +37 -11
- data/lib/action_dispatch/http/mime_types.rb +3 -1
- data/lib/action_dispatch/http/parameters.rb +1 -1
- data/lib/action_dispatch/http/permissions_policy.rb +38 -16
- data/lib/action_dispatch/http/rack_cache.rb +2 -0
- data/lib/action_dispatch/http/request.rb +70 -16
- data/lib/action_dispatch/http/response.rb +80 -59
- data/lib/action_dispatch/http/upload.rb +2 -0
- data/lib/action_dispatch/journey/formatter.rb +8 -2
- data/lib/action_dispatch/journey/path/pattern.rb +14 -14
- data/lib/action_dispatch/journey/route.rb +3 -2
- data/lib/action_dispatch/journey/router.rb +9 -8
- data/lib/action_dispatch/journey/routes.rb +2 -2
- data/lib/action_dispatch/log_subscriber.rb +23 -0
- data/lib/action_dispatch/middleware/actionable_exceptions.rb +5 -6
- data/lib/action_dispatch/middleware/assume_ssl.rb +24 -0
- data/lib/action_dispatch/middleware/callbacks.rb +2 -0
- data/lib/action_dispatch/middleware/cookies.rb +81 -98
- data/lib/action_dispatch/middleware/debug_exceptions.rb +26 -25
- data/lib/action_dispatch/middleware/debug_locks.rb +4 -1
- data/lib/action_dispatch/middleware/debug_view.rb +7 -2
- data/lib/action_dispatch/middleware/exception_wrapper.rb +186 -27
- data/lib/action_dispatch/middleware/executor.rb +7 -1
- data/lib/action_dispatch/middleware/flash.rb +7 -0
- data/lib/action_dispatch/middleware/host_authorization.rb +6 -3
- data/lib/action_dispatch/middleware/public_exceptions.rb +5 -3
- data/lib/action_dispatch/middleware/reloader.rb +7 -5
- data/lib/action_dispatch/middleware/remote_ip.rb +17 -16
- data/lib/action_dispatch/middleware/request_id.rb +2 -0
- data/lib/action_dispatch/middleware/server_timing.rb +4 -4
- data/lib/action_dispatch/middleware/session/abstract_store.rb +5 -0
- data/lib/action_dispatch/middleware/session/cache_store.rb +2 -0
- data/lib/action_dispatch/middleware/session/cookie_store.rb +11 -5
- data/lib/action_dispatch/middleware/session/mem_cache_store.rb +3 -1
- data/lib/action_dispatch/middleware/show_exceptions.rb +33 -19
- data/lib/action_dispatch/middleware/ssl.rb +18 -6
- data/lib/action_dispatch/middleware/stack.rb +7 -2
- data/lib/action_dispatch/middleware/static.rb +12 -8
- data/lib/action_dispatch/middleware/templates/rescues/_actions.html.erb +2 -2
- data/lib/action_dispatch/middleware/templates/rescues/_message_and_suggestions.html.erb +4 -4
- data/lib/action_dispatch/middleware/templates/rescues/_source.html.erb +8 -1
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.html.erb +7 -7
- data/lib/action_dispatch/middleware/templates/rescues/diagnostics.text.erb +2 -2
- data/lib/action_dispatch/middleware/templates/rescues/layout.erb +17 -0
- data/lib/action_dispatch/middleware/templates/rescues/missing_exact_template.html.erb +16 -12
- data/lib/action_dispatch/middleware/templates/rescues/missing_template.html.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/routing_error.html.erb +3 -3
- data/lib/action_dispatch/middleware/templates/rescues/template_error.html.erb +4 -4
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.html.erb +1 -1
- data/lib/action_dispatch/middleware/templates/rescues/unknown_action.text.erb +1 -1
- data/lib/action_dispatch/middleware/templates/routes/_route.html.erb +3 -0
- data/lib/action_dispatch/middleware/templates/routes/_table.html.erb +46 -37
- data/lib/action_dispatch/railtie.rb +13 -4
- data/lib/action_dispatch/request/session.rb +16 -6
- data/lib/action_dispatch/request/utils.rb +8 -3
- data/lib/action_dispatch/routing/inspector.rb +54 -6
- data/lib/action_dispatch/routing/mapper.rb +74 -26
- data/lib/action_dispatch/routing/polymorphic_routes.rb +2 -0
- data/lib/action_dispatch/routing/redirection.rb +15 -6
- data/lib/action_dispatch/routing/route_set.rb +53 -23
- data/lib/action_dispatch/routing/routes_proxy.rb +10 -15
- data/lib/action_dispatch/routing/url_for.rb +5 -1
- data/lib/action_dispatch/routing.rb +7 -7
- data/lib/action_dispatch/system_test_case.rb +3 -3
- data/lib/action_dispatch/system_testing/browser.rb +25 -19
- data/lib/action_dispatch/system_testing/driver.rb +14 -22
- data/lib/action_dispatch/system_testing/test_helpers/screenshot_helper.rb +27 -16
- data/lib/action_dispatch/testing/assertion_response.rb +1 -1
- data/lib/action_dispatch/testing/assertions/response.rb +13 -6
- data/lib/action_dispatch/testing/assertions/routing.rb +67 -28
- data/lib/action_dispatch/testing/assertions.rb +3 -1
- data/lib/action_dispatch/testing/integration.rb +27 -17
- data/lib/action_dispatch/testing/request_encoder.rb +4 -1
- data/lib/action_dispatch/testing/test_process.rb +4 -3
- data/lib/action_dispatch/testing/test_request.rb +1 -1
- data/lib/action_dispatch/testing/test_response.rb +23 -9
- data/lib/action_dispatch.rb +41 -4
- data/lib/action_pack/gem_version.rb +4 -4
- data/lib/action_pack/version.rb +1 -1
- data/lib/action_pack.rb +1 -1
- metadata +62 -26
data/CHANGELOG.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
## Rails 7.
|
1
|
+
## Rails 7.1.5.1 (December 10, 2024) ##
|
2
2
|
|
3
3
|
* Add validation to content security policies to disallow spaces and semicolons.
|
4
4
|
Developers should use multiple arguments, and different directive methods instead.
|
@@ -7,632 +7,713 @@
|
|
7
7
|
|
8
8
|
*Gannon McGibbon*
|
9
9
|
|
10
|
-
## Rails 7.0.8.6 (October 23, 2024) ##
|
11
10
|
|
12
|
-
|
11
|
+
## Rails 7.1.5 (October 30, 2024) ##
|
13
12
|
|
13
|
+
* No changes.
|
14
14
|
|
15
|
-
## Rails 7.0.8.5 (October 15, 2024) ##
|
16
15
|
|
17
|
-
|
16
|
+
## Rails 7.1.4.2 (October 23, 2024) ##
|
18
17
|
|
19
|
-
|
18
|
+
* No changes.
|
20
19
|
|
21
|
-
* Avoid regex backtracking in query parameter filtering
|
22
20
|
|
23
|
-
|
21
|
+
## Rails 7.1.4.1 (October 15, 2024) ##
|
24
22
|
|
23
|
+
* Avoid regex backtracking in HTTP Token authentication
|
25
24
|
|
26
|
-
|
25
|
+
[CVE-2024-47887]
|
27
26
|
|
28
|
-
*
|
29
|
-
[CVE-2024-28103]
|
27
|
+
*John Hawthorn*
|
30
28
|
|
29
|
+
* Avoid regex backtracking in query parameter filtering
|
31
30
|
|
32
|
-
|
31
|
+
[CVE-2024-41128]
|
33
32
|
|
34
|
-
*
|
33
|
+
*John Hawthorn*
|
35
34
|
|
35
|
+
## Rails 7.1.4 (August 22, 2024) ##
|
36
36
|
|
37
|
-
|
37
|
+
* Resolve deprecation warning in latest `selenium-webdriver`.
|
38
38
|
|
39
|
-
*
|
39
|
+
*Earlopain*
|
40
40
|
|
41
|
+
* Don't preload Selenium browser when remote.
|
41
42
|
|
42
|
-
|
43
|
+
*Noah Horton*
|
43
44
|
|
44
|
-
* Fix
|
45
|
+
* Fix crash for invalid Content-Type in ShowExceptions middleware.
|
45
46
|
|
46
|
-
|
47
|
+
*Earlopain*
|
47
48
|
|
48
|
-
|
49
|
+
* Fix inconsistent results of `params.deep_transform_keys`.
|
49
50
|
|
50
|
-
*
|
51
|
-
X_FORWARDED_HOST header when the HTTP_HOST header is being blocked.
|
51
|
+
*Iago Pimenta*
|
52
52
|
|
53
|
-
|
53
|
+
* Do not report rendered errors except 500.
|
54
54
|
|
55
|
+
*Nikita Vasilevsky*
|
55
56
|
|
56
|
-
|
57
|
+
* Improve routes source location detection.
|
57
58
|
|
58
|
-
*
|
59
|
+
*Jean Boussier*
|
59
60
|
|
61
|
+
* Fix `Request#raw_post` raising `NoMethodError` when `rack.input` is `nil`.
|
60
62
|
|
61
|
-
|
63
|
+
*Hartley McGuire*
|
62
64
|
|
63
|
-
*
|
65
|
+
* Fix url generation in nested engine when script name is empty.
|
64
66
|
|
67
|
+
*zzak*
|
65
68
|
|
66
|
-
|
69
|
+
* Fix `Mime::Type.parse` handling type parameters for HTTP Accept headers.
|
67
70
|
|
68
|
-
*
|
71
|
+
*Taylor Chaparro*
|
69
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.
|
70
75
|
|
71
|
-
|
76
|
+
*Joshua Young*
|
72
77
|
|
73
|
-
*
|
78
|
+
* Fix a regression in 7.1.3 passing a `to:` option without a controller when the controller is already defined by a scope.
|
74
79
|
|
80
|
+
```ruby
|
81
|
+
Rails.application.routes.draw do
|
82
|
+
controller :home do
|
83
|
+
get "recent", to: "recent_posts"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
```
|
75
87
|
|
76
|
-
|
88
|
+
*Étienne Barrié*
|
77
89
|
|
78
|
-
*
|
79
|
-
[CVE-2023-28362]
|
90
|
+
* Fix `ActionDispatch::Executor` middleware to report errors handled by `ActionDispatch::ShowExceptions`
|
80
91
|
|
81
|
-
|
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.
|
82
95
|
|
83
|
-
|
96
|
+
*Jean Boussier*
|
84
97
|
|
85
|
-
* Do not return CSP headers for 304 Not Modified responses.
|
86
98
|
|
87
|
-
|
99
|
+
## Rails 7.1.3.4 (June 04, 2024) ##
|
88
100
|
|
89
|
-
*
|
101
|
+
* Include the HTTP Permissions-Policy on non-HTML Content-Types
|
102
|
+
[CVE-2024-28103]
|
90
103
|
|
91
|
-
*
|
104
|
+
*Aaron Patterson*
|
92
105
|
|
93
|
-
|
106
|
+
## Rails 7.1.3.3 (May 16, 2024) ##
|
94
107
|
|
95
|
-
|
108
|
+
* No changes.
|
96
109
|
|
97
|
-
* Address Selenium `:capabilities` deprecation warning.
|
98
110
|
|
99
|
-
|
111
|
+
## Rails 7.1.3.2 (February 21, 2024) ##
|
100
112
|
|
101
|
-
* Fix
|
113
|
+
* Fix `raise_on_missing_translations` not working correctly with the
|
114
|
+
`translate` method in controllers after the patch for CVE-2024-26143.
|
102
115
|
|
103
116
|
*John Hawthorn*
|
104
117
|
|
105
|
-
|
118
|
+
## Rails 7.1.3.1 (February 21, 2024) ##
|
106
119
|
|
107
|
-
|
108
|
-
`:controller`, `:namespaced_controller`, or `:action`, that item would get logged twice.
|
109
|
-
This bug has been fixed.
|
120
|
+
* Fix possible XSS vulnerability with the `translate` method in controllers
|
110
121
|
|
111
|
-
|
122
|
+
CVE-2024-26143
|
112
123
|
|
113
|
-
*
|
124
|
+
*ooooooo-q + Aaron Patterson*
|
114
125
|
|
115
|
-
|
126
|
+
* Fix ReDoS in Accept header parsing
|
116
127
|
|
117
|
-
|
128
|
+
CVE-2024-26142
|
118
129
|
|
119
|
-
|
120
|
-
the app tries to read a `:marshal` serialized cookie, it would error out which wouldn't
|
121
|
-
clear the cookie and force app users to manually clear it in their browser.
|
130
|
+
*Aaron Patterson*
|
122
131
|
|
123
|
-
|
132
|
+
## Rails 7.1.3 (January 16, 2024) ##
|
124
133
|
|
125
|
-
|
134
|
+
* Fix including `Rails.application.routes.url_helpers` directly in an
|
135
|
+
`ActiveSupport::Concern.`
|
126
136
|
|
127
|
-
|
137
|
+
*Jonathan Hefner*
|
128
138
|
|
129
|
-
*
|
139
|
+
* Fix system tests when using a Chrome binary that has been downloaded by
|
140
|
+
Selenium.
|
130
141
|
|
142
|
+
*Jonathan Hefner*
|
131
143
|
|
132
|
-
## Rails 7.0.4.2 (January 24, 2023) ##
|
133
144
|
|
134
|
-
|
145
|
+
## Rails 7.1.2 (November 10, 2023) ##
|
135
146
|
|
136
|
-
|
137
|
-
|
138
|
-
level domain domain (like `.ca`, rather than `.co.uk`).
|
147
|
+
* Fix a race condition that could cause a `Text file busy - chromedriver`
|
148
|
+
error with parallel system tests
|
139
149
|
|
150
|
+
*Matt Brictson*
|
140
151
|
|
141
|
-
|
152
|
+
* Fix `StrongParameters#extract_value` to include blank values
|
142
153
|
|
143
|
-
|
154
|
+
Otherwise composite parameters may not be parsed correctly when one of the
|
155
|
+
component is blank.
|
144
156
|
|
145
|
-
|
146
|
-
to malicious sites.
|
157
|
+
*fatkodima*, *Yasha Krasnou*, *Matthias Eiglsperger*
|
147
158
|
|
148
|
-
|
159
|
+
* Add `racc` as a dependency since it will become a bundled gem in Ruby 3.4.0
|
149
160
|
|
150
|
-
*
|
161
|
+
*Hartley McGuire*
|
151
162
|
|
152
|
-
|
163
|
+
* Support handling Enumerator for non-buffered responses.
|
153
164
|
|
154
|
-
*
|
165
|
+
*Zachary Scott*
|
155
166
|
|
156
|
-
[CVE-2023-22792]
|
157
167
|
|
158
|
-
## Rails 7.
|
168
|
+
## Rails 7.1.1 (October 11, 2023) ##
|
159
169
|
|
160
|
-
*
|
170
|
+
* No changes.
|
161
171
|
|
162
|
-
Previously, if another middleware down the chain set `Server-Timing` header,
|
163
|
-
it would overwritten by `ActionDispatch::ServerTiming`.
|
164
172
|
|
165
|
-
|
173
|
+
## Rails 7.1.0 (October 05, 2023) ##
|
174
|
+
|
175
|
+
* No changes.
|
166
176
|
|
167
177
|
|
168
|
-
## Rails 7.0.
|
178
|
+
## Rails 7.1.0.rc2 (October 01, 2023) ##
|
169
179
|
|
170
180
|
* No changes.
|
171
181
|
|
172
182
|
|
173
|
-
## Rails 7.0.
|
183
|
+
## Rails 7.1.0.rc1 (September 27, 2023) ##
|
174
184
|
|
175
|
-
*
|
185
|
+
* Add support for `#deep_merge` and `#deep_merge!` to
|
186
|
+
`ActionController::Parameters`.
|
176
187
|
|
177
|
-
*
|
188
|
+
*Sean Doyle*
|
178
189
|
|
179
|
-
* Fix `authenticate_with_http_basic` to allow for missing password.
|
180
|
-
|
181
|
-
Before Rails 7.0 it was possible to handle basic authentication with only a username.
|
182
190
|
|
183
|
-
|
184
|
-
authenticate_with_http_basic do |token, _|
|
185
|
-
ApiClient.authenticate(token)
|
186
|
-
end
|
187
|
-
```
|
191
|
+
## Rails 7.1.0.beta1 (September 13, 2023) ##
|
188
192
|
|
189
|
-
|
193
|
+
* `AbstractController::Translation.raise_on_missing_translations` removed
|
190
194
|
|
191
|
-
|
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.
|
192
197
|
|
193
|
-
*
|
198
|
+
*Alex Ghiculescu*
|
194
199
|
|
195
|
-
|
196
|
-
single quoted when the directive was the result of calling a lambda
|
197
|
-
returning an array.
|
200
|
+
* Add `ActionController::Parameters#extract_value` method to allow extracting serialized values from params
|
198
201
|
|
199
202
|
```ruby
|
200
|
-
|
201
|
-
|
202
|
-
|
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"]
|
203
206
|
```
|
204
207
|
|
205
|
-
|
206
|
-
|
207
|
-
*Edouard Chin*
|
208
|
+
*Nikita Vasilevsky*
|
208
209
|
|
209
|
-
*
|
210
|
-
protection has not been enabled / `verify_authenticity_token` is not a
|
211
|
-
defined callback.
|
210
|
+
* Parse JSON `response.parsed_body` with `ActiveSupport::HashWithIndifferentAccess`
|
212
211
|
|
213
|
-
|
214
|
-
`
|
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.
|
215
215
|
|
216
|
-
*
|
216
|
+
*Sean Doyle*
|
217
217
|
|
218
|
-
*
|
218
|
+
* Add support for Playwright as a driver for system tests.
|
219
219
|
|
220
|
-
|
221
|
-
to keep things such as `CurrentAttributes` set from middlewares working in the controller action.
|
220
|
+
*Yuki Nishijima*
|
222
221
|
|
223
|
-
|
224
|
-
|
222
|
+
* Fix `HostAuthorization` potentially displaying the value of the
|
223
|
+
X_FORWARDED_HOST header when the HTTP_HOST header is being blocked.
|
225
224
|
|
226
|
-
*
|
225
|
+
*Hartley McGuire*, *Daniel Schlosser*
|
227
226
|
|
228
|
-
*
|
227
|
+
* Rename `fixture_file_upload` method to `file_fixture_upload`
|
229
228
|
|
230
|
-
|
231
|
-
get '/test' => "test#index", as: :test, trailing_slash: true
|
229
|
+
Declare an alias to preserve the backwards compatibility of `fixture_file_upload`
|
232
230
|
|
233
|
-
|
234
|
-
```
|
231
|
+
*Sean Doyle*
|
235
232
|
|
236
|
-
|
233
|
+
* `ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper` saves the screenshot path in test metadata on failure.
|
237
234
|
|
238
|
-
|
235
|
+
*Matija Čupić*
|
239
236
|
|
240
|
-
*
|
237
|
+
* `config.dom_testing_default_html_version` controls the HTML parser used by
|
238
|
+
`ActionDispatch::Assertions#html_document`.
|
241
239
|
|
242
|
-
|
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.
|
243
243
|
|
244
|
-
|
244
|
+
*Mike Dalessio*
|
245
245
|
|
246
|
-
*
|
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.
|
247
248
|
|
249
|
+
*Joé Dupuis*
|
248
250
|
|
249
|
-
|
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:
|
250
253
|
|
251
|
-
|
254
|
+
```ruby
|
255
|
+
class RoutingTest < ActionController::TestCase
|
256
|
+
with_routing do |routes|
|
257
|
+
routes.draw do
|
258
|
+
resources :articles
|
259
|
+
resources :authors
|
260
|
+
end
|
261
|
+
end
|
252
262
|
|
263
|
+
def test_articles_route
|
264
|
+
assert_routing("/articles", controller: "articles", action: "index")
|
265
|
+
end
|
253
266
|
|
254
|
-
|
267
|
+
def test_authors_route
|
268
|
+
assert_routing("/authors", controller: "authors", action: "index")
|
269
|
+
end
|
270
|
+
end
|
271
|
+
```
|
255
272
|
|
256
|
-
*
|
257
|
-
response body has been fully closed which result in request state not
|
258
|
-
being fully reset before the next request
|
273
|
+
*Andrew Novoselac*
|
259
274
|
|
260
|
-
|
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.
|
261
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/).
|
262
280
|
|
263
|
-
|
281
|
+
*Nicolas Erni*
|
264
282
|
|
265
|
-
*
|
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.
|
266
285
|
|
286
|
+
Given the following router...
|
267
287
|
|
268
|
-
|
288
|
+
```ruby
|
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
|
295
|
+
end
|
296
|
+
```
|
269
297
|
|
270
|
-
|
271
|
-
of the original object.
|
298
|
+
And given the following `ApplicationController`
|
272
299
|
|
273
|
-
|
300
|
+
```ruby
|
301
|
+
class ApplicationController < ActionController::Base
|
302
|
+
def default_url_options
|
303
|
+
{ path_params: { account_id: "foo" } }
|
304
|
+
end
|
305
|
+
end
|
306
|
+
```
|
274
307
|
|
308
|
+
The standard url_for helper and friends will now behave as follows:
|
275
309
|
|
276
|
-
|
310
|
+
```ruby
|
311
|
+
dashboard_path # => /foo/dashboard
|
312
|
+
dashboard_path(account_id: "bar") # => /bar/dashboard
|
277
313
|
|
278
|
-
|
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
|
+
```
|
279
319
|
|
280
|
-
|
320
|
+
*Jason Meller, Jeremy Beker*
|
281
321
|
|
282
|
-
*
|
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.
|
283
327
|
|
284
|
-
|
285
|
-
not persist into the second one. (It's not recommended to make multiple requests in the same test.)
|
328
|
+
*Jon Dufresne*
|
286
329
|
|
287
|
-
|
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).
|
288
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:
|
289
337
|
|
290
|
-
|
338
|
+
```ruby
|
339
|
+
cookies.encrypted[:foo] = [{ a: 1 }, { b: 2 }.with_indifferent_access, 1.to_d, Time.at(0, 123)]
|
291
340
|
|
292
|
-
|
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]
|
293
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
|
+
```
|
294
353
|
|
295
|
-
|
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.
|
296
361
|
|
297
|
-
*
|
362
|
+
*Jonathan Hefner*
|
298
363
|
|
364
|
+
* Remove leading dot from domains on cookies set with `domain: :all`, to meet RFC6265 requirements
|
299
365
|
|
300
|
-
|
366
|
+
*Gareth Adams*
|
301
367
|
|
302
|
-
*
|
368
|
+
* Include source location in routes extended view.
|
303
369
|
|
304
|
-
|
305
|
-
|
370
|
+
```bash
|
371
|
+
$ bin/rails routes --expanded
|
306
372
|
|
307
|
-
|
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
|
380
|
+
```
|
308
381
|
|
309
|
-
*
|
382
|
+
*Luan Vieira, John Hawthorn and Daniel Colson*
|
310
383
|
|
311
|
-
*
|
384
|
+
* Add `without` as an alias of `except` on `ActiveController::Parameters`.
|
312
385
|
|
313
|
-
*
|
386
|
+
*Hidde-Jan Jongsma*
|
314
387
|
|
315
|
-
*
|
388
|
+
* Expand search field on `rails/info/routes` to also search **route name**, **http verb** and **controller#action**.
|
316
389
|
|
317
|
-
*
|
390
|
+
*Jason Kotchoff*
|
318
391
|
|
319
|
-
* Remove deprecated
|
392
|
+
* Remove deprecated `poltergeist` and `webkit` (capybara-webkit) driver registration for system testing.
|
320
393
|
|
321
394
|
*Rafael Mendonça França*
|
322
395
|
|
323
|
-
* Remove deprecated `
|
396
|
+
* Remove deprecated ability to assign a single value to `config.action_dispatch.trusted_proxies`.
|
324
397
|
|
325
398
|
*Rafael Mendonça França*
|
326
399
|
|
327
|
-
*
|
400
|
+
* Deprecate `config.action_dispatch.return_only_request_media_type_on_content_type`.
|
328
401
|
|
329
402
|
*Rafael Mendonça França*
|
330
403
|
|
331
|
-
* Remove deprecated `
|
404
|
+
* Remove deprecated behavior on `Request#content_type`.
|
332
405
|
|
333
406
|
*Rafael Mendonça França*
|
334
407
|
|
335
|
-
*
|
336
|
-
|
337
|
-
This allows `rescue_from` to be used to add a default fallback route:
|
408
|
+
* Change `ActionController::Instrumentation` to pass `filtered_path` instead of `fullpath` in the event payload to filter sensitive query params
|
338
409
|
|
339
410
|
```ruby
|
340
|
-
|
341
|
-
|
342
|
-
|
411
|
+
get "/posts?password=test"
|
412
|
+
request.fullpath # => "/posts?password=test"
|
413
|
+
request.filtered_path # => "/posts?password=[FILTERED]"
|
343
414
|
```
|
344
415
|
|
345
|
-
*
|
416
|
+
*Ritikesh G*
|
346
417
|
|
347
|
-
*
|
418
|
+
* Deprecate `AbstractController::Helpers::MissingHelperError`
|
348
419
|
|
349
|
-
|
350
|
-
|
351
|
-
|
420
|
+
*Hartley McGuire*
|
421
|
+
|
422
|
+
* Change `ActionDispatch::Testing::TestResponse#parsed_body` to parse HTML as
|
423
|
+
a Nokogiri document
|
352
424
|
|
353
425
|
```ruby
|
354
|
-
|
355
|
-
|
356
|
-
|
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..."
|
357
430
|
```
|
358
431
|
|
359
|
-
*
|
432
|
+
*Sean Doyle*
|
360
433
|
|
361
|
-
*
|
434
|
+
* Deprecate `ActionDispatch::IllegalStateError`.
|
362
435
|
|
363
|
-
|
364
|
-
type (selenium, poltergeist, webkit, rack test).
|
436
|
+
*Samuel Williams*
|
365
437
|
|
366
|
-
|
438
|
+
* Add HTTP::Request#route_uri_pattern that returns URI pattern of matched route.
|
367
439
|
|
368
|
-
*
|
440
|
+
*Joel Hawksley*, *Kate Higa*
|
369
441
|
|
370
|
-
*
|
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.
|
371
448
|
|
372
|
-
|
373
|
-
a `No route matches` error.
|
374
|
-
After this change, routes with newlines are detected on wildcard segments. Example
|
375
|
-
|
376
|
-
```ruby
|
377
|
-
draw do
|
378
|
-
get "/wildcard/*wildcard_segment", to: SimpleApp.new("foo#index"), as: :wildcard
|
379
|
-
end
|
380
|
-
|
381
|
-
# After the change, the path matches.
|
382
|
-
assert_equal "/wildcard/a%0Anewline", url_helpers.wildcard_path(wildcard_segment: "a\nnewline")
|
383
|
-
```
|
449
|
+
*DHH*
|
384
450
|
|
385
|
-
|
451
|
+
* Only use HostAuthorization middleware if `config.hosts` is not empty
|
386
452
|
|
387
|
-
*
|
453
|
+
*Hartley McGuire*
|
388
454
|
|
389
|
-
*
|
455
|
+
* Allow raising an error when a callback's only/unless symbols aren't existing methods.
|
390
456
|
|
391
|
-
|
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.
|
392
458
|
|
393
|
-
|
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.
|
394
460
|
|
395
|
-
|
396
|
-
After this change you can specify different fields for each numbered parameter.
|
397
|
-
For example params like,
|
398
|
-
```ruby
|
399
|
-
book: {
|
400
|
-
authors_attributes: {
|
401
|
-
'0': { name: "William Shakespeare", age_of_death: "52" },
|
402
|
-
'1': { name: "Unattributed Assistant" },
|
403
|
-
'2': "Not a hash",
|
404
|
-
'new_record': { name: "Some name" }
|
405
|
-
}
|
406
|
-
}
|
407
|
-
```
|
461
|
+
*Jess Bees*
|
408
462
|
|
409
|
-
|
410
|
-
`permit book: { authors_attributes: [ :name ] }`
|
463
|
+
* Allow cookie options[:domain] to accept a proc to set the cookie domain on a more flexible per-request basis
|
411
464
|
|
412
|
-
|
413
|
-
`permit book: { authors_attributes: { '1': [ :name ], '0': [ :name, :age_of_death ] } }`
|
465
|
+
*RobL*
|
414
466
|
|
415
|
-
|
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`.
|
416
470
|
|
417
|
-
|
471
|
+
This means that for an application with a configuration like:
|
418
472
|
|
419
|
-
|
420
|
-
|
473
|
+
```ruby
|
474
|
+
Rails.application.default_url_options = { host: "rubyonrails.org" }
|
475
|
+
Rails.application.config.force_ssl = true
|
476
|
+
```
|
421
477
|
|
422
|
-
|
478
|
+
rendering a URL like:
|
423
479
|
|
424
|
-
|
480
|
+
```ruby
|
481
|
+
ApplicationController.renderer.render inline: "<%= blog_url %>"
|
482
|
+
```
|
425
483
|
|
426
|
-
|
484
|
+
will now return `"https://rubyonrails.org/blog"` instead of
|
485
|
+
`"http://example.org/blog"`.
|
427
486
|
|
428
|
-
*
|
487
|
+
*Jonathan Hefner*
|
429
488
|
|
430
|
-
|
431
|
-
about the request it is responding to.
|
489
|
+
* Add details of cookie name and size to `CookieOverflow` exception.
|
432
490
|
|
433
|
-
|
434
|
-
`config.server_timing` setting and set the relevant duration metrics in the `Server-Timing` header
|
491
|
+
*Andy Waite*
|
435
492
|
|
436
|
-
|
493
|
+
* Don't double log the `controller`, `action`, or `namespaced_controller` when using `ActiveRecord::QueryLog`
|
437
494
|
|
438
|
-
|
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.
|
439
498
|
|
499
|
+
*Alex Ghiculescu*
|
440
500
|
|
441
|
-
|
501
|
+
* Add the following permissions policy directives: `hid`, `idle-detection`, `screen-wake-lock`,
|
502
|
+
`serial`, `sync-xhr`, `web-share`.
|
442
503
|
|
443
|
-
*
|
504
|
+
*Guillaume Cabanel*
|
444
505
|
|
506
|
+
* The `speaker`, `vibrate`, and `vr` permissions policy directives are now
|
507
|
+
deprecated.
|
445
508
|
|
446
|
-
|
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.
|
447
512
|
|
448
|
-
*
|
449
|
-
to avoid inadvertently logging the HTTP request body at the `fatal` level when it contains
|
450
|
-
malformed JSON.
|
513
|
+
*Jonathan Hefner*
|
451
514
|
|
452
|
-
|
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.
|
453
518
|
|
454
|
-
*
|
519
|
+
*Jon Dufresne*
|
455
520
|
|
456
|
-
*
|
521
|
+
* Rescue `JSON::ParserError` in Cookies JSON deserializer to discards marshal dumps:
|
457
522
|
|
458
|
-
|
459
|
-
|
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.
|
460
526
|
|
461
|
-
|
527
|
+
(See #45127 for original bug discussion)
|
462
528
|
|
463
|
-
*
|
529
|
+
*Nathan Bardoux*
|
464
530
|
|
465
|
-
|
466
|
-
Opt in to this behaviour with `ActionController::Base.raise_on_open_redirects = true`.
|
531
|
+
* Add `HTTP_REFERER` when following redirects on integration tests
|
467
532
|
|
468
|
-
|
533
|
+
This makes `follow_redirect!` a closer simulation of what happens in a real browser
|
469
534
|
|
470
|
-
*
|
535
|
+
*Felipe Sateler*
|
471
536
|
|
472
|
-
|
537
|
+
* Added `exclude?` method to `ActionController::Parameters`.
|
473
538
|
|
474
|
-
|
539
|
+
*Ian Neubert*
|
475
540
|
|
476
|
-
|
541
|
+
* Rescue `EOFError` exception from `rack` on a multipart request.
|
477
542
|
|
478
|
-
*
|
543
|
+
*Nikita Vasilevsky*
|
479
544
|
|
480
|
-
|
481
|
-
are not listed as actions on that controller.
|
545
|
+
* Log redirects from routes the same way as redirects from controllers.
|
482
546
|
|
483
|
-
|
484
|
-
add_flash_types :hype
|
485
|
-
end
|
547
|
+
*Dennis Paagman*
|
486
548
|
|
487
|
-
|
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`.
|
488
552
|
|
489
|
-
*
|
553
|
+
*Jakub Malinowski*
|
490
554
|
|
491
|
-
*
|
555
|
+
* Allow opting out of the `SameSite` cookie attribute when setting a cookie.
|
492
556
|
|
493
|
-
|
557
|
+
You can opt out of `SameSite` by passing `same_site: nil`.
|
494
558
|
|
495
|
-
|
559
|
+
`cookies[:foo] = { value: "bar", same_site: nil }`
|
496
560
|
|
497
|
-
|
561
|
+
Previously, this incorrectly set the `SameSite` attribute to the value of the `cookies_same_site_protection` setting.
|
498
562
|
|
499
|
-
*
|
563
|
+
*Alex Ghiculescu*
|
500
564
|
|
501
|
-
*
|
502
|
-
present in `rescued_responses`.
|
565
|
+
* Allow using `helper_method`s in `content_security_policy` and `permissions_policy`
|
503
566
|
|
504
|
-
|
505
|
-
|
506
|
-
`config.action_dispatch.log_rescued_responses` (defaults to `true`) can be set to `false` in
|
507
|
-
this case, so that only exceptions not found in `rescued_responses` will be logged.
|
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.
|
508
569
|
|
509
|
-
|
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
|
+
```
|
510
576
|
|
511
|
-
*
|
577
|
+
*Alex Ghiculescu*
|
512
578
|
|
513
|
-
|
579
|
+
* Reimplement `ActionController::Parameters#has_value?` and `#value?` to avoid parameters and hashes comparison.
|
514
580
|
|
515
|
-
|
581
|
+
Deprecated equality between parameters and hashes is going to be removed in Rails 7.2.
|
582
|
+
The new implementation takes care of conversions.
|
516
583
|
|
517
|
-
*
|
584
|
+
*Seva Stefkin*
|
518
585
|
|
519
|
-
*
|
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.
|
520
589
|
|
521
|
-
*
|
590
|
+
*Seva Stefkin*
|
522
591
|
|
523
|
-
*
|
592
|
+
* Add the ability to use custom logic for storing and retrieving CSRF tokens.
|
524
593
|
|
525
|
-
|
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.
|
526
597
|
|
527
|
-
*
|
598
|
+
*Andrew Kowpak*
|
528
599
|
|
529
|
-
*
|
600
|
+
* Make ActionController::Parameters#values cast nested hashes into parameters.
|
530
601
|
|
531
602
|
*Gannon McGibbon*
|
532
603
|
|
533
|
-
*
|
604
|
+
* Introduce `html:` and `screenshot:` kwargs for system test screenshot helper
|
605
|
+
|
606
|
+
Use these as an alternative to the already-available environment variables.
|
534
607
|
|
535
|
-
|
608
|
+
For example, this will display a screenshot in iTerm, save the HTML, and output
|
609
|
+
its path.
|
536
610
|
|
537
|
-
|
611
|
+
```ruby
|
612
|
+
take_screenshot(html: true, screenshot: "inline")
|
613
|
+
```
|
538
614
|
|
539
|
-
*
|
615
|
+
*Alex Ghiculescu*
|
540
616
|
|
541
|
-
|
617
|
+
* Allow `ActionController::Parameters#to_h` to receive a block.
|
542
618
|
|
543
|
-
*
|
619
|
+
*Bob Farrell*
|
544
620
|
|
545
|
-
*
|
621
|
+
* Allow relative redirects when `raise_on_open_redirects` is enabled
|
546
622
|
|
547
|
-
|
623
|
+
*Tom Hughes*
|
548
624
|
|
549
|
-
|
625
|
+
* Allow Content Security Policy DSL to generate for API responses.
|
550
626
|
|
551
|
-
*
|
627
|
+
*Tim Wade*
|
552
628
|
|
553
|
-
|
629
|
+
* Fix `authenticate_with_http_basic` to allow for missing password.
|
554
630
|
|
555
|
-
|
631
|
+
Before Rails 7.0 it was possible to handle basic authentication with only a username.
|
556
632
|
|
557
|
-
|
633
|
+
```ruby
|
634
|
+
authenticate_with_http_basic do |token, _|
|
635
|
+
ApiClient.authenticate(token)
|
636
|
+
end
|
637
|
+
```
|
558
638
|
|
559
|
-
|
639
|
+
This ability is restored.
|
560
640
|
|
561
|
-
*
|
562
|
-
know which controller action received unpermitted parameters.
|
641
|
+
*Jean Boussier*
|
563
642
|
|
564
|
-
|
643
|
+
* Fix `content_security_policy` returning invalid directives.
|
565
644
|
|
566
|
-
|
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.
|
567
648
|
|
568
649
|
```ruby
|
569
|
-
|
570
|
-
|
571
|
-
|
572
|
-
@subscribers.find_each do |subscriber|
|
573
|
-
stream.writeln [ subscriber.email_address, subscriber.updated_at ].join(",")
|
574
|
-
end
|
650
|
+
content_security_policy do |policy|
|
651
|
+
policy.frame_ancestors lambda { [:self, "https://example.com"] }
|
575
652
|
end
|
576
653
|
```
|
577
654
|
|
578
|
-
|
655
|
+
With this fix the policy generated from above will now be valid.
|
579
656
|
|
580
|
-
*
|
657
|
+
*Edouard Chin*
|
581
658
|
|
582
|
-
|
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.
|
583
662
|
|
584
|
-
|
663
|
+
This fix prevents the Rails 7.0 Welcome Page (`/`) from raising an
|
664
|
+
`ArgumentError` if `default_protect_from_forgery` is false.
|
585
665
|
|
586
|
-
|
587
|
-
This behavior changed to returned Content-Type header containing charset part as it is.
|
666
|
+
*Brad Trick*
|
588
667
|
|
589
|
-
|
668
|
+
* Make `redirect_to` return an empty response body.
|
590
669
|
|
591
|
-
|
670
|
+
Application controllers that wish to add a response body after calling
|
671
|
+
`redirect_to` can continue to do so.
|
592
672
|
|
593
|
-
|
594
|
-
request = ActionDispatch::Request.new("CONTENT_TYPE" => "text/csv; header=present; charset=utf-16", "REQUEST_METHOD" => "GET")
|
595
|
-
request.content_type #=> "text/csv"
|
596
|
-
```
|
673
|
+
*Jon Dufresne*
|
597
674
|
|
598
|
-
|
675
|
+
* Use non-capturing group for subdomain matching in `ActionDispatch::HostAuthorization`
|
599
676
|
|
600
|
-
|
601
|
-
request = ActionDispatch::Request.new("Content-Type" => "text/csv; header=present; charset=utf-16", "REQUEST_METHOD" => "GET")
|
602
|
-
request.content_type #=> "text/csv; header=present; charset=utf-16"
|
603
|
-
request.media_type #=> "text/csv"
|
604
|
-
```
|
677
|
+
Since we do nothing with the captured subdomain group, we can use a non-capturing group instead.
|
605
678
|
|
606
|
-
*
|
679
|
+
*Sam Bostock*
|
607
680
|
|
608
|
-
*
|
681
|
+
* Fix `ActionController::Live` to copy the IsolatedExecutionState in the ephemeral thread.
|
609
682
|
|
610
|
-
|
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.
|
611
685
|
|
612
|
-
|
686
|
+
With the introduction of `IsolatedExecutionState` in 7.0, some of that global state was lost in
|
687
|
+
`ActionController::Live` controllers.
|
613
688
|
|
614
|
-
*
|
689
|
+
*Jean Boussier*
|
615
690
|
|
616
|
-
*
|
691
|
+
* Fix setting `trailing_slash: true` in route definition.
|
692
|
+
|
693
|
+
```ruby
|
694
|
+
get '/test' => "test#index", as: :test, trailing_slash: true
|
617
695
|
|
618
|
-
|
696
|
+
test_path() # => "/test/"
|
697
|
+
```
|
619
698
|
|
620
|
-
*
|
699
|
+
*Jean Boussier*
|
621
700
|
|
622
|
-
|
701
|
+
* Make `Session#merge!` stringify keys.
|
623
702
|
|
624
|
-
|
625
|
-
as `RemoteIp` middleware behaves inconsistently depending on whether this is configured
|
626
|
-
with a single value or an enumerable.
|
703
|
+
Previously `Session#update` would, but `merge!` wouldn't.
|
627
704
|
|
628
|
-
|
705
|
+
*Drew Bragg*
|
629
706
|
|
630
|
-
|
707
|
+
* Add `:unsafe_hashes` mapping for `content_security_policy`
|
631
708
|
|
632
|
-
|
633
|
-
|
709
|
+
```ruby
|
710
|
+
# Before
|
711
|
+
policy.script_src :strict_dynamic, "'unsafe-hashes'", "'sha256-rRMdkshZyJlCmDX27XnL7g3zXaxv7ei6Sg+yt4R3svU='"
|
634
712
|
|
635
|
-
|
713
|
+
# After
|
714
|
+
policy.script_src :strict_dynamic, :unsafe_hashes, "'sha256-rRMdkshZyJlCmDX27XnL7g3zXaxv7ei6Sg+yt4R3svU='"
|
715
|
+
```
|
636
716
|
|
717
|
+
*Igor Morozov*
|
637
718
|
|
638
|
-
Please check [
|
719
|
+
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/actionpack/CHANGELOG.md) for previous changes.
|