actionpack 7.0.4 → 7.1.3.4
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of actionpack might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGELOG.md +397 -269
- data/MIT-LICENSE +1 -1
- data/README.rdoc +4 -4
- 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 +75 -28
- data/lib/abstract_controller/railties/routes_helpers.rb +1 -16
- data/lib/abstract_controller/rendering.rb +12 -14
- data/lib/abstract_controller/translation.rb +9 -6
- data/lib/abstract_controller/url_for.rb +2 -0
- data/lib/abstract_controller.rb +6 -0
- data/lib/action_controller/api.rb +6 -4
- 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/basic_implicit_render.rb +3 -1
- data/lib/action_controller/metal/conditional_get.rb +121 -123
- data/lib/action_controller/metal/content_security_policy.rb +5 -5
- data/lib/action_controller/metal/data_streaming.rb +20 -18
- data/lib/action_controller/metal/default_headers.rb +2 -0
- data/lib/action_controller/metal/etag_with_flash.rb +3 -1
- 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 +9 -7
- data/lib/action_controller/metal/helpers.rb +3 -14
- data/lib/action_controller/metal/http_authentication.rb +17 -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 +25 -1
- 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 +2 -2
- data/lib/action_controller/metal/redirecting.rb +29 -8
- data/lib/action_controller/metal/renderers.rb +4 -4
- data/lib/action_controller/metal/rendering.rb +114 -9
- data/lib/action_controller/metal/request_forgery_protection.rb +144 -53
- data/lib/action_controller/metal/rescue.rb +6 -3
- data/lib/action_controller/metal/streaming.rb +71 -31
- data/lib/action_controller/metal/strong_parameters.rb +158 -101
- data/lib/action_controller/metal/url_for.rb +9 -4
- data/lib/action_controller/metal.rb +79 -21
- data/lib/action_controller/railtie.rb +24 -10
- data/lib/action_controller/renderer.rb +99 -85
- data/lib/action_controller/test_case.rb +15 -5
- data/lib/action_controller.rb +8 -1
- data/lib/action_dispatch/constants.rb +32 -0
- data/lib/action_dispatch/deprecator.rb +7 -0
- data/lib/action_dispatch/http/cache.rb +9 -11
- data/lib/action_dispatch/http/content_security_policy.rb +14 -9
- data/lib/action_dispatch/http/filter_parameters.rb +14 -28
- data/lib/action_dispatch/http/headers.rb +3 -1
- data/lib/action_dispatch/http/mime_negotiation.rb +22 -22
- data/lib/action_dispatch/http/mime_type.rb +35 -12
- 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 -23
- data/lib/action_dispatch/http/rack_cache.rb +2 -0
- data/lib/action_dispatch/http/request.rb +63 -30
- data/lib/action_dispatch/http/response.rb +80 -63
- data/lib/action_dispatch/http/upload.rb +15 -2
- 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 +108 -117
- 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 +1 -1
- data/lib/action_dispatch/middleware/flash.rb +7 -0
- data/lib/action_dispatch/middleware/host_authorization.rb +18 -8
- 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 +21 -20
- data/lib/action_dispatch/middleware/request_id.rb +4 -2
- 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 +25 -18
- 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 +14 -10
- 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/blocked_host.html.erb +7 -3
- data/lib/action_dispatch/middleware/templates/rescues/blocked_host.text.erb +5 -3
- 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 +59 -41
- data/lib/action_dispatch/railtie.rb +14 -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 +58 -24
- 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 +52 -22
- data/lib/action_dispatch/routing/routes_proxy.rb +10 -15
- data/lib/action_dispatch/routing/url_for.rb +26 -22
- 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 +20 -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 +14 -7
- 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 +37 -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 +65 -29
data/CHANGELOG.md
CHANGED
@@ -1,481 +1,609 @@
|
|
1
|
-
## Rails 7.
|
1
|
+
## Rails 7.1.3.4 (June 04, 2024) ##
|
2
2
|
|
3
|
-
*
|
4
|
-
|
5
|
-
Previously, if another middleware down the chain set `Server-Timing` header,
|
6
|
-
it would overwritten by `ActionDispatch::ServerTiming`.
|
7
|
-
|
8
|
-
*Jakub Malinowski*
|
3
|
+
* Include the HTTP Permissions-Policy on non-HTML Content-Types
|
4
|
+
[CVE-2024-28103]
|
9
5
|
|
10
6
|
|
11
|
-
## Rails 7.
|
7
|
+
## Rails 7.1.3.3 (May 16, 2024) ##
|
12
8
|
|
13
9
|
* No changes.
|
14
10
|
|
15
11
|
|
16
|
-
## Rails 7.
|
12
|
+
## Rails 7.1.3.2 (February 21, 2024) ##
|
17
13
|
|
18
|
-
*
|
14
|
+
* Fix `raise_on_missing_translations` not working correctly with the
|
15
|
+
`translate` method in controllers after the patch for CVE-2024-26143.
|
19
16
|
|
20
|
-
|
17
|
+
## Rails 7.1.3.1 (February 21, 2024) ##
|
21
18
|
|
22
|
-
* Fix `
|
19
|
+
* Fix possible XSS vulnerability with the `translate` method in controllers
|
23
20
|
|
24
|
-
|
21
|
+
CVE-2024-26143
|
25
22
|
|
26
|
-
|
27
|
-
authenticate_with_http_basic do |token, _|
|
28
|
-
ApiClient.authenticate(token)
|
29
|
-
end
|
30
|
-
```
|
23
|
+
* Fix ReDoS in Accept header parsing
|
31
24
|
|
32
|
-
|
25
|
+
CVE-2024-26142
|
33
26
|
|
34
|
-
|
27
|
+
## Rails 7.1.3 (January 16, 2024) ##
|
35
28
|
|
36
|
-
* Fix `
|
29
|
+
* Fix including `Rails.application.routes.url_helpers` directly in an
|
30
|
+
`ActiveSupport::Concern.`
|
37
31
|
|
38
|
-
|
39
|
-
single quoted when the directive was the result of calling a lambda
|
40
|
-
returning an array.
|
32
|
+
*Jonathan Hefner*
|
41
33
|
|
42
|
-
|
43
|
-
|
44
|
-
policy.frame_ancestors lambda { [:self, "https://example.com"] }
|
45
|
-
end
|
46
|
-
```
|
34
|
+
* Fix system tests when using a Chrome binary that has been downloaded by
|
35
|
+
Selenium.
|
47
36
|
|
48
|
-
|
37
|
+
*Jonathan Hefner*
|
49
38
|
|
50
|
-
*Edouard Chin*
|
51
39
|
|
52
|
-
|
53
|
-
protection has not been enabled / `verify_authenticity_token` is not a
|
54
|
-
defined callback.
|
40
|
+
## Rails 7.1.2 (November 10, 2023) ##
|
55
41
|
|
56
|
-
|
57
|
-
|
42
|
+
* Fix a race condition that could cause a `Text file busy - chromedriver`
|
43
|
+
error with parallel system tests
|
58
44
|
|
59
|
-
*
|
45
|
+
*Matt Brictson*
|
60
46
|
|
61
|
-
* Fix `
|
47
|
+
* Fix `StrongParameters#extract_value` to include blank values
|
62
48
|
|
63
|
-
|
64
|
-
|
49
|
+
Otherwise composite parameters may not be parsed correctly when one of the
|
50
|
+
component is blank.
|
65
51
|
|
66
|
-
|
67
|
-
`ActionController::Live` controllers.
|
52
|
+
*fatkodima*, *Yasha Krasnou*, *Matthias Eiglsperger*
|
68
53
|
|
69
|
-
|
54
|
+
* Add `racc` as a dependency since it will become a bundled gem in Ruby 3.4.0
|
70
55
|
|
71
|
-
*
|
56
|
+
*Hartley McGuire*
|
72
57
|
|
73
|
-
|
74
|
-
get '/test' => "test#index", as: :test, trailing_slash: true
|
58
|
+
* Support handling Enumerator for non-buffered responses.
|
75
59
|
|
76
|
-
|
77
|
-
```
|
60
|
+
*Zachary Scott*
|
78
61
|
|
79
|
-
*Jean Boussier*
|
80
62
|
|
81
|
-
## Rails 7.
|
63
|
+
## Rails 7.1.1 (October 11, 2023) ##
|
82
64
|
|
83
|
-
*
|
65
|
+
* No changes.
|
84
66
|
|
85
|
-
*Tim Wade*
|
86
67
|
|
87
|
-
## Rails 7.0
|
68
|
+
## Rails 7.1.0 (October 05, 2023) ##
|
88
69
|
|
89
70
|
* No changes.
|
90
71
|
|
91
72
|
|
92
|
-
## Rails 7.0.
|
73
|
+
## Rails 7.1.0.rc2 (October 01, 2023) ##
|
93
74
|
|
94
75
|
* No changes.
|
95
76
|
|
96
77
|
|
97
|
-
## Rails 7.0.
|
78
|
+
## Rails 7.1.0.rc1 (September 27, 2023) ##
|
98
79
|
|
99
|
-
*
|
100
|
-
|
101
|
-
being fully reset before the next request
|
80
|
+
* Add support for `#deep_merge` and `#deep_merge!` to
|
81
|
+
`ActionController::Parameters`.
|
102
82
|
|
103
|
-
|
83
|
+
*Sean Doyle*
|
104
84
|
|
105
85
|
|
106
|
-
## Rails 7.0.
|
86
|
+
## Rails 7.1.0.beta1 (September 13, 2023) ##
|
107
87
|
|
108
|
-
*
|
88
|
+
* `AbstractController::Translation.raise_on_missing_translations` removed
|
109
89
|
|
90
|
+
This was a private API, and has been removed in favour of a more broadly applicable
|
91
|
+
`config.i18n.raise_on_missing_translations`. See the upgrading guide for more information.
|
110
92
|
|
111
|
-
|
93
|
+
*Alex Ghiculescu*
|
112
94
|
|
113
|
-
*
|
114
|
-
of the original object.
|
95
|
+
* Add `ActionController::Parameters#extract_value` method to allow extracting serialized values from params
|
115
96
|
|
116
|
-
|
97
|
+
```ruby
|
98
|
+
params = ActionController::Parameters.new(id: "1_123", tags: "ruby,rails")
|
99
|
+
params.extract_value(:id) # => ["1", "123"]
|
100
|
+
params.extract_value(:tags, delimiter: ",") # => ["ruby", "rails"]
|
101
|
+
```
|
117
102
|
|
103
|
+
*Nikita Vasilevsky*
|
118
104
|
|
119
|
-
|
105
|
+
* Parse JSON `response.parsed_body` with `ActiveSupport::HashWithIndifferentAccess`
|
120
106
|
|
121
|
-
|
107
|
+
Integrate with Minitest's new `assert_pattern` by parsing the JSON contents
|
108
|
+
of `response.parsed_body` with `ActiveSupport::HashWithIndifferentAccess`, so
|
109
|
+
that it's pattern-matching compatible.
|
122
110
|
|
123
|
-
|
111
|
+
*Sean Doyle*
|
124
112
|
|
125
|
-
*
|
113
|
+
* Add support for Playwright as a driver for system tests.
|
126
114
|
|
127
|
-
|
128
|
-
not persist into the second one. (It's not recommended to make multiple requests in the same test.)
|
115
|
+
*Yuki Nishijima*
|
129
116
|
|
130
|
-
|
117
|
+
* Fix `HostAuthorization` potentially displaying the value of the
|
118
|
+
X_FORWARDED_HOST header when the HTTP_HOST header is being blocked.
|
131
119
|
|
120
|
+
*Hartley McGuire*, *Daniel Schlosser*
|
132
121
|
|
133
|
-
|
122
|
+
* Rename `fixture_file_upload` method to `file_fixture_upload`
|
134
123
|
|
135
|
-
|
124
|
+
Declare an alias to preserve the backwards compatibility of `fixture_file_upload`
|
136
125
|
|
126
|
+
*Sean Doyle*
|
137
127
|
|
138
|
-
|
128
|
+
* `ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper` saves the screenshot path in test metadata on failure.
|
139
129
|
|
140
|
-
*
|
130
|
+
*Matija Čupić*
|
141
131
|
|
132
|
+
* `config.dom_testing_default_html_version` controls the HTML parser used by
|
133
|
+
`ActionDispatch::Assertions#html_document`.
|
142
134
|
|
143
|
-
|
135
|
+
The Rails 7.1 default configuration opts into the HTML5 parser when it is supported, to better
|
136
|
+
represent what the DOM would be in a browser user agent. Previously this test helper always used
|
137
|
+
Nokogiri's HTML4 parser.
|
144
138
|
|
145
|
-
*
|
139
|
+
*Mike Dalessio*
|
146
140
|
|
147
|
-
|
148
|
-
|
141
|
+
* The `with_routing` helper can now be called at the class level. When called at the class level, the routes will
|
142
|
+
be setup before each test, and reset after every test. For example:
|
149
143
|
|
150
|
-
|
144
|
+
```ruby
|
145
|
+
class RoutingTest < ActionController::TestCase
|
146
|
+
with_routing do |routes|
|
147
|
+
routes.draw do
|
148
|
+
resources :articles
|
149
|
+
resources :authors
|
150
|
+
end
|
151
|
+
end
|
151
152
|
|
152
|
-
|
153
|
+
def test_articles_route
|
154
|
+
assert_routing("/articles", controller: "articles", action: "index")
|
155
|
+
end
|
153
156
|
|
154
|
-
|
157
|
+
def test_authors_route
|
158
|
+
assert_routing("/authors", controller: "authors", action: "index")
|
159
|
+
end
|
160
|
+
end
|
161
|
+
```
|
155
162
|
|
156
|
-
*
|
163
|
+
*Andrew Novoselac*
|
157
164
|
|
158
|
-
*
|
165
|
+
* The `Mime::Type` now supports handling types with parameters and correctly handles quotes.
|
166
|
+
When parsing the accept header, the parameters before the q-parameter are kept and if a matching mime-type exists it is used.
|
167
|
+
To keep the current functionality, a fallback is created to look for the media-type without the parameters.
|
159
168
|
|
160
|
-
|
169
|
+
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/).
|
161
170
|
|
162
|
-
*
|
171
|
+
*Nicolas Erni*
|
163
172
|
|
164
|
-
|
173
|
+
* The url_for helpers now support a new option called `path_params`.
|
174
|
+
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.
|
165
175
|
|
166
|
-
|
176
|
+
Given the following router...
|
167
177
|
|
168
|
-
|
178
|
+
```ruby
|
179
|
+
Rails.application.routes.draw do
|
180
|
+
scope ":account_id" do
|
181
|
+
get "dashboard" => "pages#dashboard", as: :dashboard
|
182
|
+
get "search/:term" => "search#search", as: :search
|
183
|
+
end
|
184
|
+
delete "signout" => "sessions#destroy", as: :signout
|
185
|
+
end
|
186
|
+
```
|
169
187
|
|
170
|
-
|
188
|
+
And given the following `ApplicationController`
|
171
189
|
|
172
|
-
|
190
|
+
```ruby
|
191
|
+
class ApplicationController < ActionController::Base
|
192
|
+
def default_url_options
|
193
|
+
{ path_params: { account_id: "foo" } }
|
194
|
+
end
|
195
|
+
end
|
196
|
+
```
|
173
197
|
|
174
|
-
|
198
|
+
The standard url_for helper and friends will now behave as follows:
|
175
199
|
|
176
|
-
|
200
|
+
```ruby
|
201
|
+
dashboard_path # => /foo/dashboard
|
202
|
+
dashboard_path(account_id: "bar") # => /bar/dashboard
|
177
203
|
|
178
|
-
|
204
|
+
signout_path # => /signout
|
205
|
+
signout_path(account_id: "bar") # => /signout?account_id=bar
|
206
|
+
signout_path(account_id: "bar", path_params: { account_id: "baz" }) # => /signout?account_id=bar
|
207
|
+
search_path("quin") # => /foo/search/quin
|
208
|
+
```
|
179
209
|
|
180
|
-
|
210
|
+
*Jason Meller, Jeremy Beker*
|
181
211
|
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
212
|
+
* Change `action_dispatch.show_exceptions` to one of `:all`, `:rescuable`, or
|
213
|
+
`:none`. `:all` and `:none` behave the same as the previous `true` and
|
214
|
+
`false` respectively. The new `:rescuable` option will only show exceptions
|
215
|
+
that can be rescued (e.g. `ActiveRecord::RecordNotFound`). `:rescuable` is
|
216
|
+
now the default for the test environment.
|
187
217
|
|
188
|
-
*
|
218
|
+
*Jon Dufresne*
|
189
219
|
|
190
|
-
*
|
220
|
+
* `config.action_dispatch.cookies_serializer` now accepts `:message_pack` and
|
221
|
+
`:message_pack_allow_marshal` as serializers. These serializers require the
|
222
|
+
[`msgpack` gem](https://rubygems.org/gems/msgpack) (>= 1.7.0).
|
191
223
|
|
192
|
-
|
193
|
-
|
194
|
-
|
224
|
+
The Message Pack format can provide improved performance and smaller payload
|
225
|
+
sizes. It also supports roundtripping some Ruby types that are not supported
|
226
|
+
by JSON. For example:
|
195
227
|
|
196
|
-
|
197
|
-
|
198
|
-
redirect_to url_from(params[:redirect_url]) || root_url
|
199
|
-
end
|
200
|
-
```
|
228
|
+
```ruby
|
229
|
+
cookies.encrypted[:foo] = [{ a: 1 }, { b: 2 }.with_indifferent_access, 1.to_d, Time.at(0, 123)]
|
201
230
|
|
202
|
-
|
231
|
+
# BEFORE with config.action_dispatch.cookies_serializer = :json
|
232
|
+
cookies.encrypted[:foo]
|
233
|
+
# => [{"a"=>1}, {"b"=>2}, "1.0", "1969-12-31T18:00:00.000-06:00"]
|
234
|
+
cookies.encrypted[:foo].map(&:class)
|
235
|
+
# => [Hash, Hash, String, String]
|
203
236
|
|
204
|
-
|
237
|
+
# AFTER with config.action_dispatch.cookies_serializer = :message_pack
|
238
|
+
cookies.encrypted[:foo]
|
239
|
+
# => [{:a=>1}, {"b"=>2}, 0.1e1, 1969-12-31 18:00:00.000123 -0600]
|
240
|
+
cookies.encrypted[:foo].map(&:class)
|
241
|
+
# => [Hash, ActiveSupport::HashWithIndifferentAccess, BigDecimal, Time]
|
242
|
+
```
|
205
243
|
|
206
|
-
|
207
|
-
|
244
|
+
The `:message_pack` serializer can fall back to deserializing with
|
245
|
+
`ActiveSupport::JSON` when necessary, and the `:message_pack_allow_marshal`
|
246
|
+
serializer can fall back to deserializing with `Marshal` as well as
|
247
|
+
`ActiveSupport::JSON`. Additionally, the `:marshal`, `:json`, and
|
248
|
+
`:json_allow_marshal` (AKA `:hybrid`) serializers can now fall back to
|
249
|
+
deserializing with `ActiveSupport::MessagePack` when necessary. These
|
250
|
+
behaviors ensure old cookies can still be read so that migration is easier.
|
208
251
|
|
209
|
-
|
252
|
+
*Jonathan Hefner*
|
210
253
|
|
211
|
-
|
254
|
+
* Remove leading dot from domains on cookies set with `domain: :all`, to meet RFC6265 requirements
|
212
255
|
|
213
|
-
*
|
256
|
+
*Gareth Adams*
|
214
257
|
|
215
|
-
|
216
|
-
a `No route matches` error.
|
217
|
-
After this change, routes with newlines are detected on wildcard segments. Example
|
258
|
+
* Include source location in routes extended view.
|
218
259
|
|
219
|
-
```
|
220
|
-
|
221
|
-
get "/wildcard/*wildcard_segment", to: SimpleApp.new("foo#index"), as: :wildcard
|
222
|
-
end
|
260
|
+
```bash
|
261
|
+
$ bin/rails routes --expanded
|
223
262
|
|
224
|
-
|
225
|
-
|
263
|
+
...
|
264
|
+
--[ Route 14 ]----------
|
265
|
+
Prefix | new_gist
|
266
|
+
Verb | GET
|
267
|
+
URI | /gist(.:format)
|
268
|
+
Controller#Action | gists/gists#new
|
269
|
+
Source Location | config/routes/gist.rb:3
|
226
270
|
```
|
227
271
|
|
228
|
-
|
272
|
+
*Luan Vieira, John Hawthorn and Daniel Colson*
|
229
273
|
|
230
|
-
|
274
|
+
* Add `without` as an alias of `except` on `ActiveController::Parameters`.
|
231
275
|
|
232
|
-
*
|
276
|
+
*Hidde-Jan Jongsma*
|
233
277
|
|
234
|
-
|
278
|
+
* Expand search field on `rails/info/routes` to also search **route name**, **http verb** and **controller#action**.
|
235
279
|
|
236
|
-
*
|
280
|
+
*Jason Kotchoff*
|
281
|
+
|
282
|
+
* Remove deprecated `poltergeist` and `webkit` (capybara-webkit) driver registration for system testing.
|
283
|
+
|
284
|
+
*Rafael Mendonça França*
|
285
|
+
|
286
|
+
* Remove deprecated ability to assign a single value to `config.action_dispatch.trusted_proxies`.
|
287
|
+
|
288
|
+
*Rafael Mendonça França*
|
289
|
+
|
290
|
+
* Deprecate `config.action_dispatch.return_only_request_media_type_on_content_type`.
|
291
|
+
|
292
|
+
*Rafael Mendonça França*
|
293
|
+
|
294
|
+
* Remove deprecated behavior on `Request#content_type`.
|
295
|
+
|
296
|
+
*Rafael Mendonça França*
|
297
|
+
|
298
|
+
* Change `ActionController::Instrumentation` to pass `filtered_path` instead of `fullpath` in the event payload to filter sensitive query params
|
237
299
|
|
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
300
|
```ruby
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
'1': { name: "Unattributed Assistant" },
|
246
|
-
'2': "Not a hash",
|
247
|
-
'new_record': { name: "Some name" }
|
248
|
-
}
|
249
|
-
}
|
301
|
+
get "/posts?password=test"
|
302
|
+
request.fullpath # => "/posts?password=test"
|
303
|
+
request.filtered_path # => "/posts?password=[FILTERED]"
|
250
304
|
```
|
251
305
|
|
252
|
-
|
253
|
-
`permit book: { authors_attributes: [ :name ] }`
|
306
|
+
*Ritikesh G*
|
254
307
|
|
255
|
-
|
256
|
-
`permit book: { authors_attributes: { '1': [ :name ], '0': [ :name, :age_of_death ] } }`
|
308
|
+
* Deprecate `AbstractController::Helpers::MissingHelperError`
|
257
309
|
|
258
|
-
|
310
|
+
*Hartley McGuire*
|
259
311
|
|
260
|
-
|
312
|
+
* Change `ActionDispatch::Testing::TestResponse#parsed_body` to parse HTML as
|
313
|
+
a Nokogiri document
|
261
314
|
|
262
|
-
|
263
|
-
|
315
|
+
```ruby
|
316
|
+
get "/posts"
|
317
|
+
response.content_type # => "text/html; charset=utf-8"
|
318
|
+
response.parsed_body.class # => Nokogiri::HTML5::Document
|
319
|
+
response.parsed_body.to_html # => "<!DOCTYPE html>\n<html>\n..."
|
320
|
+
```
|
264
321
|
|
265
|
-
|
322
|
+
*Sean Doyle*
|
266
323
|
|
267
|
-
|
324
|
+
* Deprecate `ActionDispatch::IllegalStateError`.
|
268
325
|
|
269
|
-
*
|
326
|
+
*Samuel Williams*
|
270
327
|
|
271
|
-
*
|
328
|
+
* Add HTTP::Request#route_uri_pattern that returns URI pattern of matched route.
|
272
329
|
|
273
|
-
|
274
|
-
about the request it is responding to.
|
330
|
+
*Joel Hawksley*, *Kate Higa*
|
275
331
|
|
276
|
-
|
277
|
-
|
332
|
+
* Add `ActionDispatch::AssumeSSL` middleware that can be turned on via `config.assume_ssl`.
|
333
|
+
It makes the application believe that all requests are arriving over SSL. This is useful
|
334
|
+
when proxying through a load balancer that terminates SSL, the forwarded request will appear
|
335
|
+
as though its HTTP instead of HTTPS to the application. This makes redirects and cookie
|
336
|
+
security target HTTP instead of HTTPS. This middleware makes the server assume that the
|
337
|
+
proxy already terminated SSL, and that the request really is HTTPS.
|
278
338
|
|
279
|
-
|
339
|
+
*DHH*
|
280
340
|
|
281
|
-
|
341
|
+
* Only use HostAuthorization middleware if `config.hosts` is not empty
|
282
342
|
|
343
|
+
*Hartley McGuire*
|
283
344
|
|
284
|
-
|
345
|
+
* Allow raising an error when a callback's only/unless symbols aren't existing methods.
|
285
346
|
|
286
|
-
|
347
|
+
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
348
|
|
349
|
+
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
350
|
|
289
|
-
|
351
|
+
*Jess Bees*
|
290
352
|
|
291
|
-
*
|
292
|
-
to avoid inadvertently logging the HTTP request body at the `fatal` level when it contains
|
293
|
-
malformed JSON.
|
353
|
+
* Allow cookie options[:domain] to accept a proc to set the cookie domain on a more flexible per-request basis
|
294
354
|
|
295
|
-
|
355
|
+
*RobL*
|
296
356
|
|
297
|
-
|
357
|
+
* When a host is not specified for an `ActionController::Renderer`'s env,
|
358
|
+
the host and related options will now be derived from the routes'
|
359
|
+
`default_url_options` and `ActionDispatch::Http::URL.secure_protocol`.
|
298
360
|
|
299
|
-
|
361
|
+
This means that for an application with a configuration like:
|
300
362
|
|
301
|
-
|
302
|
-
|
363
|
+
```ruby
|
364
|
+
Rails.application.default_url_options = { host: "rubyonrails.org" }
|
365
|
+
Rails.application.config.force_ssl = true
|
366
|
+
```
|
303
367
|
|
304
|
-
|
368
|
+
rendering a URL like:
|
305
369
|
|
306
|
-
|
370
|
+
```ruby
|
371
|
+
ApplicationController.renderer.render inline: "<%= blog_url %>"
|
372
|
+
```
|
307
373
|
|
308
|
-
|
309
|
-
|
374
|
+
will now return `"https://rubyonrails.org/blog"` instead of
|
375
|
+
`"http://example.org/blog"`.
|
310
376
|
|
311
|
-
*
|
377
|
+
*Jonathan Hefner*
|
312
378
|
|
313
|
-
*
|
379
|
+
* Add details of cookie name and size to `CookieOverflow` exception.
|
314
380
|
|
315
|
-
|
381
|
+
*Andy Waite*
|
316
382
|
|
317
|
-
|
383
|
+
* Don't double log the `controller`, `action`, or `namespaced_controller` when using `ActiveRecord::QueryLog`
|
318
384
|
|
319
|
-
|
385
|
+
Previously if you set `config.active_record.query_log_tags` to an array that included
|
386
|
+
`:controller`, `:namespaced_controller`, or `:action`, that item would get logged twice.
|
387
|
+
This bug has been fixed.
|
320
388
|
|
321
|
-
*
|
389
|
+
*Alex Ghiculescu*
|
322
390
|
|
323
|
-
|
324
|
-
|
391
|
+
* Add the following permissions policy directives: `hid`, `idle-detection`, `screen-wake-lock`,
|
392
|
+
`serial`, `sync-xhr`, `web-share`.
|
325
393
|
|
326
|
-
|
327
|
-
add_flash_types :hype
|
328
|
-
end
|
394
|
+
*Guillaume Cabanel*
|
329
395
|
|
330
|
-
|
396
|
+
* The `speaker`, `vibrate`, and `vr` permissions policy directives are now
|
397
|
+
deprecated.
|
331
398
|
|
332
|
-
|
399
|
+
There is no browser support for these directives, and no plan for browser
|
400
|
+
support in the future. You can just remove these directives from your
|
401
|
+
application.
|
333
402
|
|
334
|
-
*
|
403
|
+
*Jonathan Hefner*
|
335
404
|
|
336
|
-
|
405
|
+
* Added the `:status` option to `assert_redirected_to` to specify the precise
|
406
|
+
HTTP status of the redirect. Defaults to `:redirect` for backwards
|
407
|
+
compatibility.
|
337
408
|
|
338
|
-
*
|
409
|
+
*Jon Dufresne*
|
339
410
|
|
340
|
-
|
411
|
+
* Rescue `JSON::ParserError` in Cookies JSON deserializer to discards marshal dumps:
|
341
412
|
|
342
|
-
|
413
|
+
Without this change, if `action_dispatch.cookies_serializer` is set to `:json` and
|
414
|
+
the app tries to read a `:marshal` serialized cookie, it would error out which wouldn't
|
415
|
+
clear the cookie and force app users to manually clear it in their browser.
|
343
416
|
|
344
|
-
|
345
|
-
present in `rescued_responses`.
|
417
|
+
(See #45127 for original bug discussion)
|
346
418
|
|
347
|
-
|
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.
|
419
|
+
*Nathan Bardoux*
|
351
420
|
|
352
|
-
|
421
|
+
* Add `HTTP_REFERER` when following redirects on integration tests
|
353
422
|
|
354
|
-
|
423
|
+
This makes `follow_redirect!` a closer simulation of what happens in a real browser
|
355
424
|
|
356
|
-
*
|
425
|
+
*Felipe Sateler*
|
357
426
|
|
358
|
-
*
|
427
|
+
* Added `exclude?` method to `ActionController::Parameters`.
|
359
428
|
|
360
|
-
*
|
429
|
+
*Ian Neubert*
|
361
430
|
|
362
|
-
*
|
431
|
+
* Rescue `EOFError` exception from `rack` on a multipart request.
|
363
432
|
|
364
|
-
*
|
433
|
+
*Nikita Vasilevsky*
|
365
434
|
|
366
|
-
*
|
435
|
+
* Log redirects from routes the same way as redirects from controllers.
|
367
436
|
|
368
|
-
|
437
|
+
*Dennis Paagman*
|
369
438
|
|
370
|
-
|
439
|
+
* Prevent `ActionDispatch::ServerTiming` from overwriting existing values in `Server-Timing`.
|
440
|
+
Previously, if another middleware down the chain set `Server-Timing` header,
|
441
|
+
it would overwritten by `ActionDispatch::ServerTiming`.
|
371
442
|
|
372
|
-
*
|
443
|
+
*Jakub Malinowski*
|
373
444
|
|
374
|
-
|
445
|
+
* Allow opting out of the `SameSite` cookie attribute when setting a cookie.
|
375
446
|
|
376
|
-
|
447
|
+
You can opt out of `SameSite` by passing `same_site: nil`.
|
377
448
|
|
378
|
-
|
449
|
+
`cookies[:foo] = { value: "bar", same_site: nil }`
|
379
450
|
|
380
|
-
|
451
|
+
Previously, this incorrectly set the `SameSite` attribute to the value of the `cookies_same_site_protection` setting.
|
381
452
|
|
382
|
-
*
|
453
|
+
*Alex Ghiculescu*
|
383
454
|
|
384
|
-
|
455
|
+
* Allow using `helper_method`s in `content_security_policy` and `permissions_policy`
|
385
456
|
|
386
|
-
|
457
|
+
Previously you could access basic helpers (defined in helper modules), but not
|
458
|
+
helper methods defined using `helper_method`. Now you can use either.
|
459
|
+
|
460
|
+
```ruby
|
461
|
+
content_security_policy do |p|
|
462
|
+
p.default_src "https://example.com"
|
463
|
+
p.script_src "https://example.com" if helpers.script_csp?
|
464
|
+
end
|
465
|
+
```
|
387
466
|
|
388
|
-
*
|
467
|
+
*Alex Ghiculescu*
|
389
468
|
|
390
|
-
|
469
|
+
* Reimplement `ActionController::Parameters#has_value?` and `#value?` to avoid parameters and hashes comparison.
|
391
470
|
|
392
|
-
|
471
|
+
Deprecated equality between parameters and hashes is going to be removed in Rails 7.2.
|
472
|
+
The new implementation takes care of conversions.
|
393
473
|
|
394
|
-
*
|
474
|
+
*Seva Stefkin*
|
395
475
|
|
396
|
-
|
476
|
+
* Allow only String and Symbol keys in `ActionController::Parameters`.
|
477
|
+
Raise `ActionController::InvalidParameterKey` when initializing Parameters
|
478
|
+
with keys that aren't strings or symbols.
|
397
479
|
|
398
|
-
*
|
480
|
+
*Seva Stefkin*
|
399
481
|
|
400
|
-
|
482
|
+
* Add the ability to use custom logic for storing and retrieving CSRF tokens.
|
401
483
|
|
402
|
-
|
484
|
+
By default, the token will be stored in the session. Custom classes can be
|
485
|
+
defined to specify arbitrary behavior, but the ability to store them in
|
486
|
+
encrypted cookies is built in.
|
403
487
|
|
404
|
-
*
|
405
|
-
know which controller action received unpermitted parameters.
|
488
|
+
*Andrew Kowpak*
|
406
489
|
|
407
|
-
|
490
|
+
* Make ActionController::Parameters#values cast nested hashes into parameters.
|
408
491
|
|
409
|
-
*
|
492
|
+
*Gannon McGibbon*
|
410
493
|
|
411
|
-
|
412
|
-
send_stream(filename: "subscribers.csv") do |stream|
|
413
|
-
stream.writeln "email_address,updated_at"
|
494
|
+
* Introduce `html:` and `screenshot:` kwargs for system test screenshot helper
|
414
495
|
|
415
|
-
|
416
|
-
|
417
|
-
|
418
|
-
|
496
|
+
Use these as an alternative to the already-available environment variables.
|
497
|
+
|
498
|
+
For example, this will display a screenshot in iTerm, save the HTML, and output
|
499
|
+
its path.
|
500
|
+
|
501
|
+
```ruby
|
502
|
+
take_screenshot(html: true, screenshot: "inline")
|
419
503
|
```
|
420
504
|
|
421
|
-
*
|
505
|
+
*Alex Ghiculescu*
|
422
506
|
|
423
|
-
*
|
507
|
+
* Allow `ActionController::Parameters#to_h` to receive a block.
|
424
508
|
|
425
|
-
*
|
509
|
+
*Bob Farrell*
|
426
510
|
|
427
|
-
*
|
511
|
+
* Allow relative redirects when `raise_on_open_redirects` is enabled
|
428
512
|
|
429
|
-
|
430
|
-
This behavior changed to returned Content-Type header containing charset part as it is.
|
513
|
+
*Tom Hughes*
|
431
514
|
|
432
|
-
|
515
|
+
* Allow Content Security Policy DSL to generate for API responses.
|
516
|
+
|
517
|
+
*Tim Wade*
|
433
518
|
|
434
|
-
|
519
|
+
* Fix `authenticate_with_http_basic` to allow for missing password.
|
520
|
+
|
521
|
+
Before Rails 7.0 it was possible to handle basic authentication with only a username.
|
435
522
|
|
436
523
|
```ruby
|
437
|
-
|
438
|
-
|
524
|
+
authenticate_with_http_basic do |token, _|
|
525
|
+
ApiClient.authenticate(token)
|
526
|
+
end
|
439
527
|
```
|
440
528
|
|
441
|
-
|
529
|
+
This ability is restored.
|
530
|
+
|
531
|
+
*Jean Boussier*
|
532
|
+
|
533
|
+
* Fix `content_security_policy` returning invalid directives.
|
534
|
+
|
535
|
+
Directives such as `self`, `unsafe-eval` and few others were not
|
536
|
+
single quoted when the directive was the result of calling a lambda
|
537
|
+
returning an array.
|
442
538
|
|
443
539
|
```ruby
|
444
|
-
|
445
|
-
|
446
|
-
|
540
|
+
content_security_policy do |policy|
|
541
|
+
policy.frame_ancestors lambda { [:self, "https://example.com"] }
|
542
|
+
end
|
447
543
|
```
|
448
544
|
|
449
|
-
|
545
|
+
With this fix the policy generated from above will now be valid.
|
450
546
|
|
451
|
-
*
|
547
|
+
*Edouard Chin*
|
452
548
|
|
453
|
-
|
549
|
+
* Fix `skip_forgery_protection` to run without raising an error if forgery
|
550
|
+
protection has not been enabled / `verify_authenticity_token` is not a
|
551
|
+
defined callback.
|
552
|
+
|
553
|
+
This fix prevents the Rails 7.0 Welcome Page (`/`) from raising an
|
554
|
+
`ArgumentError` if `default_protect_from_forgery` is false.
|
555
|
+
|
556
|
+
*Brad Trick*
|
557
|
+
|
558
|
+
* Make `redirect_to` return an empty response body.
|
454
559
|
|
455
|
-
|
560
|
+
Application controllers that wish to add a response body after calling
|
561
|
+
`redirect_to` can continue to do so.
|
456
562
|
|
457
|
-
*
|
563
|
+
*Jon Dufresne*
|
458
564
|
|
459
|
-
*
|
565
|
+
* Use non-capturing group for subdomain matching in `ActionDispatch::HostAuthorization`
|
460
566
|
|
461
|
-
|
567
|
+
Since we do nothing with the captured subdomain group, we can use a non-capturing group instead.
|
462
568
|
|
463
|
-
*
|
569
|
+
*Sam Bostock*
|
464
570
|
|
465
|
-
|
571
|
+
* Fix `ActionController::Live` to copy the IsolatedExecutionState in the ephemeral thread.
|
572
|
+
|
573
|
+
Since its inception `ActionController::Live` has been copying thread local variables
|
574
|
+
to keep things such as `CurrentAttributes` set from middlewares working in the controller action.
|
466
575
|
|
467
|
-
|
468
|
-
|
469
|
-
with a single value or an enumerable.
|
576
|
+
With the introduction of `IsolatedExecutionState` in 7.0, some of that global state was lost in
|
577
|
+
`ActionController::Live` controllers.
|
470
578
|
|
471
|
-
|
579
|
+
*Jean Boussier*
|
472
580
|
|
473
|
-
|
581
|
+
* Fix setting `trailing_slash: true` in route definition.
|
474
582
|
|
475
|
-
|
476
|
-
|
583
|
+
```ruby
|
584
|
+
get '/test' => "test#index", as: :test, trailing_slash: true
|
477
585
|
|
478
|
-
|
586
|
+
test_path() # => "/test/"
|
587
|
+
```
|
588
|
+
|
589
|
+
*Jean Boussier*
|
590
|
+
|
591
|
+
* Make `Session#merge!` stringify keys.
|
592
|
+
|
593
|
+
Previously `Session#update` would, but `merge!` wouldn't.
|
594
|
+
|
595
|
+
*Drew Bragg*
|
596
|
+
|
597
|
+
* Add `:unsafe_hashes` mapping for `content_security_policy`
|
598
|
+
|
599
|
+
```ruby
|
600
|
+
# Before
|
601
|
+
policy.script_src :strict_dynamic, "'unsafe-hashes'", "'sha256-rRMdkshZyJlCmDX27XnL7g3zXaxv7ei6Sg+yt4R3svU='"
|
602
|
+
|
603
|
+
# After
|
604
|
+
policy.script_src :strict_dynamic, :unsafe_hashes, "'sha256-rRMdkshZyJlCmDX27XnL7g3zXaxv7ei6Sg+yt4R3svU='"
|
605
|
+
```
|
479
606
|
|
607
|
+
*Igor Morozov*
|
480
608
|
|
481
|
-
Please check [
|
609
|
+
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/actionpack/CHANGELOG.md) for previous changes.
|