Development of Rails 7.2 starts now

🎉
This commit is contained in:
Rafael Mendonça França 2023-09-27 03:59:11 +00:00
parent e57a936879
commit fb6c6007d0
No known key found for this signature in database
GPG Key ID: FC23B6D0F1EEE948
58 changed files with 303 additions and 6449 deletions

View File

@ -20,70 +20,70 @@ GIT
PATH
remote: .
specs:
actioncable (7.1.0.rc1)
actionpack (= 7.1.0.rc1)
activesupport (= 7.1.0.rc1)
actioncable (7.2.0.alpha)
actionpack (= 7.2.0.alpha)
activesupport (= 7.2.0.alpha)
nio4r (~> 2.0)
websocket-driver (>= 0.6.1)
zeitwerk (~> 2.6)
actionmailbox (7.1.0.rc1)
actionpack (= 7.1.0.rc1)
activejob (= 7.1.0.rc1)
activerecord (= 7.1.0.rc1)
activestorage (= 7.1.0.rc1)
activesupport (= 7.1.0.rc1)
actionmailbox (7.2.0.alpha)
actionpack (= 7.2.0.alpha)
activejob (= 7.2.0.alpha)
activerecord (= 7.2.0.alpha)
activestorage (= 7.2.0.alpha)
activesupport (= 7.2.0.alpha)
mail (>= 2.7.1)
net-imap
net-pop
net-smtp
actionmailer (7.1.0.rc1)
actionpack (= 7.1.0.rc1)
actionview (= 7.1.0.rc1)
activejob (= 7.1.0.rc1)
activesupport (= 7.1.0.rc1)
actionmailer (7.2.0.alpha)
actionpack (= 7.2.0.alpha)
actionview (= 7.2.0.alpha)
activejob (= 7.2.0.alpha)
activesupport (= 7.2.0.alpha)
mail (~> 2.5, >= 2.5.4)
net-imap
net-pop
net-smtp
rails-dom-testing (~> 2.2)
actionpack (7.1.0.rc1)
actionview (= 7.1.0.rc1)
activesupport (= 7.1.0.rc1)
actionpack (7.2.0.alpha)
actionview (= 7.2.0.alpha)
activesupport (= 7.2.0.alpha)
nokogiri (>= 1.8.5)
rack (>= 2.2.4)
rack-session (>= 1.0.1)
rack-test (>= 0.6.3)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
actiontext (7.1.0.rc1)
actionpack (= 7.1.0.rc1)
activerecord (= 7.1.0.rc1)
activestorage (= 7.1.0.rc1)
activesupport (= 7.1.0.rc1)
actiontext (7.2.0.alpha)
actionpack (= 7.2.0.alpha)
activerecord (= 7.2.0.alpha)
activestorage (= 7.2.0.alpha)
activesupport (= 7.2.0.alpha)
globalid (>= 0.6.0)
nokogiri (>= 1.8.5)
actionview (7.1.0.rc1)
activesupport (= 7.1.0.rc1)
actionview (7.2.0.alpha)
activesupport (= 7.2.0.alpha)
builder (~> 3.1)
erubi (~> 1.11)
rails-dom-testing (~> 2.2)
rails-html-sanitizer (~> 1.6)
activejob (7.1.0.rc1)
activesupport (= 7.1.0.rc1)
activejob (7.2.0.alpha)
activesupport (= 7.2.0.alpha)
globalid (>= 0.3.6)
activemodel (7.1.0.rc1)
activesupport (= 7.1.0.rc1)
activerecord (7.1.0.rc1)
activemodel (= 7.1.0.rc1)
activesupport (= 7.1.0.rc1)
activemodel (7.2.0.alpha)
activesupport (= 7.2.0.alpha)
activerecord (7.2.0.alpha)
activemodel (= 7.2.0.alpha)
activesupport (= 7.2.0.alpha)
timeout (>= 0.4.0)
activestorage (7.1.0.rc1)
actionpack (= 7.1.0.rc1)
activejob (= 7.1.0.rc1)
activerecord (= 7.1.0.rc1)
activesupport (= 7.1.0.rc1)
activestorage (7.2.0.alpha)
actionpack (= 7.2.0.alpha)
activejob (= 7.2.0.alpha)
activerecord (= 7.2.0.alpha)
activesupport (= 7.2.0.alpha)
marcel (~> 1.0)
activesupport (7.1.0.rc1)
activesupport (7.2.0.alpha)
base64
bigdecimal
concurrent-ruby (~> 1.0, >= 1.0.2)
@ -93,23 +93,23 @@ PATH
minitest (>= 5.1)
mutex_m
tzinfo (~> 2.0)
rails (7.1.0.rc1)
actioncable (= 7.1.0.rc1)
actionmailbox (= 7.1.0.rc1)
actionmailer (= 7.1.0.rc1)
actionpack (= 7.1.0.rc1)
actiontext (= 7.1.0.rc1)
actionview (= 7.1.0.rc1)
activejob (= 7.1.0.rc1)
activemodel (= 7.1.0.rc1)
activerecord (= 7.1.0.rc1)
activestorage (= 7.1.0.rc1)
activesupport (= 7.1.0.rc1)
rails (7.2.0.alpha)
actioncable (= 7.2.0.alpha)
actionmailbox (= 7.2.0.alpha)
actionmailer (= 7.2.0.alpha)
actionpack (= 7.2.0.alpha)
actiontext (= 7.2.0.alpha)
actionview (= 7.2.0.alpha)
activejob (= 7.2.0.alpha)
activemodel (= 7.2.0.alpha)
activerecord (= 7.2.0.alpha)
activestorage (= 7.2.0.alpha)
activesupport (= 7.2.0.alpha)
bundler (>= 1.15.0)
railties (= 7.1.0.rc1)
railties (7.1.0.rc1)
actionpack (= 7.1.0.rc1)
activesupport (= 7.1.0.rc1)
railties (= 7.2.0.alpha)
railties (7.2.0.alpha)
actionpack (= 7.2.0.alpha)
activesupport (= 7.2.0.alpha)
irb
rackup (>= 1.0.0)
rake (>= 12.2)
@ -557,7 +557,7 @@ GEM
websocket-extensions (0.1.5)
xpath (3.2.0)
nokogiri (~> 1.8)
zeitwerk (2.6.11)
zeitwerk (2.6.12)
PLATFORMS
ruby

View File

@ -1 +1 @@
7.1.0.rc1
7.2.0.alpha

View File

@ -1,106 +1,2 @@
## Rails 7.1.0.rc1 (September 27, 2023) ##
* No changes.
## Rails 7.1.0.beta1 (September 13, 2023) ##
* Add a `@server` instance variable referencing the `ActionCable.server`
singleton to `ActionCable::Channel::ConnectionStub`
This lets us delegate the `pubsub` and `config` method calls
to the server. This fixes `NoMethodError` errors when testing
channel logic that call `pubsub` (e.g. `stop_stream_for`).
*Julian Foo*
* Added `health_check_path` and `health_check_application` config to
mount a given health check rack app on a given path.
Useful when mounting Action Cable standalone.
*Joé Dupuis*
* Introduce the `capture_broadcasts` test helper.
Returns all messages broadcast in a block.
```ruby
messages = capture_broadcasts("test") do
ActionCable.server.broadcast "test", { message: "one" }
ActionCable.server.broadcast "test", { message: "two" }
end
assert_equal 2, messages.length
assert_equal({ "message" => "one" }, messages.first)
assert_equal({ "message" => "two" }, messages.last)
```
*Alex Ghiculescu*
* Display broadcasted messages on error message when using `assert_broadcast_on`
*Stéphane Robino*
* The Action Cable client now supports subprotocols to allow passing arbitrary data
to the server.
```js
const consumer = ActionCable.createConsumer()
consumer.addSubProtocol('custom-protocol')
consumer.connect()
```
See also:
* https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API/Writing_WebSocket_servers#subprotocols
*Guillaume Hain*
* Redis pub/sub adapter now automatically reconnects when Redis connection is lost.
*Vladimir Dementyev*
* The `connected()` callback can now take a `{reconnected}` parameter to differentiate
connections from reconnections.
```js
import consumer from "./consumer"
consumer.subscriptions.create("ExampleChannel", {
connected({reconnected}) {
if (reconnected) {
...
} else {
...
}
}
})
```
*Mansa Keïta*
* The Redis adapter is now compatible with redis-rb 5.0
Compatibility with redis-rb 3.x was dropped.
*Jean Boussier*
* The Action Cable server is now mounted with `anchor: true`.
This means that routes that also start with `/cable` will no longer clash with Action Cable.
*Alex Ghiculescu*
* `ActionCable.server.remote_connections.where(...).disconnect` now sends `disconnect` message
before closing the connection with the reconnection strategy specified (defaults to `true`).
*Vladimir Dementyev*
* Added command callbacks to `ActionCable::Connection::Base`.
Now you can define `before_command`, `after_command`, and `around_command` to be invoked before, after or around any command received by a client respectively.
*Vladimir Dementyev*
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/actioncable/CHANGELOG.md) for previous changes.
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actioncable/CHANGELOG.md) for previous changes.

View File

@ -8,9 +8,9 @@ module ActionCable
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -1,6 +1,6 @@
{
"name": "@rails/actioncable",
"version": "7.1.0-rc1",
"version": "7.2.0-alpha",
"description": "WebSocket framework for Ruby on Rails.",
"module": "app/assets/javascripts/actioncable.esm.js",
"main": "app/assets/javascripts/actioncable.js",

View File

@ -1,26 +1,2 @@
## Rails 7.1.0.rc1 (September 27, 2023) ##
* No changes.
## Rails 7.1.0.beta1 (September 13, 2023) ##
* Added `bounce_now_with` to send the bounce email without going through a mailer queue.
*Ronan Limon Duparcmeur*
* Support configured primary key types in generated migrations.
*Nishiki Liu*
* Fixed ingress controllers' ability to accept emails that contain no UTF-8 encoded parts.
Fixes #46297.
*Jan Honza Sterba*
* Add X-Forwarded-To addresses to recipients.
*Andrew Stewart*
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/actionmailbox/CHANGELOG.md) for previous changes.
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actionmailbox/CHANGELOG.md) for previous changes.

View File

@ -8,9 +8,9 @@ module ActionMailbox
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.1].define(version: 2018_02_12_164506) do
ActiveRecord::Schema[7.2].define(version: 2018_02_12_164506) do
create_table "action_mailbox_inbound_emails", force: :cascade do |t|
t.integer "status", default: 0, null: false
t.string "message_id", null: false

View File

@ -1,133 +1,2 @@
## Rails 7.1.0.rc1 (September 27, 2023) ##
* Introduce `ActionMailer::FormBuilder`
Use the `default_form_builder` method in mailers to set the default form builder
for templates rendered by that mailer. Matches the behaviour in Action Controller.
*Alex Ghiculescu*
## Rails 7.1.0.beta1 (September 13, 2023) ##
* Mailers are listed in alphabetical order on the mailer preview page now.
*Martin Spickermann*
* Deprecate passing params to `assert_enqueued_email_with` via the `:args`
kwarg. `assert_enqueued_email_with` now supports a `:params` kwarg, so use
that to pass params:
```ruby
# BEFORE
assert_enqueued_email_with MyMailer, :my_method, args: { my_param: "value" }
# AFTER
assert_enqueued_email_with MyMailer, :my_method, params: { my_param: "value" }
```
To specify named mailer args as a Hash, wrap the Hash in an array:
```ruby
assert_enqueued_email_with MyMailer, :my_method, args: [{ my_arg: "value" }]
# OR
assert_enqueued_email_with MyMailer, :my_method, args: [my_arg: "value"]
```
*Jonathan Hefner*
* Accept procs for args and params in `assert_enqueued_email_with`
```ruby
assert_enqueued_email_with DeliveryJob, params: -> p { p[:token] =~ /\w+/ } do
UserMailer.with(token: user.generate_token).email_verification.deliver_later
end
```
*Max Chernyak*
* Added `*_deliver` callbacks to `ActionMailer::Base` that wrap mail message delivery.
Example:
```ruby
class EventsMailer < ApplicationMailer
after_deliver do
User.find_by(email: message.to.first).update(email_provider_id: message.message_id, emailed_at: Time.current)
end
end
```
*Ben Sheldon*
* Added `deliver_enqueued_emails` to `ActionMailer::TestHelper`. This method
delivers all enqueued email jobs.
Example:
```ruby
def test_deliver_enqueued_emails
deliver_enqueued_emails do
ContactMailer.welcome.deliver_later
end
assert_emails 1
end
```
*Andrew Novoselac*
* The `deliver_later_queue_name` used by the default mailer job can now be
configured on a per-mailer basis. Previously this was only configurable
for all mailers via `ActionMailer::Base`.
Example:
```ruby
class EventsMailer < ApplicationMailer
self.deliver_later_queue_name = :throttled_mailer
end
```
*Jeffrey Hardy*
* Email previews now include an expandable section to show all headers.
Headers like `Message-ID` for threading or email service provider specific
features like analytics tags or account metadata can now be viewed directly
in the mailer preview.
*Matt Swanson*
* Default `ActionMailer::Parameterized#params` to an empty `Hash`
*Sean Doyle*
* Introduce the `capture_emails` test helper.
Returns all emails that are sent in a block.
```ruby
def test_emails
emails = capture_emails do
ContactMailer.welcome.deliver_now
ContactMailer.welcome.deliver_later
end
assert_email "Hi there", emails.first.subject
end
```
*Alex Ghiculescu*
* Added ability to download `.eml` file for the email preview.
*Igor Kasyanchuk*
* Support multiple preview paths for mailers.
Option `config.action_mailer.preview_path` is deprecated in favor of
`config.action_mailer.preview_paths`. Appending paths to this configuration option
will cause those paths to be used in the search for mailer previews.
*fatkodima*
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/actionmailer/CHANGELOG.md) for previous changes.
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actionmailer/CHANGELOG.md) for previous changes.

View File

@ -8,9 +8,9 @@ module ActionMailer
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -1,532 +1,2 @@
## Rails 7.1.0.rc1 (September 27, 2023) ##
* Add support for `#deep_merge` and `#deep_merge!` to
`ActionController::Parameters`.
*Sean Doyle*
## Rails 7.1.0.beta1 (September 13, 2023) ##
* `AbstractController::Translation.raise_on_missing_translations` removed
This was a private API, and has been removed in favour of a more broadly applicable
`config.i18n.raise_on_missing_translations`. See the upgrading guide for more information.
*Alex Ghiculescu*
* Add `ActionController::Parameters#extract_value` method to allow extracting serialized values from params
```ruby
params = ActionController::Parameters.new(id: "1_123", tags: "ruby,rails")
params.extract_value(:id) # => ["1", "123"]
params.extract_value(:tags, delimiter: ",") # => ["ruby", "rails"]
```
*Nikita Vasilevsky*
* Parse JSON `response.parsed_body` with `ActiveSupport::HashWithIndifferentAccess`
Integrate with Minitest's new `assert_pattern` by parsing the JSON contents
of `response.parsed_body` with `ActiveSupport::HashWithIndifferentAccess`, so
that it's pattern-matching compatible.
*Sean Doyle*
* Add support for Playwright as a driver for system tests.
*Yuki Nishijima*
* Fix `HostAuthorization` potentially displaying the value of the
X_FORWARDED_HOST header when the HTTP_HOST header is being blocked.
*Hartley McGuire*, *Daniel Schlosser*
* Rename `fixture_file_upload` method to `file_fixture_upload`
Declare an alias to preserve the backwards compatibility of `fixture_file_upload`
*Sean Doyle*
* `ActionDispatch::SystemTesting::TestHelpers::ScreenshotHelper` saves the screenshot path in test metadata on failure.
*Matija Čupić*
* `config.dom_testing_default_html_version` controls the HTML parser used by
`ActionDispatch::Assertions#html_document`.
The Rails 7.1 default configuration opts into the HTML5 parser when it is supported, to better
represent what the DOM would be in a browser user agent. Previously this test helper always used
Nokogiri's HTML4 parser.
*Mike Dalessio*
* The `with_routing` helper can now be called at the class level. When called at the class level, the routes will
be setup before each test, and reset after every test. For example:
```ruby
class RoutingTest < ActionController::TestCase
with_routing do |routes|
routes.draw do
resources :articles
resources :authors
end
end
def test_articles_route
assert_routing("/articles", controller: "articles", action: "index")
end
def test_authors_route
assert_routing("/authors", controller: "authors", action: "index")
end
end
```
*Andrew Novoselac*
* The `Mime::Type` now supports handling types with parameters and correctly handles quotes.
When parsing the accept header, the parameters before the q-parameter are kept and if a matching mime-type exists it is used.
To keep the current functionality, a fallback is created to look for the media-type without the parameters.
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/).
*Nicolas Erni*
* The url_for helpers now support a new option called `path_params`.
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.
Given the following router...
```ruby
Rails.application.routes.draw do
scope ":account_id" do
get "dashboard" => "pages#dashboard", as: :dashboard
get "search/:term" => "search#search", as: :search
end
delete "signout" => "sessions#destroy", as: :signout
end
```
And given the following `ApplicationController`
```ruby
class ApplicationController < ActionController::Base
def default_url_options
{ path_params: { account_id: "foo" } }
end
end
```
The standard url_for helper and friends will now behave as follows:
```ruby
dashboard_path # => /foo/dashboard
dashboard_path(account_id: "bar") # => /bar/dashboard
signout_path # => /signout
signout_path(account_id: "bar") # => /signout?account_id=bar
signout_path(account_id: "bar", path_params: { account_id: "baz" }) # => /signout?account_id=bar
search_path("quin") # => /foo/search/quin
```
*Jason Meller, Jeremy Beker*
* Change `action_dispatch.show_exceptions` to one of `:all`, `:rescuable`, or
`:none`. `:all` and `:none` behave the same as the previous `true` and
`false` respectively. The new `:rescuable` option will only show exceptions
that can be rescued (e.g. `ActiveRecord::RecordNotFound`). `:rescuable` is
now the default for the test environment.
*Jon Dufresne*
* `config.action_dispatch.cookies_serializer` now accepts `:message_pack` and
`:message_pack_allow_marshal` as serializers. These serializers require the
[`msgpack` gem](https://rubygems.org/gems/msgpack) (>= 1.7.0).
The Message Pack format can provide improved performance and smaller payload
sizes. It also supports roundtripping some Ruby types that are not supported
by JSON. For example:
```ruby
cookies.encrypted[:foo] = [{ a: 1 }, { b: 2 }.with_indifferent_access, 1.to_d, Time.at(0, 123)]
# BEFORE with config.action_dispatch.cookies_serializer = :json
cookies.encrypted[:foo]
# => [{"a"=>1}, {"b"=>2}, "1.0", "1969-12-31T18:00:00.000-06:00"]
cookies.encrypted[:foo].map(&:class)
# => [Hash, Hash, String, String]
# AFTER with config.action_dispatch.cookies_serializer = :message_pack
cookies.encrypted[:foo]
# => [{:a=>1}, {"b"=>2}, 0.1e1, 1969-12-31 18:00:00.000123 -0600]
cookies.encrypted[:foo].map(&:class)
# => [Hash, ActiveSupport::HashWithIndifferentAccess, BigDecimal, Time]
```
The `:message_pack` serializer can fall back to deserializing with
`ActiveSupport::JSON` when necessary, and the `:message_pack_allow_marshal`
serializer can fall back to deserializing with `Marshal` as well as
`ActiveSupport::JSON`. Additionally, the `:marshal`, `:json`, and
`:json_allow_marshal` (AKA `:hybrid`) serializers can now fall back to
deserializing with `ActiveSupport::MessagePack` when necessary. These
behaviors ensure old cookies can still be read so that migration is easier.
*Jonathan Hefner*
* Remove leading dot from domains on cookies set with `domain: :all`, to meet RFC6265 requirements
*Gareth Adams*
* Include source location in routes extended view.
```bash
$ bin/rails routes --expanded
...
--[ Route 14 ]----------
Prefix | new_gist
Verb | GET
URI | /gist(.:format)
Controller#Action | gists/gists#new
Source Location | config/routes/gist.rb:3
```
*Luan Vieira, John Hawthorn and Daniel Colson*
* Add `without` as an alias of `except` on `ActiveController::Parameters`.
*Hidde-Jan Jongsma*
* Expand search field on `rails/info/routes` to also search **route name**, **http verb** and **controller#action**.
*Jason Kotchoff*
* Remove deprecated `poltergeist` and `webkit` (capybara-webkit) driver registration for system testing.
*Rafael Mendonça França*
* Remove deprecated ability to assign a single value to `config.action_dispatch.trusted_proxies`.
*Rafael Mendonça França*
* Deprecate `config.action_dispatch.return_only_request_media_type_on_content_type`.
*Rafael Mendonça França*
* Remove deprecated behavior on `Request#content_type`.
*Rafael Mendonça França*
* Change `ActionController::Instrumentation` to pass `filtered_path` instead of `fullpath` in the event payload to filter sensitive query params
```ruby
get "/posts?password=test"
request.fullpath # => "/posts?password=test"
request.filtered_path # => "/posts?password=[FILTERED]"
```
*Ritikesh G*
* Deprecate `AbstractController::Helpers::MissingHelperError`
*Hartley McGuire*
* Change `ActionDispatch::Testing::TestResponse#parsed_body` to parse HTML as
a Nokogiri document
```ruby
get "/posts"
response.content_type # => "text/html; charset=utf-8"
response.parsed_body.class # => Nokogiri::HTML5::Document
response.parsed_body.to_html # => "<!DOCTYPE html>\n<html>\n..."
```
*Sean Doyle*
* Deprecate `ActionDispatch::IllegalStateError`.
*Samuel Williams*
* Add HTTP::Request#route_uri_pattern that returns URI pattern of matched route.
*Joel Hawksley*, *Kate Higa*
* Add `ActionDispatch::AssumeSSL` middleware that can be turned on via `config.assume_ssl`.
It makes the application believe that all requests are arriving over SSL. This is useful
when proxying through a load balancer that terminates SSL, the forwarded request will appear
as though its HTTP instead of HTTPS to the application. This makes redirects and cookie
security target HTTP instead of HTTPS. This middleware makes the server assume that the
proxy already terminated SSL, and that the request really is HTTPS.
*DHH*
* Only use HostAuthorization middleware if `config.hosts` is not empty
*Hartley McGuire*
* Allow raising an error when a callback's only/unless symbols aren't existing methods.
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.
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_pack.raise_on_missing_callback_actions` to `false` in your application configuration. See #43487 for more details.
*Jess Bees*
* Allow cookie options[:domain] to accept a proc to set the cookie domain on a more flexible per-request basis
*RobL*
* When a host is not specified for an `ActionController::Renderer`'s env,
the host and related options will now be derived from the routes'
`default_url_options` and `ActionDispatch::Http::URL.secure_protocol`.
This means that for an application with a configuration like:
```ruby
Rails.application.default_url_options = { host: "rubyonrails.org" }
Rails.application.config.force_ssl = true
```
rendering a URL like:
```ruby
ApplicationController.renderer.render inline: "<%= blog_url %>"
```
will now return `"https://rubyonrails.org/blog"` instead of
`"http://example.org/blog"`.
*Jonathan Hefner*
* Add details of cookie name and size to `CookieOverflow` exception.
*Andy Waite*
* Don't double log the `controller`, `action`, or `namespaced_controller` when using `ActiveRecord::QueryLog`
Previously if you set `config.active_record.query_log_tags` to an array that included
`:controller`, `:namespaced_controller`, or `:action`, that item would get logged twice.
This bug has been fixed.
*Alex Ghiculescu*
* Add the following permissions policy directives: `hid`, `idle-detection`, `screen-wake-lock`,
`serial`, `sync-xhr`, `web-share`.
*Guillaume Cabanel*
* The `speaker`, `vibrate`, and `vr` permissions policy directives are now
deprecated.
There is no browser support for these directives, and no plan for browser
support in the future. You can just remove these directives from your
application.
*Jonathan Hefner*
* Added the `:status` option to `assert_redirected_to` to specify the precise
HTTP status of the redirect. Defaults to `:redirect` for backwards
compatibility.
*Jon Dufresne*
* Rescue `JSON::ParserError` in Cookies JSON deserializer to discards marshal dumps:
Without this change, if `action_dispatch.cookies_serializer` is set to `:json` and
the app tries to read a `:marshal` serialized cookie, it would error out which wouldn't
clear the cookie and force app users to manually clear it in their browser.
(See #45127 for original bug discussion)
*Nathan Bardoux*
* Add `HTTP_REFERER` when following redirects on integration tests
This makes `follow_redirect!` a closer simulation of what happens in a real browser
*Felipe Sateler*
* Added `exclude?` method to `ActionController::Parameters`.
*Ian Neubert*
* Rescue `EOFError` exception from `rack` on a multipart request.
*Nikita Vasilevsky*
* Log redirects from routes the same way as redirects from controllers.
*Dennis Paagman*
* Prevent `ActionDispatch::ServerTiming` from overwriting existing values in `Server-Timing`.
Previously, if another middleware down the chain set `Server-Timing` header,
it would overwritten by `ActionDispatch::ServerTiming`.
*Jakub Malinowski*
* Allow opting out of the `SameSite` cookie attribute when setting a cookie.
You can opt out of `SameSite` by passing `same_site: nil`.
`cookies[:foo] = { value: "bar", same_site: nil }`
Previously, this incorrectly set the `SameSite` attribute to the value of the `cookies_same_site_protection` setting.
*Alex Ghiculescu*
* Allow using `helper_method`s in `content_security_policy` and `permissions_policy`
Previously you could access basic helpers (defined in helper modules), but not
helper methods defined using `helper_method`. Now you can use either.
```ruby
content_security_policy do |p|
p.default_src "https://example.com"
p.script_src "https://example.com" if helpers.script_csp?
end
```
*Alex Ghiculescu*
* Reimplement `ActionController::Parameters#has_value?` and `#value?` to avoid parameters and hashes comparison.
Deprecated equality between parameters and hashes is going to be removed in Rails 7.2.
The new implementation takes care of conversions.
*Seva Stefkin*
* Allow only String and Symbol keys in `ActionController::Parameters`.
Raise `ActionController::InvalidParameterKey` when initializing Parameters
with keys that aren't strings or symbols.
*Seva Stefkin*
* Add the ability to use custom logic for storing and retrieving CSRF tokens.
By default, the token will be stored in the session. Custom classes can be
defined to specify arbitrary behavior, but the ability to store them in
encrypted cookies is built in.
*Andrew Kowpak*
* Make ActionController::Parameters#values cast nested hashes into parameters.
*Gannon McGibbon*
* Introduce `html:` and `screenshot:` kwargs for system test screenshot helper
Use these as an alternative to the already-available environment variables.
For example, this will display a screenshot in iTerm, save the HTML, and output
its path.
```ruby
take_screenshot(html: true, screenshot: "inline")
```
*Alex Ghiculescu*
* Allow `ActionController::Parameters#to_h` to receive a block.
*Bob Farrell*
* Allow relative redirects when `raise_on_open_redirects` is enabled
*Tom Hughes*
* Allow Content Security Policy DSL to generate for API responses.
*Tim Wade*
* Fix `authenticate_with_http_basic` to allow for missing password.
Before Rails 7.0 it was possible to handle basic authentication with only a username.
```ruby
authenticate_with_http_basic do |token, _|
ApiClient.authenticate(token)
end
```
This ability is restored.
*Jean Boussier*
* Fix `content_security_policy` returning invalid directives.
Directives such as `self`, `unsafe-eval` and few others were not
single quoted when the directive was the result of calling a lambda
returning an array.
```ruby
content_security_policy do |policy|
policy.frame_ancestors lambda { [:self, "https://example.com"] }
end
```
With this fix the policy generated from above will now be valid.
*Edouard Chin*
* Fix `skip_forgery_protection` to run without raising an error if forgery
protection has not been enabled / `verify_authenticity_token` is not a
defined callback.
This fix prevents the Rails 7.0 Welcome Page (`/`) from raising an
`ArgumentError` if `default_protect_from_forgery` is false.
*Brad Trick*
* Make `redirect_to` return an empty response body.
Application controllers that wish to add a response body after calling
`redirect_to` can continue to do so.
*Jon Dufresne*
* Use non-capturing group for subdomain matching in `ActionDispatch::HostAuthorization`
Since we do nothing with the captured subdomain group, we can use a non-capturing group instead.
*Sam Bostock*
* Fix `ActionController::Live` to copy the IsolatedExecutionState in the ephemeral thread.
Since its inception `ActionController::Live` has been copying thread local variables
to keep things such as `CurrentAttributes` set from middlewares working in the controller action.
With the introduction of `IsolatedExecutionState` in 7.0, some of that global state was lost in
`ActionController::Live` controllers.
*Jean Boussier*
* Fix setting `trailing_slash: true` in route definition.
```ruby
get '/test' => "test#index", as: :test, trailing_slash: true
test_path() # => "/test/"
```
*Jean Boussier*
* Make `Session#merge!` stringify keys.
Previously `Session#update` would, but `merge!` wouldn't.
*Drew Bragg*
* Add `:unsafe_hashes` mapping for `content_security_policy`
```ruby
# Before
policy.script_src :strict_dynamic, "'unsafe-hashes'", "'sha256-rRMdkshZyJlCmDX27XnL7g3zXaxv7ei6Sg+yt4R3svU='"
# After
policy.script_src :strict_dynamic, :unsafe_hashes, "'sha256-rRMdkshZyJlCmDX27XnL7g3zXaxv7ei6Sg+yt4R3svU='"
```
*Igor Morozov*
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/actionpack/CHANGELOG.md) for previous changes.
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actionpack/CHANGELOG.md) for previous changes.

View File

@ -8,9 +8,9 @@ module ActionPack
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -1,63 +1,2 @@
## Rails 7.1.0.rc1 (September 27, 2023) ##
* No changes.
## Rails 7.1.0.beta1 (September 13, 2023) ##
* Use `Rails::HTML5::SafeListSanitizer` by default in the Rails 7.1 configuration if it is
supported.
Action Text's sanitizer can be configured by setting
`config.action_text.sanitizer_vendor`. Supported values are `Rails::HTML4::Sanitizer` or
`Rails::HTML5::Sanitizer`.
The Rails 7.1 configuration will set this to `Rails::HTML5::Sanitizer` when it is supported, and
fall back to `Rails::HTML4::Sanitizer`. Previous configurations default to
`Rails::HTML4::Sanitizer`.
As a result of this change, the defaults for `ActionText::ContentHelper.allowed_tags` and
`.allowed_attributes` are applied at runtime, so the value of these attributes is now 'nil'
unless set by the application. You may call `sanitizer_allowed_tags` or
`sanitizer_allowed_attributes` to inspect the tags and attributes being allowed by the
sanitizer.
*Mike Dalessio*
* Attachables now can override default attachment missing template.
When rendering Action Text attachments where the underlying attachable model has
been removed, a fallback template is used. You now can override this template on
a per-model basis. For example, you could render a placeholder image for a file
attachment or the text "Deleted User" for a User attachment.
*Matt Swanson*, *Joel Drapper*
* Update bundled Trix version from `1.3.1` to `2.0.4`.
*Sarah Ridge*, *Sean Doyle*
* Apply `field_error_proc` to `rich_text_area` form fields.
*Kaíque Kandy Koga*
* Action Text attachment URLs rendered in a background job (a la Turbo
Streams) now use `Rails.application.default_url_options` and
`Rails.application.config.force_ssl` instead of `http://example.org`.
*Jonathan Hefner*
* Support `strict_loading:` option for `has_rich_text` declaration
*Sean Doyle*
* Update ContentAttachment so that it can encapsulate arbitrary HTML content in a document.
*Jamis Buck*
* Fix an issue that caused the content layout to render multiple times when a
rich_text field was updated.
*Jacob Herrington*
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/actiontext/CHANGELOG.md) for previous changes.
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actiontext/CHANGELOG.md) for previous changes.

View File

@ -8,9 +8,9 @@ module ActionText
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -1,6 +1,6 @@
{
"name": "@rails/actiontext",
"version": "7.1.0-rc1",
"version": "7.2.0-alpha",
"description": "Edit and display rich text in Rails applications",
"main": "app/assets/javascripts/actiontext.js",
"type": "module",

View File

@ -10,7 +10,7 @@
#
# It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema[7.1].define(version: 2019_03_17_200724) do
ActiveRecord::Schema[7.2].define(version: 2019_03_17_200724) do
create_table "action_text_rich_texts", force: :cascade do |t|
t.string "name", null: false
t.text "body"

View File

@ -1,392 +1,2 @@
## Rails 7.1.0.rc1 (September 27, 2023) ##
* Introduce `ActionView::TestCase.register_parser`
```ruby
register_parser :rss, -> rendered { RSS::Parser.parse(rendered) }
test "renders RSS" do
article = Article.create!(title: "Hello, world")
render formats: :rss, partial: article
assert_equal "Hello, world", rendered.rss.items.last.title
end
```
By default, register parsers for `:html` and `:json`.
*Sean Doyle*
## Rails 7.1.0.beta1 (September 13, 2023) ##
* Fix `simple_format` with blank `wrapper_tag` option returns plain html tag
By default `simple_format` method returns the text wrapped with `<p>`. But if we explicitly specify
the `wrapper_tag: nil` in the options, it returns the text wrapped with `<></>` tag.
Before:
```ruby
simple_format("Hello World", {}, { wrapper_tag: nil })
# <>Hello World</>
```
After:
```ruby
simple_format("Hello World", {}, { wrapper_tag: nil })
# <p>Hello World</p>
```
*Akhil G Krishnan*, *Junichi Ito*
* Don't double-encode nested `field_id` and `field_name` index values
Pass `index: @options` as a default keyword argument to `field_id` and
`field_name` view helper methods.
*Sean Doyle*
* Allow opting in/out of `Link preload` headers when calling `stylesheet_link_tag` or `javascript_include_tag`
```ruby
# will exclude header, even if setting is enabled:
javascript_include_tag("http://example.com/all.js", preload_links_header: false)
# will include header, even if setting is disabled:
stylesheet_link_tag("http://example.com/all.js", preload_links_header: true)
```
*Alex Ghiculescu*
* Stop generating `Link preload` headers once it has reached 1KB.
Some proxies have trouble handling large headers, but more importantly preload links
have diminishing returns so it's preferable not to go overboard with them.
If tighter control is needed, it's recommended to disable automatic generation of preloads
and to generate them manually from the controller or from a middleware.
*Jean Boussier*
* `simple_format` helper now handles a `:sanitize_options` - any extra options you want appending to the sanitize.
Before:
```ruby
simple_format("<a target=\"_blank\" href=\"http://example.com\">Continue</a>")
# => "<p><a href=\"http://example.com\">Continue</a></p>"
```
After:
```ruby
simple_format("<a target=\"_blank\" href=\"http://example.com\">Continue</a>", {}, { sanitize_options: { attributes: %w[target href] } })
# => "<p><a target=\"_blank\" href=\"http://example.com\">Continue</a></p>"
```
*Andrei Andriichuk*
* Add support for HTML5 standards-compliant sanitizers, and default to `Rails::HTML5::Sanitizer`
in the Rails 7.1 configuration if it is supported.
Action View's HTML sanitizers can be configured by setting
`config.action_view.sanitizer_vendor`. Supported values are `Rails::HTML4::Sanitizer` or
`Rails::HTML5::Sanitizer`.
The Rails 7.1 configuration will set this to `Rails::HTML5::Sanitizer` when it is supported, and
fall back to `Rails::HTML4::Sanitizer`. Previous configurations default to
`Rails::HTML4::Sanitizer`.
*Mike Dalessio*
* `config.dom_testing_default_html_version` controls the HTML parser used by
`ActionView::TestCase#document_root_element`, which creates the DOM used by the assertions in
Rails::Dom::Testing.
The Rails 7.1 default configuration opts into the HTML5 parser when it is supported, to better
represent what the DOM would be in a browser user agent. Previously this test helper always used
Nokogiri's HTML4 parser.
*Mike Dalessio*
* Add support for the HTML picture tag. It supports passing a String, an Array or a Block.
Supports passing properties directly to the img tag via the `:image` key.
Since the picture tag requires an img tag, the last element you provide will be used for the img tag.
For complete control over the picture tag, a block can be passed, which will populate the contents of the tag accordingly.
Can be used like this for a single source:
```erb
<%= picture_tag("picture.webp") %>
```
which will generate the following:
```html
<picture>
<img src="/images/picture.webp" />
</picture>
```
For multiple sources:
```erb
<%= picture_tag("picture.webp", "picture.png", :class => "mt-2", :image => { alt: "Image", class: "responsive-img" }) %>
```
will generate:
```html
<picture class="mt-2">
<source srcset="/images/picture.webp" />
<source srcset="/images/picture.png" />
<img alt="Image" class="responsive-img" src="/images/picture.png" />
</picture>
```
Full control via a block:
```erb
<%= picture_tag(:class => "my-class") do %>
<%= tag(:source, :srcset => image_path("picture.webp")) %>
<%= tag(:source, :srcset => image_path("picture.png")) %>
<%= image_tag("picture.png", :alt => "Image") %>
<% end %>
```
will generate:
```html
<picture class="my-class">
<source srcset="/images/picture.webp" />
<source srcset="/images/picture.png" />
<img alt="Image" src="/images/picture.png" />
</picture>
```
*Juan Pablo Balarini*
* Remove deprecated support to passing instance variables as locals to partials.
*Rafael Mendonça França*
* Remove deprecated constant `ActionView::Path`.
*Rafael Mendonça França*
* Guard `token_list` calls from escaping HTML too often
*Sean Doyle*
* `select` can now be called with a single hash containing options and some HTML options
Previously this would not work as expected:
```erb
<%= select :post, :author, authors, required: true %>
```
Instead you needed to do this:
```erb
<%= select :post, :author, authors, {}, required: true %>
```
Now, either form is accepted, for the following HTML attributes: `required`, `multiple`, `size`.
*Alex Ghiculescu*
* Datetime form helpers (`time_field`, `date_field`, `datetime_field`, `week_field`, `month_field`) now accept an instance of Time/Date/DateTime as `:value` option.
Before:
```erb
<%= form.datetime_field :written_at, value: Time.current.strftime("%Y-%m-%dT%T") %>
```
After:
```erb
<%= form.datetime_field :written_at, value: Time.current %>
```
*Andrey Samsonov*
* Choices of `select` can optionally contain html attributes as the last element
of the child arrays when using grouped/nested collections
```erb
<%= form.select :foo, [["North America", [["United States","US"],["Canada","CA"]], { disabled: "disabled" }]] %>
# => <select><optgroup label="North America" disabled="disabled"><option value="US">United States</option><option value="CA">Canada</option></optgroup></select>
```
*Chris Gunther*
* `check_box_tag` and `radio_button_tag` now accept `checked` as a keyword argument
This is to make the API more consistent with the `FormHelper` variants. You can now
provide `checked` as a positional or keyword argument:
```erb
= check_box_tag "admin", "1", false
= check_box_tag "admin", "1", checked: false
= radio_button_tag 'favorite_color', 'maroon', false
= radio_button_tag 'favorite_color', 'maroon', checked: false
```
*Alex Ghiculescu*
* Allow passing a class to `dom_id`.
You no longer need to call `new` when passing a class to `dom_id`.
This makes `dom_id` behave like `dom_class` in this regard.
Apart from saving a few keystrokes, it prevents Ruby from needing
to instantiate a whole new object just to generate a string.
Before:
```ruby
dom_id(Post) # => NoMethodError: undefined method `to_key' for Post:Class
```
After:
```ruby
dom_id(Post) # => "new_post"
```
*Goulven Champenois*
* Report `:locals` as part of the data returned by ActionView render instrumentation.
Before:
```ruby
{
identifier: "/Users/adam/projects/notifications/app/views/posts/index.html.erb",
layout: "layouts/application"
}
```
After:
```ruby
{
identifier: "/Users/adam/projects/notifications/app/views/posts/index.html.erb",
layout: "layouts/application",
locals: {foo: "bar"}
}
```
*Aaron Gough*
* Strip `break_sequence` at the end of `word_wrap`.
This fixes a bug where `word_wrap` didn't properly strip off break sequences that had printable characters.
For example, compare the outputs of this template:
```erb
# <%= word_wrap("11 22\n33 44", line_width: 2, break_sequence: "\n# ") %>
```
Before:
```
# 11
# 22
#
# 33
# 44
#
```
After:
```
# 11
# 22
# 33
# 44
```
*Max Chernyak*
* Allow templates to set strict `locals`.
By default, templates will accept any `locals` as keyword arguments. To define what `locals` a template accepts, add a `locals` magic comment:
```erb
<%# locals: (message:) -%>
<%= message %>
```
Default values can also be provided:
```erb
<%# locals: (message: "Hello, world!") -%>
<%= message %>
```
Or `locals` can be disabled entirely:
```erb
<%# locals: () %>
```
*Joel Hawksley*
* Add `include_seconds` option for `datetime_local_field`
This allows to omit seconds part in the input field, by passing `include_seconds: false`
*Wojciech Wnętrzak*
* Guard against `ActionView::Helpers::FormTagHelper#field_name` calls with nil
`object_name` arguments. For example:
```erb
<%= fields do |f| %>
<%= f.field_name :body %>
<% end %>
```
*Sean Doyle*
* Strings returned from `strip_tags` are correctly tagged `html_safe?`
Because these strings contain no HTML elements and the basic entities are escaped, they are safe
to be included as-is as PCDATA in HTML content. Tagging them as html-safe avoids double-escaping
entities when being concatenated to a SafeBuffer during rendering.
Fixes [rails/rails-html-sanitizer#124](https://github.com/rails/rails-html-sanitizer/issues/124)
*Mike Dalessio*
* Move `convert_to_model` call from `form_for` into `form_with`
Now that `form_for` is implemented in terms of `form_with`, remove the
`convert_to_model` call from `form_for`.
*Sean Doyle*
* Fix and add protections for XSS in `ActionView::Helpers` and `ERB::Util`.
Escape dangerous characters in names of tags and names of attributes in the
tag helpers, following the XML specification. Rename the option
`:escape_attributes` to `:escape`, to simplify by applying the option to the
whole tag.
*Álvaro Martín Fraguas*
* Extend audio_tag and video_tag to accept Active Storage attachments.
Now it's possible to write
```ruby
audio_tag(user.audio_file)
video_tag(user.video_file)
```
Instead of
```ruby
audio_tag(polymorphic_path(user.audio_file))
video_tag(polymorphic_path(user.video_file))
```
`image_tag` already supported that, so this follows the same pattern.
*Matheus Richard*
* Ensure models passed to `form_for` attempt to call `to_model`.
*Sean Doyle*
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/actionview/CHANGELOG.md) for previous changes.
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/actionview/CHANGELOG.md) for previous changes.

View File

@ -8,9 +8,9 @@ module ActionView
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -1,6 +1,6 @@
{
"name": "@rails/ujs",
"version": "7.1.0-rc1",
"version": "7.2.0-alpha",
"description": "Ruby on Rails unobtrusive scripting adapter",
"main": "app/assets/javascripts/rails-ujs.js",
"module": "app/assets/javascripts/rails-ujs.esm.js",

View File

@ -1,224 +1,2 @@
## Rails 7.1.0.rc1 (September 27, 2023) ##
* Set `scheduled_at` attribute as a Time object instead of epoch seconds, and serialize and deserialize the value
when enqueued. Assigning a numeric/epoch value to scheduled_at= is deprecated; use a Time object instead.
Deserializes `enqueued_at` as a Time instead of ISO8601 String.
*Ben Sheldon*
* Clarify the backoff strategy for the recommended `:wait` option when retrying jobs
`wait: :exponentially_longer` is waiting polynomially longer, so it is now recommended to use `wait: :polynomially_longer` to keep the same behavior.
*Victor Mours*
## Rails 7.1.0.beta1 (September 13, 2023) ##
* Fix Active Job log message to correctly report a job failed to enqueue
when the adapter raises an `ActiveJob::EnqueueError`.
*Ben Sheldon*
* Add `after_discard` method.
This method lets job authors define a block which will be run when a job is about to be discarded. For example:
```ruby
class AfterDiscardJob < ActiveJob::Base
after_discard do |job, exception|
Rails.logger.info("#{job.class} raised an exception: #{exception}")
end
def perform
raise StandardError
end
end
```
The above job will run the block passed to `after_discard` after the job is discarded. The exception will
still be raised after the block has been run.
*Rob Cardy*
* Fix deserialization of ActiveSupport::Duration
Previously, a deserialized Duration would return an array from Duration#parts.
It will now return a hash just like a regular Duration.
This also fixes an error when trying to add or subtract from a deserialized Duration
(eg `duration + 1.year`).
*Jonathan del Strother*
* `perform_enqueued_jobs` is now compatible with all Active Job adapters
This means that methods that depend on it, like Action Mailer's `assert_emails`,
will work correctly even if the test adapter is not used.
*Alex Ghiculescu*
* Allow queue adapters to provide a custom name by implementing `queue_adapter_name`
*Sander Verdonschot*
* Log background job enqueue callers
Add `verbose_enqueue_logs` configuration option to display the caller
of background job enqueue in the log to help with debugging.
Example log line:
```
Enqueued AvatarThumbnailsJob (Job ID: ab528951-41fb-4c48-9129-3171791c27d6) to Sidekiq(default) with arguments: 1092412064
↳ app/models/user.rb:421:in `generate_avatar_thumbnails'
```
Enabled in development only for new and upgraded applications. Not recommended for use
in the production environment since it relies on Ruby's `Kernel#caller` which is fairly slow.
*fatkodima*
* Set `provider_job_id` for Backburner jobs
*Cameron Matheson*
* Add `perform_all_later` to enqueue multiple jobs at once
This adds the ability to bulk enqueue jobs, without running callbacks, by
passing multiple jobs or an array of jobs. For example:
```ruby
ActiveJob.perform_all_later(MyJob.new("hello", 42), MyJob.new("world", 0))
user_jobs = User.pluck(:id).map { |id| UserJob.new(user_id: id) }
ActiveJob.perform_all_later(user_jobs)
```
This can greatly reduce the number of round-trips to the queue datastore.
For queue adapters that do not implement the new `enqueue_all` method, we
fall back to enqueuing jobs individually. The Sidekiq adapter implements
`enqueue_all` with `push_bulk`.
This method does not use the existing `enqueue.active_job` event, but adds a
new event `enqueue_all.active_job`.
*Sander Verdonschot*
* Don't double log the `job` when using `ActiveRecord::QueryLog`
Previously if you set `config.active_record.query_log_tags` to an array that included
`:job`, the job name would get logged twice. This bug has been fixed.
*Alex Ghiculescu*
* Add support for Sidekiq's transaction-aware client
*Jonathan del Strother*
* Remove QueAdapter from Active Job.
After maintaining Active Job QueAdapter by Rails and Que side
to support Ruby 3 keyword arguments and options provided as top level keywords,
it is quite difficult to maintain it this way.
Active Job Que adapter can be included in the future version of que gem itself.
*Yasuo Honda*
* Fix BigDecimal (de)serialization for adapters using JSON.
Previously, BigDecimal was listed as not needing a serializer. However,
when used with an adapter storing the job arguments as JSON, it would get
serialized as a simple String, resulting in deserialization also producing
a String (instead of a BigDecimal).
By using a serializer, we ensure the round trip is safe.
To ensure applications using BigDecimal job arguments are not subject to
race conditions during deployment (where a replica running a version of
Rails without BigDecimalSerializer fails to deserialize an argument
serialized with it), `ActiveJob.use_big_decimal_serializer` is disabled by
default, and can be set to true in a following deployment..
*Sam Bostock*
* Preserve full-precision `enqueued_at` timestamps for serialized jobs,
allowing more accurate reporting of how long a job spent waiting in the
queue before it was performed.
Retains IS08601 format compatibility.
*Jeremy Daer*
* Add `--parent` option to job generator to specify parent class of job.
Example:
`bin/rails g job process_payment --parent=payment_job` generates:
```ruby
class ProcessPaymentJob < PaymentJob
# ...
end
```
*Gannon McGibbon*
* Add more detailed description to job generator.
*Gannon McGibbon*
* `perform.active_job` notification payloads now include `:db_runtime`, which
is the total time (in ms) taken by database queries while performing a job.
This value can be used to better understand how a job's time is spent.
*Jonathan Hefner*
* Update `ActiveJob::QueueAdapters::QueAdapter` to remove deprecation warning.
Remove a deprecation warning introduced in que 1.2 to prepare for changes in
que 2.0 necessary for Ruby 3 compatibility.
*Damir Zekic* and *Adis Hasovic*
* Add missing `bigdecimal` require in `ActiveJob::Arguments`
Could cause `uninitialized constant ActiveJob::Arguments::BigDecimal (NameError)`
when loading Active Job in isolation.
*Jean Boussier*
* Allow testing `discard_on/retry_on ActiveJob::DeserializationError`
Previously in `perform_enqueued_jobs`, `deserialize_arguments_if_needed`
was called before calling `perform_now`. When a record no longer exists
and is serialized using GlobalID this led to raising
an `ActiveJob::DeserializationError` before reaching `perform_now` call.
This behavior makes difficult testing the job `discard_on/retry_on` logic.
Now `deserialize_arguments_if_needed` call is postponed to when `perform_now`
is called.
Example:
```ruby
class UpdateUserJob < ActiveJob::Base
discard_on ActiveJob::DeserializationError
def perform(user)
# ...
end
end
# In the test
User.destroy_all
assert_nothing_raised do
perform_enqueued_jobs only: UpdateUserJob
end
```
*Jacopo Beschi*
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/activejob/CHANGELOG.md) for previous changes.
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/activejob/CHANGELOG.md) for previous changes.

View File

@ -8,9 +8,9 @@ module ActiveJob
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -1,217 +1,2 @@
## Rails 7.1.0.rc1 (September 27, 2023) ##
* Remove change in the typography of user facing error messages.
For example, “cant be blank” is again “can't be blank”.
*Rafael Mendonça França*
## Rails 7.1.0.beta1 (September 13, 2023) ##
* Support composite identifiers in `to_key`
`to_key` avoids wrapping `#id` value into an `Array` if `#id` already an array
*Nikita Vasilevsky*
* Add `ActiveModel::Conversion.param_delimiter` to configure delimiter being used in `to_param`
*Nikita Vasilevsky*
* `undefine_attribute_methods` undefines alias attribute methods along with attribute methods.
*Nikita Vasilevsky*
* Error.full_message now strips ":base" from the message.
*zzak*
* Add a load hook for `ActiveModel::Model` (named `active_model`) to match the load hook for
`ActiveRecord::Base` and allow for overriding aspects of the `ActiveModel::Model` class.
*Lewis Buckley*
* Improve password length validation in ActiveModel::SecurePassword to consider byte size for BCrypt
compatibility.
The previous password length validation only considered the character count, which may not
accurately reflect the 72-byte size limit imposed by BCrypt. This change updates the validation
to consider both character count and byte size while keeping the character length validation in place.
```ruby
user = User.new(password: "a" * 73) # 73 characters
user.valid? # => false
user.errors[:password] # => ["is too long"]
user = User.new(password: "あ" * 25) # 25 characters, 75 bytes
user.valid? # => false
user.errors[:password] # => ["is too long"]
```
*ChatGPT*, *Guillermo Iguaran*
* `has_secure_password` now generates an `#{attribute}_salt` method that returns the salt
used to compute the password digest. The salt will change whenever the password is changed,
so it can be used to create single-use password reset tokens with `generates_token_for`:
```ruby
class User < ActiveRecord::Base
has_secure_password
generates_token_for :password_reset, expires_in: 15.minutes do
password_salt&.last(10)
end
end
```
*Lázaro Nixon*
* Improve typography of user facing error messages. In English contractions,
the Unicode APOSTROPHE (`U+0027`) is now RIGHT SINGLE QUOTATION MARK
(`U+2019`). For example, "can't be blank" is now "cant be blank".
*Jon Dufresne*
* Add class to `ActiveModel::MissingAttributeError` error message.
Show which class is missing the attribute in the error message:
```ruby
user = User.first
user.pets.select(:id).first.user_id
# => ActiveModel::MissingAttributeError: missing attribute 'user_id' for Pet
```
*Petrik de Heus*
* Raise `NoMethodError` in `ActiveModel::Type::Value#as_json` to avoid unpredictable
results.
*Vasiliy Ermolovich*
* Custom attribute types that inherit from Active Model built-in types and do
not override the `serialize` method will now benefit from an optimization
when serializing attribute values for the database.
For example, with a custom type like the following:
```ruby
class DowncasedString < ActiveModel::Type::String
def cast(value)
super&.downcase
end
end
ActiveRecord::Type.register(:downcased_string, DowncasedString)
class User < ActiveRecord::Base
attribute :email, :downcased_string
end
user = User.new(email: "FooBar@example.com")
```
Serializing the `email` attribute for the database will be roughly twice as
fast. More expensive `cast` operations will likely see greater improvements.
*Jonathan Hefner*
* `has_secure_password` now supports password challenges via a
`password_challenge` accessor and validation.
A password challenge is a safeguard to verify that the current user is
actually the password owner. It can be used when changing sensitive model
fields, such as the password itself. It is different than a password
confirmation, which is used to prevent password typos.
When `password_challenge` is set, the validation checks that the value's
digest matches the *currently persisted* `password_digest` (i.e.
`password_digest_was`).
This allows a password challenge to be done as part of a typical `update`
call, just like a password confirmation. It also allows a password
challenge error to be handled in the same way as other validation errors.
For example, in the controller, instead of:
```ruby
password_params = params.require(:password).permit(
:password_challenge,
:password,
:password_confirmation,
)
password_challenge = password_params.delete(:password_challenge)
@password_challenge_failed = !current_user.authenticate(password_challenge)
if !@password_challenge_failed && current_user.update(password_params)
# ...
end
```
You can now write:
```ruby
password_params = params.require(:password).permit(
:password_challenge,
:password,
:password_confirmation,
).with_defaults(password_challenge: "")
if current_user.update(password_params)
# ...
end
```
And, in the view, instead of checking `@password_challenge_failed`, you can
render an error for the `password_challenge` field just as you would for
other form fields, including utilizing `config.action_view.field_error_proc`.
*Jonathan Hefner*
* Support infinite ranges for `LengthValidator`s `:in`/`:within` options
```ruby
validates_length_of :first_name, in: ..30
```
*fatkodima*
* Add support for beginless ranges to inclusivity/exclusivity validators:
```ruby
validates_inclusion_of :birth_date, in: -> { (..Date.today) }
```
```ruby
validates_exclusion_of :birth_date, in: -> { (..Date.today) }
```
*Bo Jeanes*
* Make validators accept lambdas without record argument
```ruby
# Before
validates_comparison_of :birth_date, less_than_or_equal_to: ->(_record) { Date.today }
# After
validates_comparison_of :birth_date, less_than_or_equal_to: -> { Date.today }
```
*fatkodima*
* Fix casting long strings to `Date`, `Time` or `DateTime`
*fatkodima*
* Use different cache namespace for proxy calls
Models can currently have different attribute bodies for the same method
names, leading to conflicts. Adding a new namespace `:active_model_proxy`
fixes the issue.
*Chris Salzberg*
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/activemodel/CHANGELOG.md) for previous changes.
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/activemodel/CHANGELOG.md) for previous changes.

View File

@ -8,9 +8,9 @@ module ActiveModel
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

File diff suppressed because it is too large Load Diff

View File

@ -139,7 +139,7 @@ A short rundown of some of the major features:
* Database agnostic schema management with Migrations.
class AddSystemSettings < ActiveRecord::Migration[7.1]
class AddSystemSettings < ActiveRecord::Migration[7.2]
def up
create_table :system_settings do |t|
t.string :name

View File

@ -1905,7 +1905,7 @@ module ActiveRecord
# The join table should not have a primary key or a model associated with it. You must manually generate the
# join table with a migration such as this:
#
# class CreateDevelopersProjectsJoinTable < ActiveRecord::Migration[7.1]
# class CreateDevelopersProjectsJoinTable < ActiveRecord::Migration[7.2]
# def change
# create_join_table :developers, :projects
# end

View File

@ -348,7 +348,7 @@ module ActiveRecord
# Inside migration files, the +t+ object in {create_table}[rdoc-ref:SchemaStatements#create_table]
# is actually of this type:
#
# class SomeMigration < ActiveRecord::Migration[7.1]
# class SomeMigration < ActiveRecord::Migration[7.2]
# def up
# create_table :foo do |t|
# puts t.class # => "ActiveRecord::ConnectionAdapters::TableDefinition"

View File

@ -8,9 +8,9 @@ module ActiveRecord
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -20,7 +20,7 @@ module ActiveRecord
# For example the following migration is not reversible.
# Rolling back this migration will raise an ActiveRecord::IrreversibleMigration error.
#
# class IrreversibleMigrationExample < ActiveRecord::Migration[7.1]
# class IrreversibleMigrationExample < ActiveRecord::Migration[7.2]
# def change
# create_table :distributors do |t|
# t.string :zipcode
@ -38,7 +38,7 @@ module ActiveRecord
#
# 1. Define <tt>#up</tt> and <tt>#down</tt> methods instead of <tt>#change</tt>:
#
# class ReversibleMigrationExample < ActiveRecord::Migration[7.1]
# class ReversibleMigrationExample < ActiveRecord::Migration[7.2]
# def up
# create_table :distributors do |t|
# t.string :zipcode
@ -63,7 +63,7 @@ module ActiveRecord
#
# 2. Use the #reversible method in <tt>#change</tt> method:
#
# class ReversibleMigrationExample < ActiveRecord::Migration[7.1]
# class ReversibleMigrationExample < ActiveRecord::Migration[7.2]
# def change
# create_table :distributors do |t|
# t.string :zipcode
@ -234,7 +234,7 @@ module ActiveRecord
#
# Example of a simple migration:
#
# class AddSsl < ActiveRecord::Migration[7.1]
# class AddSsl < ActiveRecord::Migration[7.2]
# def up
# add_column :accounts, :ssl_enabled, :boolean, default: true
# end
@ -254,7 +254,7 @@ module ActiveRecord
#
# Example of a more complex migration that also needs to initialize data:
#
# class AddSystemSettings < ActiveRecord::Migration[7.1]
# class AddSystemSettings < ActiveRecord::Migration[7.2]
# def up
# create_table :system_settings do |t|
# t.string :name
@ -382,7 +382,7 @@ module ActiveRecord
# bin/rails generate migration add_fieldname_to_tablename fieldname:string
#
# This will generate the file <tt>timestamp_add_fieldname_to_tablename.rb</tt>, which will look like this:
# class AddFieldnameToTablename < ActiveRecord::Migration[7.1]
# class AddFieldnameToTablename < ActiveRecord::Migration[7.2]
# def change
# add_column :tablenames, :fieldname, :string
# end
@ -408,7 +408,7 @@ module ActiveRecord
#
# Not all migrations change the schema. Some just fix the data:
#
# class RemoveEmptyTags < ActiveRecord::Migration[7.1]
# class RemoveEmptyTags < ActiveRecord::Migration[7.2]
# def up
# Tag.all.each { |tag| tag.destroy if tag.pages.empty? }
# end
@ -421,7 +421,7 @@ module ActiveRecord
#
# Others remove columns when they migrate up instead of down:
#
# class RemoveUnnecessaryItemAttributes < ActiveRecord::Migration[7.1]
# class RemoveUnnecessaryItemAttributes < ActiveRecord::Migration[7.2]
# def up
# remove_column :items, :incomplete_items_count
# remove_column :items, :completed_items_count
@ -435,7 +435,7 @@ module ActiveRecord
#
# And sometimes you need to do something in SQL not abstracted directly by migrations:
#
# class MakeJoinUnique < ActiveRecord::Migration[7.1]
# class MakeJoinUnique < ActiveRecord::Migration[7.2]
# def up
# execute "ALTER TABLE `pages_linked_pages` ADD UNIQUE `page_id_linked_page_id` (`page_id`,`linked_page_id`)"
# end
@ -452,7 +452,7 @@ module ActiveRecord
# <tt>Base#reset_column_information</tt> in order to ensure that the model has the
# latest column data from after the new column was added. Example:
#
# class AddPeopleSalary < ActiveRecord::Migration[7.1]
# class AddPeopleSalary < ActiveRecord::Migration[7.2]
# def up
# add_column :people, :salary, :integer
# Person.reset_column_information
@ -510,7 +510,7 @@ module ActiveRecord
# To define a reversible migration, define the +change+ method in your
# migration like this:
#
# class TenderloveMigration < ActiveRecord::Migration[7.1]
# class TenderloveMigration < ActiveRecord::Migration[7.2]
# def change
# create_table(:horses) do |t|
# t.column :content, :text
@ -540,7 +540,7 @@ module ActiveRecord
# can't execute inside a transaction though, and for these situations
# you can turn the automatic transactions off.
#
# class ChangeEnum < ActiveRecord::Migration[7.1]
# class ChangeEnum < ActiveRecord::Migration[7.2]
# disable_ddl_transaction!
#
# def up
@ -810,7 +810,7 @@ module ActiveRecord
# and create the table 'apples' on the way up, and the reverse
# on the way down.
#
# class FixTLMigration < ActiveRecord::Migration[7.1]
# class FixTLMigration < ActiveRecord::Migration[7.2]
# def change
# revert do
# create_table(:horses) do |t|
@ -829,7 +829,7 @@ module ActiveRecord
#
# require_relative "20121212123456_tenderlove_migration"
#
# class FixupTLMigration < ActiveRecord::Migration[7.1]
# class FixupTLMigration < ActiveRecord::Migration[7.2]
# def change
# revert TenderloveMigration
#
@ -880,7 +880,7 @@ module ActiveRecord
# when the three columns 'first_name', 'last_name' and 'full_name' exist,
# even when migrating down:
#
# class SplitNameMigration < ActiveRecord::Migration[7.1]
# class SplitNameMigration < ActiveRecord::Migration[7.2]
# def change
# add_column :users, :first_name, :string
# add_column :users, :last_name, :string
@ -908,7 +908,7 @@ module ActiveRecord
# In the following example, the new column +published+ will be given
# the value +true+ for all existing records.
#
# class AddPublishedToPosts < ActiveRecord::Migration[7.1]
# class AddPublishedToPosts < ActiveRecord::Migration[7.2]
# def change
# add_column :posts, :published, :boolean, default: false
# up_only do

View File

@ -21,8 +21,7 @@ module ActiveRecord
# New migration functionality that will never be backward compatible should be added directly to `ActiveRecord::Migration`.
#
# There are classes for each prior Rails version. Each class descends from the *next* Rails version, so:
# 7.0 < 7.1
# 5.2 < 6.0 < 6.1 < 7.0 < 7.1
# 5.2 < 6.0 < 6.1 < 7.0 < 7.1 < 7.2
#
# If you are introducing new migration functionality that should only apply from Rails 7 onward, then you should
# find the class that immediately precedes it (6.1), and override the relevant migration methods to undo your changes.
@ -30,7 +29,10 @@ module ActiveRecord
# For example, Rails 6 added a default value for the `precision` option on datetime columns. So in this file, the `V5_2`
# class sets the value of `precision` to `nil` if it's not explicitly provided. This way, the default value will not apply
# for migrations written for 5.2, but will for migrations written for 6.0.
V7_1 = Current
V7_2 = Current
class V7_1 < V7_2
end
class V7_0 < V7_1
module LegacyIndexName

View File

@ -525,7 +525,7 @@ module ActiveRecord
# when just after creating a table you want to populate it with some default
# values, e.g.:
#
# class CreateJobLevels < ActiveRecord::Migration[7.1]
# class CreateJobLevels < ActiveRecord::Migration[7.2]
# def up
# create_table :job_levels do |t|
# t.integer :id

View File

@ -1,242 +1,2 @@
## Rails 7.1.0.rc1 (September 27, 2023) ##
* Add `expires_at` option to `ActiveStorage::Blob#signed_id`.
```ruby
rails_blob_path(user.avatar, disposition: "attachment", expires_at: 30.minutes.from_now)
<%= image_tag rails_blob_path(user.avatar.variant(resize: "100x100"), expires_at: 30.minutes.from_now) %>
```
*Aki*
* Allow attaching File and Pathname when assigning attributes, e.g.
```ruby
User.create!(avatar: File.open("image.jpg"))
User.create!(avatar: file_fixture("image.jpg"))
```
*Dorian Marié*
## Rails 7.1.0.beta1 (September 13, 2023) ##
* Disables the session in `ActiveStorage::Blobs::ProxyController`
and `ActiveStorage::Representations::ProxyController`
in order to allow caching by default in some CDNs as CloudFlare
Fixes #44136
*Bruno Prieto*
* Add `tags` to `ActiveStorage::Analyzer::AudioAnalyzer` output
*Keaton Roux*
* Add an option to preprocess variants
ActiveStorage variants are processed on the fly when they are needed but
sometimes we're sure that they are accessed and want to processed them
upfront.
`preprocessed` option is added when declaring variants.
```
class User < ApplicationRecord
has_one_attached :avatar do |attachable|
attachable.variant :thumb, resize_to_limit: [100, 100], preprocessed: true
end
end
```
*Shouichi Kamiya*
* Fix variants not included when eager loading multiple records containing a single attachment
When using the `with_attached_#{name}` scope for a `has_one_attached` relation,
attachment variants were not eagerly loaded.
*Russell Porter*
* Allow an ActiveStorage attachment to be removed via a form post
Attachments can already be removed by updating the attachment to be nil such as:
```ruby
User.find(params[:id]).update!(avatar: nil)
```
However, a form cannot post a nil param, it can only post an empty string. But, posting an
empty string would result in an `ActiveSupport::MessageVerifier::InvalidSignature: mismatched digest`
error being raised, because it's being treated as a signed blob id.
Now, nil and an empty string are treated as a delete, which allows attachments to be removed via:
```ruby
User.find(params[:id]).update!(params.require(:user).permit(:avatar))
```
*Nate Matykiewicz*
* Remove mini_mime usage in favour of marcel.
We have two libraries that are have similar usage. This change removes
dependency on mini_mime and makes use of similar methods from marcel.
*Vipul A M*
* Allow destroying active storage variants
```ruby
User.first.avatar.variant(resize_to_limit: [100, 100]).destroy
```
*Shouichi Kamiya*, *Yuichiro NAKAGAWA*, *Ryohei UEDA*
* Add `sample_rate` to `ActiveStorage::Analyzer::AudioAnalyzer` output
*Matija Čupić*
* Remove deprecated `purge` and `purge_later` methods from the attachments association.
*Rafael Mendonça França*
* Remove deprecated behavior when assigning to a collection of attachments.
Instead of appending to the collection, the collection is now replaced.
*Rafael Mendonça França*
* Remove deprecated `ActiveStorage::Current#host` and `ActiveStorage::Current#host=` methods.
*Rafael Mendonça França*
* Remove deprecated invalid default content types in Active Storage configurations.
*Rafael Mendonça França*
* Add missing preview event to `ActiveStorage::LogSubscriber`
A `preview` event is being instrumented in `ActiveStorage::Previewer`.
However it was not added inside ActiveStorage's LogSubscriber class.
This will allow to have logs for when a preview happens
in the same fashion as all other ActiveStorage events such as
`upload` and `download` inside `Rails.logger`.
*Chedli Bourguiba*
* Fix retrieving rotation value from FFmpeg on version 5.0+.
In FFmpeg version 5.0+ the rotation value has been removed from tags.
Instead the value can be found in side_data_list. Along with
this update it's possible to have values of -90, -270 to denote the video
has been rotated.
*Haroon Ahmed*
* Touch all corresponding model records after ActiveStorage::Blob is analyzed
This fixes a race condition where a record can be requested and have a cache entry built, before
the initial `analyze_later` completes, which will not be invalidated until something else
updates the record. This also invalidates cache entries when a blob is re-analyzed, which
is helpful if a bug is fixed in an analyzer or a new analyzer is added.
*Nate Matykiewicz*
* Add ability to use pre-defined variants when calling `preview` or
`representation` on an attachment.
```ruby
class User < ActiveRecord::Base
has_one_attached :file do |attachable|
attachable.variant :thumb, resize_to_limit: [100, 100]
end
end
<%= image_tag user.file.representation(:thumb) %>
```
*Richard Böhme*
* Method `attach` always returns the attachments except when the record
is persisted, unchanged, and saving it fails, in which case it returns `nil`.
*Santiago Bartesaghi*
* Fixes multiple `attach` calls within transaction not uploading files correctly.
In the following example, the code failed to upload all but the last file to the configured service.
```ruby
ActiveRecord::Base.transaction do
user.attachments.attach({
content_type: "text/plain",
filename: "dummy.txt",
io: ::StringIO.new("dummy"),
})
user.attachments.attach({
content_type: "text/plain",
filename: "dummy2.txt",
io: ::StringIO.new("dummy2"),
})
end
assert_equal 2, user.attachments.count
assert user.attachments.first.service.exist?(user.attachments.first.key) # Fails
```
This was addressed by keeping track of the subchanges pending upload, and uploading them
once the transaction is committed.
Fixes #41661
*Santiago Bartesaghi*, *Bruno Vezoli*, *Juan Roig*, *Abhay Nikam*
* Raise an exception if `config.active_storage.service` is not set.
If Active Storage is configured and `config.active_storage.service` is not
set in the respective environment's configuration file, then an exception
is raised with a meaningful message when attempting to use Active Storage.
*Ghouse Mohamed*
* Fixes proxy downloads of files over 5mb
Previously, trying to view and/or download files larger than 5mb stored in
services like S3 via proxy mode could return corrupted files at around
5.2mb or cause random halts in the download. Now,
`ActiveStorage::Blobs::ProxyController` correctly handles streaming these
larger files from the service to the client without any issues.
Fixes #44679
*Felipe Raul*
* Saving attachment(s) to a record returns the blob/blobs object
Previously, saving attachments did not return the blob/blobs that
were attached. Now, saving attachments to a record with `#attach`
method returns the blob or array of blobs that were attached to
the record. If it fails to save the attachment(s), then it returns
`false`.
*Ghouse Mohamed*
* Don't stream responses in redirect mode
Previously, both redirect mode and proxy mode streamed their
responses which caused a new thread to be created, and could end
up leaking connections in the connection pool. But since redirect
mode doesn't actually send any data, it doesn't need to be
streamed.
*Luke Lau*
* Safe for direct upload on Libraries or Frameworks
Enable the use of custom headers during direct uploads, which allows for
the inclusion of Authorization bearer tokens or other forms of authorization
tokens through headers.
*Radamés Roriz*
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/activestorage/CHANGELOG.md) for previous changes.
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/activestorage/CHANGELOG.md) for previous changes.

View File

@ -8,9 +8,9 @@ module ActiveStorage
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -1,6 +1,6 @@
{
"name": "@rails/activestorage",
"version": "7.1.0-rc1",
"version": "7.2.0-alpha",
"description": "Attach cloud and local files in Rails applications",
"module": "app/assets/javascripts/activestorage.esm.js",
"main": "app/assets/javascripts/activestorage.js",

File diff suppressed because it is too large Load Diff

View File

@ -65,7 +65,7 @@ module ActiveSupport
# and the second is a library name.
#
# ActiveSupport::Deprecation.new('2.0', 'MyLibrary')
def initialize(deprecation_horizon = "7.2", gem_name = "Rails")
def initialize(deprecation_horizon = "7.3", gem_name = "Rails")
self.gem_name = gem_name
self.deprecation_horizon = deprecation_horizon
# By default, warnings are not silenced and debugging is off.

View File

@ -8,9 +8,9 @@ module ActiveSupport
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -1,12 +1,2 @@
## Rails 7.1.0.rc1 (September 27, 2023) ##
* No changes.
## Rails 7.1.0.beta1 (September 13, 2023) ##
* Add "back to top" button to guides
*Alysson Rosa*
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/guides/CHANGELOG.md) for previous changes.
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/guides/CHANGELOG.md) for previous changes.

View File

@ -28,7 +28,7 @@ end
class Payment < ActiveRecord::Base
end
class ChangeAmountToAddScale < ActiveRecord::Migration[7.1]
class ChangeAmountToAddScale < ActiveRecord::Migration[7.2]
def change
reversible do |dir|
dir.up do

View File

@ -0,0 +1,88 @@
**DO NOT READ THIS FILE ON GITHUB, GUIDES ARE PUBLISHED ON https://guides.rubyonrails.org.**
Ruby on Rails 7.2 Release Notes
===============================
Highlights in Rails 7.2:
--------------------------------------------------------------------------------
Upgrading to Rails 7.1
----------------------
If you're upgrading an existing application, it's a great idea to have good test
coverage before going in. You should also first upgrade to Rails 7.1 in case you
haven't and make sure your application still runs as expected before attempting
an update to Rails 7.2. A list of things to watch out for when upgrading is
available in the
[Upgrading Ruby on Rails](upgrading_ruby_on_rails.html#upgrading-from-rails-7-1-to-rails-7-2)
guide.
Major Features
--------------
Railties
--------
Action Cable
------------
Action Pack
-----------
Action View
-----------
Action Mailer
-------------
Active Record
-------------
Active Storage
--------------
Active Model
------------
Active Support
--------------
Active Job
----------
Action Text
----------
Action Mailbox
----------
Ruby on Rails Guides
--------------------
Please refer to the [Changelog][guides] for detailed changes.
### Notable changes
Credits
-------
See the
[full list of contributors to Rails](https://contributors.rubyonrails.org/)
for the many people who spent many hours making Rails, the stable and robust
framework it is. Kudos to all of them.
[railties]: https://github.com/rails/rails/blob/main/railties/CHANGELOG.md
[action-pack]: https://github.com/rails/rails/blob/main/actionpack/CHANGELOG.md
[action-view]: https://github.com/rails/rails/blob/main/actionview/CHANGELOG.md
[action-mailer]: https://github.com/rails/rails/blob/main/actionmailer/CHANGELOG.md
[action-cable]: https://github.com/rails/rails/blob/main/actioncable/CHANGELOG.md
[active-record]: https://github.com/rails/rails/blob/main/activerecord/CHANGELOG.md
[active-storage]: https://github.com/rails/rails/blob/main/activestorage/CHANGELOG.md
[active-model]: https://github.com/rails/rails/blob/main/activemodel/CHANGELOG.md
[active-support]: https://github.com/rails/rails/blob/main/activesupport/CHANGELOG.md
[active-job]: https://github.com/rails/rails/blob/main/activejob/CHANGELOG.md
[action-text]: https://github.com/rails/rails/blob/main/actiontext/CHANGELOG.md
[action-mailbox]: https://github.com/rails/rails/blob/main/actionmailbox/CHANGELOG.md
[guides]: https://github.com/rails/rails/blob/main/guides/CHANGELOG.md

View File

@ -10,12 +10,13 @@
</p>
<% else %>
<p>
These are the new guides for Rails 7.1 based on <a href="https://github.com/rails/rails/tree/<%= @version %>"><%= @version %></a>.
These are the new guides for Rails 7.2 based on <a href="https://github.com/rails/rails/tree/<%= @version %>"><%= @version %></a>.
These guides are designed to make you immediately productive with Rails, and to help you understand how all of the pieces fit together.
</p>
<% end %>
<p>
The guides for earlier releases:
<a href="https://guides.rubyonrails.org/v7.1/" data-turbo="false">Rails 7.1</a>,
<a href="https://guides.rubyonrails.org/v7.0/" data-turbo="false">Rails 7.0</a>,
<a href="https://guides.rubyonrails.org/v6.1/" data-turbo="false">Rails 6.1</a>,
<a href="https://guides.rubyonrails.org/v6.0/" data-turbo="false">Rails 6.0</a>,

View File

@ -410,7 +410,7 @@ in files which are executed against any database that Active Record supports.
Here's a migration that creates a new table called `publications`:
```ruby
class CreatePublications < ActiveRecord::Migration[7.1]
class CreatePublications < ActiveRecord::Migration[7.2]
def change
create_table :publications do |t|
t.string :title

View File

@ -36,7 +36,7 @@ You can create a table with a composite primary key by passing the
`:primary_key` option to `create_table` with an array value:
```ruby
class CreateProducts < ActiveRecord::Migration[7.1]
class CreateProducts < ActiveRecord::Migration[7.2]
def change
create_table :products, primary_key: [:store_id, :sku] do |t|
t.integer :store_id

View File

@ -34,7 +34,7 @@ history to the latest version. Active Record will also update your
Here's an example of a migration:
```ruby
class CreateProducts < ActiveRecord::Migration[7.1]
class CreateProducts < ActiveRecord::Migration[7.2]
def change
create_table :products do |t|
t.string :name
@ -73,7 +73,7 @@ If you wish for a migration to do something that Active Record doesn't know how
to reverse, you can use `reversible`:
```ruby
class ChangeProductsPrice < ActiveRecord::Migration[7.1]
class ChangeProductsPrice < ActiveRecord::Migration[7.2]
def change
reversible do |direction|
change_table :products do |t|
@ -92,7 +92,7 @@ passed to `direction.up` and `direction.down` respectively.
Alternatively, you can use `up` and `down` instead of `change`:
```ruby
class ChangeProductsPrice < ActiveRecord::Migration[7.1]
class ChangeProductsPrice < ActiveRecord::Migration[7.2]
def up
change_table :products do |t|
t.change :price, :string
@ -136,7 +136,7 @@ $ bin/rails generate migration AddPartNumberToProducts
This will create an appropriately named empty migration:
```ruby
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
class AddPartNumberToProducts < ActiveRecord::Migration[7.2]
def change
end
end
@ -160,7 +160,7 @@ $ bin/rails generate migration AddPartNumberToProducts part_number:string
This will generate the following migration:
```ruby
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
class AddPartNumberToProducts < ActiveRecord::Migration[7.2]
def change
add_column :products, :part_number, :string
end
@ -176,7 +176,7 @@ $ bin/rails generate migration AddPartNumberToProducts part_number:string:index
This will generate the appropriate [`add_column`][] and [`add_index`][] statements:
```ruby
class AddPartNumberToProducts < ActiveRecord::Migration[7.1]
class AddPartNumberToProducts < ActiveRecord::Migration[7.2]
def change
add_column :products, :part_number, :string
add_index :products, :part_number
@ -194,7 +194,7 @@ Will generate a schema migration which adds two additional
columns to the `products` table.
```ruby
class AddDetailsToProducts < ActiveRecord::Migration[7.1]
class AddDetailsToProducts < ActiveRecord::Migration[7.2]
def change
add_column :products, :part_number, :string
add_column :products, :price, :decimal
@ -213,7 +213,7 @@ $ bin/rails generate migration RemovePartNumberFromProducts part_number:string
This generates the appropriate [`remove_column`][] statements:
```ruby
class RemovePartNumberFromProducts < ActiveRecord::Migration[7.1]
class RemovePartNumberFromProducts < ActiveRecord::Migration[7.2]
def change
remove_column :products, :part_number, :string
end
@ -233,7 +233,7 @@ $ bin/rails generate migration CreateProducts name:string part_number:string
generates
```ruby
class CreateProducts < ActiveRecord::Migration[7.1]
class CreateProducts < ActiveRecord::Migration[7.2]
def change
create_table :products do |t|
t.string :name
@ -261,7 +261,7 @@ $ bin/rails generate migration AddUserRefToProducts user:references
generates the following [`add_reference`][] call:
```ruby
class AddUserRefToProducts < ActiveRecord::Migration[7.1]
class AddUserRefToProducts < ActiveRecord::Migration[7.2]
def change
add_reference :products, :user, foreign_key: true
end
@ -281,7 +281,7 @@ $ bin/rails generate migration CreateJoinTableCustomerProduct customer product
will produce the following migration:
```ruby
class CreateJoinTableCustomerProduct < ActiveRecord::Migration[7.1]
class CreateJoinTableCustomerProduct < ActiveRecord::Migration[7.2]
def change
create_join_table :customers, :products do |t|
# t.index [:customer_id, :product_id]
@ -310,7 +310,7 @@ $ bin/rails generate model Product name:string description:text
This will create a migration that looks like this:
```ruby
class CreateProducts < ActiveRecord::Migration[7.1]
class CreateProducts < ActiveRecord::Migration[7.2]
def change
create_table :products do |t|
t.string :name
@ -338,7 +338,7 @@ $ bin/rails generate migration AddDetailsToProducts 'price:decimal{5,2}' supplie
will produce a migration that looks like this
```ruby
class AddDetailsToProducts < ActiveRecord::Migration[7.1]
class AddDetailsToProducts < ActiveRecord::Migration[7.2]
def change
add_column :products, :price, :decimal, precision: 5, scale: 2
add_reference :products, :supplier, polymorphic: true
@ -635,7 +635,7 @@ You can create a table with a composite primary key by passing the
`:primary_key` option to `create_table` with an array value:
```ruby
class CreateProducts < ActiveRecord::Migration[7.1]
class CreateProducts < ActiveRecord::Migration[7.2]
def change
create_table :products, primary_key: [:customer_id, :product_sku] do |t|
t.integer :customer_id
@ -744,7 +744,7 @@ reverse. You can use [`reversible`][] to specify what to do when running a
migration and what else to do when reverting it. For example:
```ruby
class ExampleMigration < ActiveRecord::Migration[7.1]
class ExampleMigration < ActiveRecord::Migration[7.2]
def change
create_table :distributors do |t|
t.string :zipcode
@ -795,7 +795,7 @@ reverse order they were made in the `up` method. The example in the `reversible`
section is equivalent to:
```ruby
class ExampleMigration < ActiveRecord::Migration[7.1]
class ExampleMigration < ActiveRecord::Migration[7.2]
def up
create_table :distributors do |t|
t.string :zipcode
@ -843,7 +843,7 @@ You can use Active Record's ability to rollback migrations using the [`revert`][
```ruby
require_relative "20121212123456_example_migration"
class FixupExampleMigration < ActiveRecord::Migration[7.1]
class FixupExampleMigration < ActiveRecord::Migration[7.2]
def change
revert ExampleMigration
@ -861,7 +861,7 @@ For example, let's imagine that `ExampleMigration` is committed and it is later
decided that a Distributors view is no longer needed.
```ruby
class DontUseDistributorsViewMigration < ActiveRecord::Migration[7.1]
class DontUseDistributorsViewMigration < ActiveRecord::Migration[7.2]
def change
revert do
# copy-pasted code from ExampleMigration
@ -1039,7 +1039,7 @@ Several methods are provided in migrations that allow you to control all this:
For example, take the following migration:
```ruby
class CreateProducts < ActiveRecord::Migration[7.1]
class CreateProducts < ActiveRecord::Migration[7.2]
def change
suppress_messages do
create_table :products do |t|
@ -1144,7 +1144,7 @@ When `:ruby` is selected, then the schema is stored in `db/schema.rb`. If you lo
at this file you'll find that it looks an awful lot like one very big migration:
```ruby
ActiveRecord::Schema[7.1].define(version: 2008_09_06_171750) do
ActiveRecord::Schema[7.2].define(version: 2008_09_06_171750) do
create_table "authors", force: true do |t|
t.string "name"
t.datetime "created_at"
@ -1229,7 +1229,7 @@ modify data. This is useful in an existing database that can't be destroyed and
recreated, such as a production database.
```ruby
class AddInitialProducts < ActiveRecord::Migration[7.1]
class AddInitialProducts < ActiveRecord::Migration[7.2]
def up
5.times do |i|
Product.create(name: "Product ##{i}", description: "A product.")

View File

@ -112,7 +112,7 @@ NOTE: `belongs_to` associations _must_ use the singular term. If you used the pl
The corresponding migration might look like this:
```ruby
class CreateBooks < ActiveRecord::Migration[7.1]
class CreateBooks < ActiveRecord::Migration[7.2]
def change
create_table :authors do |t|
t.string :name
@ -159,7 +159,7 @@ The main difference from `belongs_to` is that the link column `supplier_id` is l
The corresponding migration might look like this:
```ruby
class CreateSuppliers < ActiveRecord::Migration[7.1]
class CreateSuppliers < ActiveRecord::Migration[7.2]
def change
create_table :suppliers do |t|
t.string :name
@ -205,7 +205,7 @@ NOTE: The name of the other model is pluralized when declaring a `has_many` asso
The corresponding migration might look like this:
```ruby
class CreateAuthors < ActiveRecord::Migration[7.1]
class CreateAuthors < ActiveRecord::Migration[7.2]
def change
create_table :authors do |t|
t.string :name
@ -257,7 +257,7 @@ end
The corresponding migration might look like this:
```ruby
class CreateAppointments < ActiveRecord::Migration[7.1]
class CreateAppointments < ActiveRecord::Migration[7.2]
def change
create_table :physicians do |t|
t.string :name
@ -343,7 +343,7 @@ end
The corresponding migration might look like this:
```ruby
class CreateAccountHistories < ActiveRecord::Migration[7.1]
class CreateAccountHistories < ActiveRecord::Migration[7.2]
def change
create_table :suppliers do |t|
t.string :name
@ -386,7 +386,7 @@ end
The corresponding migration might look like this:
```ruby
class CreateAssembliesAndParts < ActiveRecord::Migration[7.1]
class CreateAssembliesAndParts < ActiveRecord::Migration[7.2]
def change
create_table :assemblies do |t|
t.string :name
@ -425,7 +425,7 @@ end
The corresponding migration might look like this:
```ruby
class CreateSuppliers < ActiveRecord::Migration[7.1]
class CreateSuppliers < ActiveRecord::Migration[7.2]
def change
create_table :suppliers do |t|
t.string :name
@ -510,7 +510,7 @@ Similarly, you can retrieve `@product.pictures`.
If you have an instance of the `Picture` model, you can get to its parent via `@picture.imageable`. To make this work, you need to declare both a foreign key column and a type column in the model that declares the polymorphic interface:
```ruby
class CreatePictures < ActiveRecord::Migration[7.1]
class CreatePictures < ActiveRecord::Migration[7.2]
def change
create_table :pictures do |t|
t.string :name
@ -527,7 +527,7 @@ end
This migration can be simplified by using the `t.references` form:
```ruby
class CreatePictures < ActiveRecord::Migration[7.1]
class CreatePictures < ActiveRecord::Migration[7.2]
def change
create_table :pictures do |t|
t.string :name
@ -622,7 +622,7 @@ With this setup, you can retrieve `@employee.subordinates` and `@employee.manage
In your migrations/schema, you will add a references column to the model itself.
```ruby
class CreateEmployees < ActiveRecord::Migration[7.1]
class CreateEmployees < ActiveRecord::Migration[7.2]
def change
create_table :employees do |t|
t.references :manager, foreign_key: { to_table: :employees }
@ -696,7 +696,7 @@ end
This declaration needs to be backed up by a corresponding foreign key column in the books table. For a brand new table, the migration might look something like this:
```ruby
class CreateBooks < ActiveRecord::Migration[7.1]
class CreateBooks < ActiveRecord::Migration[7.2]
def change
create_table :books do |t|
t.datetime :published_at
@ -710,7 +710,7 @@ end
Whereas for an existing table, it might look like this:
```ruby
class AddAuthorToBooks < ActiveRecord::Migration[7.1]
class AddAuthorToBooks < ActiveRecord::Migration[7.2]
def change
add_reference :books, :author
end
@ -742,7 +742,7 @@ end
These need to be backed up by a migration to create the `assemblies_parts` table. This table should be created without a primary key:
```ruby
class CreateAssembliesPartsJoinTable < ActiveRecord::Migration[7.1]
class CreateAssembliesPartsJoinTable < ActiveRecord::Migration[7.2]
def change
create_table :assemblies_parts, id: false do |t|
t.bigint :assembly_id
@ -760,7 +760,7 @@ We pass `id: false` to `create_table` because that table does not represent a mo
For simplicity, you can also use the method `create_join_table`:
```ruby
class CreateAssembliesPartsJoinTable < ActiveRecord::Migration[7.1]
class CreateAssembliesPartsJoinTable < ActiveRecord::Migration[7.2]
def change
create_join_table :assemblies, :parts do |t|
t.index :assembly_id

View File

@ -410,7 +410,7 @@ If you wish to test out some code without changing any data, you can do that by
```bash
$ bin/rails console --sandbox
Loading development environment in sandbox (Rails 7.1.0)
Loading development environment in sandbox (Rails 7.2.0)
Any modifications you make will be rolled back on exit
irb(main):001:0>
```

View File

@ -614,7 +614,7 @@ To ease the upgrade it's required to add the new default to the
value:
```ruby
# new_framework_defaults_7_1.rb.tt
# new_framework_defaults_7_2.rb.tt
# Rails.application.config.active_job.existing_behavior = false
```

View File

@ -378,7 +378,7 @@ Processing by PostsController#index as HTML
10| # GET /posts/1 or /posts/1.json
11| def show
=>#0 PostsController#index at ~/projects/rails-guide-example/app/controllers/posts_controller.rb:7
#1 ActionController::BasicImplicitRender#send_action(method="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.1.0.alpha/lib/action_controller/metal/basic_implicit_render.rb:6
#1 ActionController::BasicImplicitRender#send_action(method="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.2.0.alpha/lib/action_controller/metal/basic_implicit_render.rb:6
# and 72 frames (use `bt' command for all frames)
(rdbg)
```
@ -444,14 +444,14 @@ When used without any options, `backtrace` lists all the frames on the stack:
```rb
=>#0 PostsController#index at ~/projects/rails-guide-example/app/controllers/posts_controller.rb:7
#1 ActionController::BasicImplicitRender#send_action(method="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.1.0.alpha/lib/action_controller/metal/basic_implicit_render.rb:6
#2 AbstractController::Base#process_action(method_name="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.1.0.alpha/lib/abstract_controller/base.rb:214
#3 ActionController::Rendering#process_action(#arg_rest=nil) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.1.0.alpha/lib/action_controller/metal/rendering.rb:53
#4 block in process_action at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.1.0.alpha/lib/abstract_controller/callbacks.rb:221
#5 block in run_callbacks at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/activesupport-7.1.0.alpha/lib/active_support/callbacks.rb:118
#6 ActionText::Rendering::ClassMethods#with_renderer(renderer=#<PostsController:0x0000000000af78>) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actiontext-7.1.0.alpha/lib/action_text/rendering.rb:20
#7 block {|controller=#<PostsController:0x0000000000af78>, action=#<Proc:0x00007fd91985f1c0 /Users/st0012/...|} in <class:Engine> (4 levels) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actiontext-7.1.0.alpha/lib/action_text/engine.rb:69
#8 [C] BasicObject#instance_exec at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/activesupport-7.1.0.alpha/lib/active_support/callbacks.rb:127
#1 ActionController::BasicImplicitRender#send_action(method="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-2.0.alpha/lib/action_controller/metal/basic_implicit_render.rb:6
#2 AbstractController::Base#process_action(method_name="index", args=[]) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.2.0.alpha/lib/abstract_controller/base.rb:214
#3 ActionController::Rendering#process_action(#arg_rest=nil) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.2.0.alpha/lib/action_controller/metal/rendering.rb:53
#4 block in process_action at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actionpack-7.2.0.alpha/lib/abstract_controller/callbacks.rb:221
#5 block in run_callbacks at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/activesupport-7.2.0.alpha/lib/active_support/callbacks.rb:118
#6 ActionText::Rendering::ClassMethods#with_renderer(renderer=#<PostsController:0x0000000000af78>) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actiontext-7.2.0.alpha/lib/action_text/rendering.rb:20
#7 block {|controller=#<PostsController:0x0000000000af78>, action=#<Proc:0x00007fd91985f1c0 /Users/st0012/...|} in <class:Engine> (4 levels) at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/actiontext-7.2.0.alpha/lib/action_text/engine.rb:69
#8 [C] BasicObject#instance_exec at ~/.rbenv/versions/3.0.1/lib/ruby/gems/3.0.0/gems/activesupport-7.2.0.alpha/lib/active_support/callbacks.rb:127
..... and more
```

View File

@ -331,6 +331,11 @@
description: >
This guide provides steps to be followed when you upgrade your
applications to a newer version of Ruby on Rails.
-
name: Version 7.2 - ?
url: 7_2_release_notes.html
description: Release notes for Rails 7.1.
work_in_progress: true
-
name: Version 7.1 - ?
url: 7_1_release_notes.html

View File

@ -53,7 +53,7 @@ For unsupported series, bug fixes may coincidentally land in a stable branch,
but won't be released in an official version. It is recommended to point your
application at the stable branch using Git for unsupported versions.
**Currently included series:** `7.1.Z`.
**Currently included series:** `7.2.Z`.
Security Issues
---------------
@ -78,7 +78,7 @@ there could be breaking changes in the security release. A security release
should only contain the changes needed to ensure the app is secure so that it's
easier for applications to remain upgraded.
**Currently included series:** `7.1.Z`, `7.0.Z`, `6.1.Z`.
**Currently included series:** `7.2.Z`, `7.1.Z`.
Severe Security Issues
----------------------
@ -87,7 +87,7 @@ For severe security issues all releases in the current major series, and also th
last release in the previous major series will receive patches and new versions. The
classification of the security issue is judged by the core team.
**Currently included series:** `7.1.Z`, `7.0.Z`, `6.1.Z`.
**Currently included series:** `7.2.Z`, `7.1.Z`, `7.0.Z`, `6.1.Z`.
Unsupported Release Series
--------------------------

View File

@ -63,7 +63,7 @@ $ bin/rails app:update
conflict config/application.rb
Overwrite /myapp/config/application.rb? (enter "h" for help) [Ynaqdh]
force config/application.rb
create config/initializers/new_framework_defaults_7_0.rb
create config/initializers/new_framework_defaults_7_2.rb
...
```
@ -75,6 +75,11 @@ The new Rails version might have different configuration defaults than the previ
To allow you to upgrade to new defaults one by one, the update task has created a file `config/initializers/new_framework_defaults_X.Y.rb` (with the desired Rails version in the filename). You should enable the new configuration defaults by uncommenting them in the file; this can be done gradually over several deployments. Once your application is ready to run with new defaults, you can remove this file and flip the `config.load_defaults` value.
Upgrading from Rails 7.1 to Rails 7.2
-------------------------------------
For more information on changes made to Rails 7.2 please see the [release notes](7_2_release_notes.html).
Upgrading from Rails 7.0 to Rails 7.1
-------------------------------------

View File

@ -1,816 +1,2 @@
## Rails 7.1.0.rc1 (September 27, 2023) ##
* Require `concurrent-ruby` in `config/puma.rb` so that Puma can boot in
production when `WEB_CONCURRENCY` is not explicitly specified.
Fixes #49323.
*Matt Brictson*
* Raise error when generating attribute with dangerous name.
The following will now raise an error as `save` and `hash` are already
defined by Active Record.
```bash
$ bin/rails generate model Post save
$ bin/rails generate model Post hash
```
*Petrik de Heus*
## Rails 7.1.0.beta1 (September 13, 2023) ##
* Add ability to show slow tests to the test runner
```bash
$ bin/test --profile # additionally prints 10 (default) slowest tests
# or
$ bin/test --profile 20 # prints 20 slowest tests
```
*fatkodima*
* `rails new --javascript` generator now supports Bun
```bash
$ rails new my_new_app --javascript=bun
```
*Jason Meller*
* bin/setup uses `bun` instead of `yarn` when generated an app with bun
Use `bun install` on `bin/setup` when using `bun`.
*Cadu Ribeiro*
* `config/application.rb` now includes
```ruby
config.autoload_lib(ignore: %w(assets tasks))
```
In practice, this means that new 7.1 applications autoload from `lib` out of the box.
*Xavier Noria*
* Add an option to start rails console in sandbox mode by default
`sandbox_by_default` option is added to start rails console in sandbox
mode by default. With this option turned on, `--no-sandbox` must be
specified to start rails in non-sandbox mode.
Note that this option is ignored when rails environment is development
or test.
*Shouichi Kamiya*
* Omit `webdrivers` gem dependency from `Gemfile` template
*Sean Doyle*
* Support filtering tests by line ranges
The new syntax allows you to filter tests by line ranges. For example, the
following command runs tests from line 10 to 20.
```bash
$ rails test test/models/user_test.rb:10-20
```
*Shouichi Kamiya*, *Seonggi Yang*, *oljfte*, *Ryohei UEDA*
* Update default scaffold templates to set 303 (See Other) as status code
on redirect for the update action for XHR requests other than GET or POST
to avoid issues (e.g browsers trying to follow the redirect using the
original request method resulting in double PATCH/PUT)
*Guillermo Iguaran*
* The new `config.autoload_lib_once` is similar to `config.autoload_lib`,
except that it adds `lib` to `config.autoload_once_paths` instead.
By calling `config.autoload_lib_once`, classes and modules in `lib` can be
autoloaded, even from application initializers, but won't be reloaded.
Please, see further details in the [autoloading
guide](https://guides.rubyonrails.org/v7.1/autoloading_and_reloading_constants.html).
*Xavier Noria*
* Add `config.action_dispatch.debug_exception_log_level` to configure the log
level used by `ActionDispatch::DebugExceptions`.
The default is `:fatal`, but with `load_defaults "7.1"` the default will be
`:error`.
*Hartley McGuire*
* Add `DATABASE` option to `railties:install:migrations`
This allows you to specify which database the migrations should be copied to
when running `rails railties:install:migrations`.
```bash
$ rails railties:install:migrations DATABASE=animals
```
*Matthew Hirst*
* The new method `config.autoload_lib(ignore:)` provides a simple way to
autoload from `lib`:
```ruby
# config/application.rb
config.autoload_lib(ignore: %w(assets tasks))
```
Please, see further details in the [autoloading
guide](https://guides.rubyonrails.org/v7.1/autoloading_and_reloading_constants.html).
*Xavier Noria*
* Don't show secret_key_base for `Rails.application.config#inspect`.
Before:
```ruby
Rails.application.config.inspect
"#<Rails::Application::Configuration:0x00000001132b02a0 @root=... @secret_key_base=\"b3c631c314c0bbca50c1b2843150fe33\" ... >"
```
After:
```ruby
Rails.application.config.inspect
"#<Rails::Application::Configuration:0x00000001132b02a0>"
```
*Petrik de Heus*
* Deprecate calling `Rails.application.secrets`.
Rails `secrets` have been deprecated in favor of `credentials`.
Calling `Rails.application.secrets` should show a deprecation warning.
*Petrik de Heus*
* Store `secret_key_base` in `Rails.config` for local environments.
Rails `secrets` have been deprecated in favor of `credentials`.
For the local environments the `secret_key_base` is now stored in
`Rails.config.secret_key_base` instead of the soft deprecated
`Rails.application.secrets.secret_key_base`.
*Petrik de Heus*
* Enable force_ssl=true in production by default: Force all access to the app over SSL,
use Strict-Transport-Security, and use secure cookies
*Justin Searls*, *Aaron Patterson*, *Guillermo Iguaran*, *Vinícius Bispo*
* Add engine's draw paths to application route set, so that the application
can draw route files defined in engine paths.
*Gannon McGibbon*
* Support `VISUAL` environment variable for commands which open an editor,
and prefer it over `EDITOR`.
*Summer ☀️*
* Add engine's `test/fixtures` path to `fixture_paths` in `on_load` hook if
path exists and is under the Rails application root.
*Chris Salzberg*
* `bin/rails app:template` now runs `bundle install` and any `after_bundle`
blocks after the template is executed.
*Jonathan Hefner* and *Gerry Caulfield*
* Enable passing column size to migration generator
Previously you could pass a limit to the migration generator:
`rails generate migration CreateAuthor name:text{65535}`
Now, a size attribute can be passed to the migration generator:
`rails generate migration CreateAuthor name:text{medium}`
This generates a migration which includes the size attribute:
```ruby
class CreateAuthor < ActiveRecord::Migration[7.1]
def change
create_table :authors do |t|
t.text :name, size: :medium
end
end
end
```
*Josh Broughton*, *Hartley McGuire*
* Trying to set a config key with the same name of a method now raises:
```ruby
config.load_defaults = 7.0
# NoMethodError: Cannot assign to `load_defaults`, it is a configuration method
```
*Xavier Noria*
* Deprecate `secrets:edit/show` and remove `secrets:setup`
`bin/rails secrets:setup` has been deprecated since Rails 5.2 in favor of
credentials. This command has been removed.
`bin/rails secrets:show` and `bin/rails secrets:edit` have been deprecated
in favor of credentials.
Run `bin/rails credentials:help` for more information
*Petrik de Heus*
* `bin/rails --help` will now list only framework and plugin commands. Rake
tasks defined in `lib/tasks/*.rake` files will no longer be included. For a
list of those tasks, use `rake -T`.
*Jonathan Hefner*
* Allow calling `bin/rails restart` outside of app directory.
The following would previously fail with a "No Rakefile found" error.
```bash
$ blog/bin/rails restart
```
*Petrik de Heus*
* Support prerelease rubies in Gemfile template if RubyGems version is 3.3.13 or higher.
*Yasuo Honda*, *David Rodríguez*
* Autoloading setup honors root directories manually set by the user.
This is relevant for custom namespaces. For example, if you'd like classes
and modules under `app/services` to be defined in the `Services` namespace
without an extra `app/services/services` directory, this is now enough:
```ruby
# config/initializers/autoloading.rb
# The namespace has to exist.
#
# In this example we define the module on the spot. Could also be created
# elsewhere and its definition loaded here with an ordinary `require`. In
# any case, `push_dir` expects a class or module object.
module Services; end
Rails.autoloaders.main.push_dir("#{Rails.root}/app/services", namespace: Services)
```
Check the autoloading guide for further details.
*Xavier Noria*
* Railties now requires the irb gem as a dependency, which means when you install Rails, irb will also
be installed as a gem. Rails will then use the installed version of irb for its console instead of
relying on Ruby's built-in version.
This ensures that Rails has access to the most up-to-date and reliable version of irb for its console.
*Stan Lo*
* Use infinitive form for all rails command descriptions verbs.
*Petrik de Heus*
* Credentials commands (e.g. `bin/rails credentials:edit`) now respect
`config.credentials.content_path` and `config.credentials.key_path` when set
in `config/application.rb` or `config/environments/#{Rails.env}.rb`.
Before:
* `bin/rails credentials:edit` ignored `RAILS_ENV`, and would always edit
`config/credentials.yml.enc`.
* `bin/rails credentials:edit --environment foo` would create and edit
`config/credentials/foo.yml.enc`.
* If `config.credentials.content_path` or `config.credentials.key_path`
was set, `bin/rails credentials:edit` could not be used to edit the
credentials. Editing credentials required using `bin/rails
encrypted:edit path/to/credentials --key path/to/key`.
After:
* `bin/rails credentials:edit` will edit the credentials file that the app
would load for the current `RAILS_ENV`.
* `bin/rails credentials:edit` respects `config.credentials.content_path`
and `config.credentials.key_path` when set in `config/application.rb`
or `config/environments/#{Rails.env}.rb`.
* `bin/rails credentials:edit --environment foo` will create and edit
`config/credentials/foo.yml.enc` _if_ `config.credentials.content_path`
has not been set for the `foo` environment. Ultimately, it will edit
the credentials file that the app would load for the `foo` environment.
*Jonathan Hefner*
* Add descriptions for non-Rake commands when running `rails -h`.
*Petrik de Heus*
* Show relevant commands when calling help
When running `rails -h` or just `rails` outside a Rails application,
Rails outputs all options for running the `rails new` command. This can be
confusing to users when they probably want to see the common Rails commands.
Instead, we should always show the common commands when running `rails -h`
inside or outside a Rails application.
As the relevant commands inside a Rails application differ from the
commands outside an application, the help USAGE file has been split to
show the most relevant commands for the context.
*Petrik de Heus*
* Add Rails::HealthController#show and map it to /up for newly generated applications.
Load balancers and uptime monitors all need a basic endpoint to tell whether the app is up.
This is a good starting point that'll work in many situations.
*DHH*
* Only use HostAuthorization middleware if `config.hosts` is not empty
*Hartley McGuire*
* Raise an exception when a `before_action`'s "only" or "except" filter
options reference an action that doesn't exist. This will be enabled by
default but can be overridden via config.
```ruby
# config/environments/production.rb
config.action_controller.raise_on_missing_callback_actions = false
```
*Jess Bees*
* Use physical processor count as the default Puma worker count in production.
This can be overridden by setting `ENV["WEB_CONCURRENCY"]` or editing the
generated "config/puma.rb" directly.
*DHH*
* Add Docker files by default to new apps: Dockerfile, .dockerignore, bin/docker-entrypoint.
These files can be skipped with `--skip-docker`. They're intended as a starting point for
a production deploy of the application. Not intended for development (see Docked Rails for that).
Example:
```bash
$ docker build -t app .
$ docker volume create app-storage
$ docker run --rm -it -v app-storage:/rails/storage -p 3000:3000 --env RAILS_MASTER_KEY=<see config/master.key> app
```
You can also start a console or a runner from this image:
```bash
$ docker run --rm -it -v app-storage:/rails/storage --env RAILS_MASTER_KEY=<see config/master.key> app console
```
To create a multi-platform image on Apple Silicon to deploy on AMD or Intel and push to Docker Hub for user/app:
```bash
$ docker login -u <user>
$ docker buildx create --use
$ docker buildx build --push --platform=linux/amd64,linux/arm64 -t <user/image> .
```
*DHH, Sam Ruby*
* Add ENV["SECRET_KEY_BASE_DUMMY"] for starting production environment with a generated secret base key,
which can be used to run tasks like `assets:precompile` without making the RAILS_MASTER_KEY available
to the build process.
Dockerfile layer example:
```
RUN SECRET_KEY_BASE_DUMMY=1 bundle exec rails assets:precompile
```
*DHH*
* Show descriptions for all commands in Rails help
When calling `rails help` most commands missed their description. We now
show the same descriptions as shown in `rails -T`.
*Petrik de Heus*
* Always generate the storage/ directory with rails new to ensure there's a stable place to
put permanent files, and a single mount point for containers to map. Then default sqlite3 databases
to live there instead of db/, which is only meant for configuration, not data.
*DHH*
* Rails console now disables `IRB`'s autocompletion feature in production by default.
Setting `IRB_USE_AUTOCOMPLETE=true` can override this default.
*Stan Lo*
* Add `config.precompile_filter_parameters`, which enables precompilation of
`config.filter_parameters` using `ActiveSupport::ParameterFilter.precompile_filters`.
Precompilation can improve filtering performance, depending on the quantity
and types of filters.
`config.precompile_filter_parameters` defaults to `true` for
`config.load_defaults 7.1` and above.
*Jonathan Hefner*
* Add `after_routes_loaded` hook to `Rails::Railtie::Configuration` for
engines to add a hook to be called after application routes have been
loaded.
```ruby
MyEngine.config.after_routes_loaded do
# code that must happen after routes have been loaded
end
```
*Chris Salzberg*
* Send 303 See Other status code back for the destroy action on newly generated
scaffold controllers.
*Tony Drake*
* Add `Rails.application.deprecators` as a central point to manage deprecators
for an application.
Individual deprecators can be added and retrieved from the collection:
```ruby
Rails.application.deprecators[:my_gem] = ActiveSupport::Deprecation.new("2.0", "MyGem")
Rails.application.deprecators[:other_gem] = ActiveSupport::Deprecation.new("3.0", "OtherGem")
```
And the collection's configuration methods affect all deprecators in the
collection:
```ruby
Rails.application.deprecators.debug = true
Rails.application.deprecators[:my_gem].debug
# => true
Rails.application.deprecators[:other_gem].debug
# => true
```
Additionally, all deprecators in the collection can be silenced for the
duration of a given block:
```ruby
Rails.application.deprecators.silence do
Rails.application.deprecators[:my_gem].warn # => silenced (no warning)
Rails.application.deprecators[:other_gem].warn # => silenced (no warning)
end
```
*Jonathan Hefner*
* Move dbconsole logic to Active Record connection adapter.
Instead of hosting the connection logic in the command object, the
database adapter should be responsible for connecting to a console session.
This patch moves #find_cmd_and_exec to the adapter and exposes a new API to
lookup the adapter class without instantiating it.
*Gannon McGibbon*, *Paarth Madan*
* Add `Rails.application.message_verifiers` as a central point to configure
and create message verifiers for an application.
This allows applications to, for example, rotate old `secret_key_base`
values:
```ruby
config.before_initialize do |app|
app.message_verifiers.rotate(secret_key_base: "old secret_key_base")
end
```
And for libraries to create preconfigured message verifiers:
```ruby
ActiveStorage.verifier = Rails.application.message_verifiers["ActiveStorage"]
```
*Jonathan Hefner*
* Support MySQL's ssl-mode option for the dbconsole command.
Verifying the identity of the database server requires setting the ssl-mode
option to VERIFY_CA or VERIFY_IDENTITY. This option was previously ignored
for the dbconsole command.
*Petrik de Heus*
* Delegate application record generator description to orm hooked generator.
*Gannon McGibbon*
* Show BCC recipients when present in Action Mailer previews.
*Akshay Birajdar*
* Extend `routes --grep` to also filter routes by matching against path.
Example:
```bash
$ bin/rails routes --grep /cats/1
Prefix Verb URI Pattern Controller#Action
cat GET /cats/:id(.:format) cats#show
PATCH /cats/:id(.:format) cats#update
PUT /cats/:id(.:format) cats#update
DELETE /cats/:id(.:format) cats#destroy
```
*Orhan Toy*
* Improve `rails runner` output when given a file path that doesn't exist.
*Tekin Suleyman*
* `config.allow_concurrency = false` now use a `Monitor` instead of a `Mutex`
This allows to enable `config.active_support.executor_around_test_case` even
when `config.allow_concurrency` is disabled.
*Jean Boussier*
* Add `routes --unused` option to detect extraneous routes.
Example:
```bash
$ bin/rails routes --unused
Found 2 unused routes:
Prefix Verb URI Pattern Controller#Action
one GET /one(.:format) action#one
two GET /two(.:format) action#two
```
*Gannon McGibbon*
* Add `--parent` option to controller generator to specify parent class of job.
Example:
`bin/rails g controller admin/users --parent=admin_controller` generates:
```ruby
class Admin::UsersController < AdminController
# ...
end
```
*Gannon McGibbon*
* In-app custom credentials templates are now supported. When a credentials
file does not exist, `rails credentials:edit` will now try to use
`lib/templates/rails/credentials/credentials.yml.tt` to generate the
credentials file, before falling back to the default template.
This allows e.g. an open-source Rails app (which would not include encrypted
credentials files in its repo) to include a credentials template, so that
users who install the app will get a custom pre-filled credentials file when
they run `rails credentials:edit`.
*Jonathan Hefner*
* Except for `dev` and `test` environments, newly generated per-environment
credentials files (e.g. `config/credentials/production.yml.enc`) now include
a `secret_key_base` for convenience, just as `config/credentials.yml.enc`
does.
*Jonathan Hefner*
* `--no-*` options now work with the app generator's `--minimal` option, and
are both comprehensive and precise. For example:
```bash
$ rails new my_cool_app --minimal
Based on the specified options, the following options will also be activated:
--skip-active-job [due to --minimal]
--skip-action-mailer [due to --skip-active-job, --minimal]
--skip-active-storage [due to --skip-active-job, --minimal]
--skip-action-mailbox [due to --skip-active-storage, --minimal]
--skip-action-text [due to --skip-active-storage, --minimal]
--skip-javascript [due to --minimal]
--skip-hotwire [due to --skip-javascript, --minimal]
--skip-action-cable [due to --minimal]
--skip-bootsnap [due to --minimal]
--skip-dev-gems [due to --minimal]
--skip-system-test [due to --minimal]
...
$ rails new my_cool_app --minimal --no-skip-active-storage
Based on the specified options, the following options will also be activated:
--skip-action-mailer [due to --minimal]
--skip-action-mailbox [due to --minimal]
--skip-action-text [due to --minimal]
--skip-javascript [due to --minimal]
--skip-hotwire [due to --skip-javascript, --minimal]
--skip-action-cable [due to --minimal]
--skip-bootsnap [due to --minimal]
--skip-dev-gems [due to --minimal]
--skip-system-test [due to --minimal]
...
```
*Brad Trick* and *Jonathan Hefner*
* Add `--skip-dev-gems` option to app generator to skip adding development
gems (like `web-console`) to the Gemfile.
*Brad Trick*
* Skip Active Storage and Action Mailer if Active Job is skipped.
*Étienne Barrié*
* Correctly check if frameworks are disabled when running app:update.
*Étienne Barrié* and *Paulo Barros*
* Delegate model generator description to orm hooked generator.
*Gannon McGibbon*
* Execute `rails runner` scripts inside the executor.
Enables error reporting, query cache, etc.
*Jean Boussier*
* Avoid booting in development then test for test tasks.
Running one of the rails test subtasks (e.g. test:system, test:models) would
go through Rake and cause the app to be booted twice. Now all the test:*
subtasks are defined as Thor tasks and directly load the test environment.
*Étienne Barrié*
* Deprecate `Rails::Generators::Testing::Behaviour` in favor of `Rails::Generators::Testing::Behavior`.
*Gannon McGibbon*
* Allow configuration of logger size for local and test environments
`config.log_file_size`
Defaults to `100` megabytes.
*Bernie Chiu*
* Enroll new apps in decrypted diffs of credentials by default. This behavior
can be opted out of with the app generator's `--skip-decrypted-diffs` flag.
*Jonathan Hefner*
* Support declarative-style test name filters with `bin/rails test`.
This makes it possible to run a declarative-style test such as:
```ruby
class MyTest < ActiveSupport::TestCase
test "does something" do
# ...
end
end
```
Using its declared name:
```bash
$ bin/rails test test/my_test.rb -n "does something"
```
Instead of having to specify its expanded method name:
```bash
$ bin/rails test test/my_test.rb -n test_does_something
```
*Jonathan Hefner*
* Add `--js` and `--skip-javascript` options to `rails new`
`--js` alias to `rails new --javascript ...`
Same as `-j`, e.g. `rails new --js esbuild ...`
`--skip-js` alias to `rails new --skip-javascript ...`
Same as `-J`, e.g. `rails new --skip-js ...`
*Dorian Marié*
* Allow relative paths with leading dot slash to be passed to `rails test`.
Fix `rails test ./test/model/post_test.rb` to run a single test file.
*Shouichi Kamiya* and *oljfte*
* Deprecate `config.enable_dependency_loading`. This flag addressed a limitation of the `classic` autoloader and has no effect nowadays. To fix this deprecation, please just delete the reference.
*Xavier Noria*
* Define `config.enable_reloading` to be `!config.cache_classes` for a more intuitive name. While `config.enable_reloading` and `config.reloading_enabled?` are preferred from now on, `config.cache_classes` is supported for backwards compatibility.
*Xavier Noria*
* Add JavaScript dependencies installation on bin/setup
Add `yarn install` to bin/setup when using esbuild, webpack, or rollout.
*Carlos Ribeiro*
* Use `controller_class_path` in `Rails::Generators::NamedBase#route_url`
The `route_url` method now returns the correct path when generating
a namespaced controller with a top-level model using `--model-name`.
Previously, when running this command:
```bash
$ bin/rails generate scaffold_controller Admin/Post --model-name Post
```
the comments above the controller action would look like:
``` ruby
# GET /posts
def index
@posts = Post.all
end
```
afterwards, they now look like this:
``` ruby
# GET /admin/posts
def index
@posts = Post.all
end
```
Fixes #44662.
*Andrew White*
* No longer add autoloaded paths to `$LOAD_PATH`.
This means it won't be possible to load them with a manual `require` call, the class or module can be referenced instead.
Reducing the size of `$LOAD_PATH` speed-up `require` calls for apps not using `bootsnap`, and reduce the
size of the `bootsnap` cache for the others.
*Jean Boussier*
* Remove default `X-Download-Options` header
This header is currently only used by Internet Explorer which
will be discontinued in 2022 and since Rails 7 does not fully
support Internet Explorer this header should not be a default one.
*Harun Sabljaković*
* Add .node-version files for Rails apps that use Node.js
Node version managers that make use of this file:
https://github.com/shadowspawn/node-version-usage#node-version-file-usage
The generated Dockerfile will use the same node version.
*Sam Ruby*
Please check [7-0-stable](https://github.com/rails/rails/blob/7-0-stable/railties/CHANGELOG.md) for previous changes.
Please check [7-1-stable](https://github.com/rails/rails/blob/7-1-stable/railties/CHANGELOG.md) for previous changes.

View File

@ -329,6 +329,8 @@ module Rails
action_text.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor
end
end
when "7.2"
load_defaults "7.1"
else
raise "Unknown version #{target_version.to_s.inspect}"
end

View File

@ -8,9 +8,9 @@ module Rails
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -1,223 +0,0 @@
# Be sure to restart your server when you modify this file.
#
# This file eases your Rails 7.1 framework defaults upgrade.
#
# Uncomment each configuration one by one to switch to the new default.
# Once your application is ready to run with all new defaults, you can remove
# this file and set the `config.load_defaults` to `7.1`.
#
# Read the Guide for Upgrading Ruby on Rails for more info on each option.
# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html
# No longer add autoloaded paths into `$LOAD_PATH`. This means that you won't be able
# to manually require files that are managed by the autoloader, which you shouldn't do anyway.
# This will reduce the size of the load path, making `require` faster if you don't use bootsnap, or reduce the size
# of the bootsnap cache if you use it.
# Rails.application.config.add_autoload_paths_to_load_path = false
# Remove the default X-Download-Options headers since it is used only by Internet Explorer.
# If you need to support Internet Explorer, add back `"X-Download-Options" => "noopen"`.
# Rails.application.config.action_dispatch.default_headers = {
# "X-Frame-Options" => "SAMEORIGIN",
# "X-XSS-Protection" => "0",
# "X-Content-Type-Options" => "nosniff",
# "X-Permitted-Cross-Domain-Policies" => "none",
# "Referrer-Policy" => "strict-origin-when-cross-origin"
# }
# Do not treat an `ActionController::Parameters` instance
# as equal to an equivalent `Hash` by default.
# Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality = false
# Active Record Encryption now uses SHA-256 as its hash digest algorithm. Important: If you have
# data encrypted with previous Rails versions, there are two scenarios to consider:
#
# 1. If you have +config.active_support.key_generator_hash_digest_class+ configured as SHA1 (the default
# before Rails 7.0), you need to configure SHA-1 for Active Record Encryption too:
# Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA1
# 2. If you have +config.active_support.key_generator_hash_digest_class+ configured as SHA256 (the new default
# in 7.0), then you need to configure SHA-256 for Active Record Encryption:
# Rails.application.config.active_record.encryption.hash_digest_class = OpenSSL::Digest::SHA256
#
# If you don't currently have data encrypted with Active Record encryption, you can disable this setting to
# configure the default behavior starting 7.1+:
# Rails.application.config.active_record.encryption.support_sha1_for_non_deterministic_encryption = false
# No longer run after_commit callbacks on the first of multiple Active Record
# instances to save changes to the same database row within a transaction.
# Instead, run these callbacks on the instance most likely to have internal
# state which matches what was committed to the database, typically the last
# instance to save.
# Rails.application.config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction = false
# Configures SQLite with a strict strings mode, which disables double-quoted string literals.
#
# SQLite has some quirks around double-quoted string literals.
# It first tries to consider double-quoted strings as identifier names, but if they don't exist
# it then considers them as string literals. Because of this, typos can silently go unnoticed.
# For example, it is possible to create an index for a non existing column.
# See https://www.sqlite.org/quirks.html#double_quoted_string_literals_are_accepted for more details.
# Rails.application.config.active_record.sqlite3_adapter_strict_strings_by_default = true
# Disable deprecated singular associations names
# Rails.application.config.active_record.allow_deprecated_singular_associations_name = false
# Enable the Active Job `BigDecimal` argument serializer, which guarantees
# roundtripping. Without this serializer, some queue adapters may serialize
# `BigDecimal` arguments as simple (non-roundtrippable) strings.
#
# When deploying an application with multiple replicas, old (pre-Rails 7.1)
# replicas will not be able to deserialize `BigDecimal` arguments from this
# serializer. Therefore, this setting should only be enabled after all replicas
# have been successfully upgraded to Rails 7.1.
# Rails.application.config.active_job.use_big_decimal_serializer = true
# Specify if an `ArgumentError` should be raised if `Rails.cache` `fetch` or
# `write` are given an invalid `expires_at` or `expires_in` time.
# Options are `true`, and `false`. If `false`, the exception will be reported
# as `handled` and logged instead.
# Rails.application.config.active_support.raise_on_invalid_cache_expiration_time = true
# Specify whether Query Logs will format tags using the SQLCommenter format
# (https://open-telemetry.github.io/opentelemetry-sqlcommenter/), or using the legacy format.
# Options are `:legacy` and `:sqlcommenter`.
# Rails.application.config.active_record.query_log_tags_format = :sqlcommenter
# Specify the default serializer used by `MessageEncryptor` and `MessageVerifier`
# instances.
#
# The legacy default is `:marshal`, which is a potential vector for
# deserialization attacks in cases where a message signing secret has been
# leaked.
#
# In Rails 7.1, the new default is `:json_allow_marshal` which serializes and
# deserializes with `ActiveSupport::JSON`, but can fall back to deserializing
# with `Marshal` so that legacy messages can still be read.
#
# In Rails 7.2, the default will become `:json` which serializes and
# deserializes with `ActiveSupport::JSON` only.
#
# Alternatively, you can choose `:message_pack` or `:message_pack_allow_marshal`,
# which serialize with `ActiveSupport::MessagePack`. `ActiveSupport::MessagePack`
# can roundtrip some Ruby types that are not supported by JSON, and may provide
# improved performance, but it requires the `msgpack` gem.
#
# For more information, see
# https://guides.rubyonrails.org/v7.1/configuring.html#config-active-support-message-serializer
#
# If you are performing a rolling deploy of a Rails 7.1 upgrade, wherein servers
# that have not yet been upgraded must be able to read messages from upgraded
# servers, first deploy without changing the serializer, then set the serializer
# in a subsequent deploy.
# Rails.application.config.active_support.message_serializer = :json_allow_marshal
# Enable a performance optimization that serializes message data and metadata
# together. This changes the message format, so messages serialized this way
# cannot be read by older versions of Rails. However, messages that use the old
# format can still be read, regardless of whether this optimization is enabled.
#
# To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
# not yet been upgraded must be able to read messages from upgraded servers,
# leave this optimization off on the first deploy, then enable it on a
# subsequent deploy.
# Rails.application.config.active_support.use_message_serializer_for_metadata = true
# Set the maximum size for Rails log files.
#
# `config.load_defaults 7.1` does not set this value for environments other than
# development and test.
#
# if Rails.env.local?
# Rails.application.config.log_file_size = 100 * 1024 * 1024
# end
# Enable raising on assignment to attr_readonly attributes. The previous
# behavior would allow assignment but silently not persist changes to the
# database.
# Rails.application.config.active_record.raise_on_assign_to_attr_readonly = true
# Enable validating only parent-related columns for presence when the parent is mandatory.
# The previous behavior was to validate the presence of the parent record, which performed an extra query
# to get the parent every time the child record was updated, even when parent has not changed.
# Rails.application.config.active_record.belongs_to_required_validates_foreign_key = false
# Enable precompilation of `config.filter_parameters`. Precompilation can
# improve filtering performance, depending on the quantity and types of filters.
# Rails.application.config.precompile_filter_parameters = true
# Enable before_committed! callbacks on all enrolled records in a transaction.
# The previous behavior was to only run the callbacks on the first copy of a record
# if there were multiple copies of the same record enrolled in the transaction.
# Rails.application.config.active_record.before_committed_on_all_records = true
# Disable automatic column serialization into YAML.
# To keep the historic behavior, you can set it to `YAML`, however it is
# recommended to explicitly define the serialization method for each column
# rather than to rely on a global default.
# Rails.application.config.active_record.default_column_serializer = nil
# Enable a performance optimization that serializes Active Record models
# in a faster and more compact way.
#
# To perform a rolling deploy of a Rails 7.1 upgrade, wherein servers that have
# not yet been upgraded must be able to read caches from upgraded servers,
# leave this optimization off on the first deploy, then enable it on a
# subsequent deploy.
# Rails.application.config.active_record.marshalling_format_version = 7.1
# Run `after_commit` and `after_*_commit` callbacks in the order they are defined in a model.
# This matches the behaviour of all other callbacks.
# In previous versions of Rails, they ran in the inverse order.
# Rails.application.config.active_record.run_after_transaction_callbacks_in_order_defined = true
# Whether a `transaction` block is committed or rolled back when exited via `return`, `break` or `throw`.
#
# Rails.application.config.active_record.commit_transaction_on_non_local_return = true
# Controls when to generate a value for <tt>has_secure_token</tt> declarations.
#
# Rails.application.config.active_record.generate_secure_token_on = :initialize
# ** Please read carefully, this must be configured in config/application.rb **
# Change the format of the cache entry.
# Changing this default means that all new cache entries added to the cache
# will have a different format that is not supported by Rails 7.0
# applications.
# Only change this value after your application is fully deployed to Rails 7.1
# and you have no plans to rollback.
# When you're ready to change format, add this to `config/application.rb` (NOT
# this file):
# config.active_support.cache_format_version = 7.1
# Configure Action View to use HTML5 standards-compliant sanitizers when they are supported on your
# platform.
#
# `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action View to use HTML5-compliant
# sanitizers if they are supported, else fall back to HTML4 sanitizers.
#
# In previous versions of Rails, Action View always used `Rails::HTML4::Sanitizer` as its vendor.
#
# Rails.application.config.action_view.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor
# Configure Action Text to use an HTML5 standards-compliant sanitizer when it is supported on your
# platform.
#
# `Rails::HTML::Sanitizer.best_supported_vendor` will cause Action Text to use HTML5-compliant
# sanitizers if they are supported, else fall back to HTML4 sanitizers.
#
# In previous versions of Rails, Action Text always used `Rails::HTML4::Sanitizer` as its vendor.
#
# Rails.application.config.action_text.sanitizer_vendor = Rails::HTML::Sanitizer.best_supported_vendor
# Configure the log level used by the DebugExceptions middleware when logging
# uncaught exceptions during requests
# Rails.application.config.action_dispatch.debug_exception_log_level = :error
# Configure the test helpers in Action View, Action Dispatch, and rails-dom-testing to use HTML5
# parsers.
#
# Nokogiri::HTML5 isn't supported on JRuby, so JRuby applications must set this to :html4.
#
# In previous versions of Rails, these test helpers always used an HTML4 parser.
#
# Rails.application.config.dom_testing_default_html_version = :html5

View File

@ -0,0 +1,10 @@
# Be sure to restart your server when you modify this file.
#
# This file eases your Rails 7.2 framework defaults upgrade.
#
# Uncomment each configuration one by one to switch to the new default.
# Once your application is ready to run with all new defaults, you can remove
# this file and set the `config.load_defaults` to `7.2`.
#
# Read the Guide for Upgrading Ruby on Rails for more info on each option.
# https://guides.rubyonrails.org/upgrading_ruby_on_rails.html

View File

@ -8,9 +8,9 @@ module Rails
module VERSION
MAJOR = 7
MINOR = 1
MINOR = 2
TINY = 0
PRE = "rc1"
PRE = "alpha"
STRING = [MAJOR, MINOR, TINY, PRE].compact.join(".")
end

View File

@ -29,24 +29,31 @@
integrity sha512-KE/SxsDqNs3rrWwFHcRh15ZLVFrI0YoZtgAdIyIq9k5hUNmiWRXXThPomIxHuL20sLdgzbDFyvkUMna14bvtrw==
"@rails/actioncable@file:/workspaces/rails/actioncable":
version "7.1.0-rc1"
version "7.2.0-alpha"
resolved "file:actioncable"
"@rails/actiontext@file:/workspaces/rails/actiontext":
version "7.1.0-rc1"
version "7.2.0-alpha"
resolved "file:actiontext"
dependencies:
"@rails/activestorage" ">= 7.1.0-alpha"
webpack "^4.17.1"
"@rails/activestorage@>= 7.1.0-alpha", "@rails/activestorage@file:/workspaces/rails/activestorage":
version "7.1.0-rc1"
"@rails/activestorage@>= 7.1.0-alpha":
version "7.1.0-beta1"
resolved "https://registry.npmjs.org/@rails/activestorage/-/activestorage-7.1.0-beta1.tgz"
integrity sha512-5qQ5/65tBOVeFMgGq8F+PhXKrmBLMAnVpyZAe8WsCW5DbINRD8l8ysA8+zBmwCIxBMqn+M9hZoQVjuMPr35bvQ==
dependencies:
spark-md5 "^3.0.1"
"@rails/activestorage@file:/workspaces/rails/activestorage":
version "7.2.0-alpha"
resolved "file:activestorage"
dependencies:
spark-md5 "^3.0.1"
"@rails/ujs@file:/workspaces/rails/actionview":
version "7.1.0-rc1"
version "7.2.0-alpha"
resolved "file:actionview"
"@rollup/plugin-commonjs@^19.0.1":