From bf59d363fb338e7b7fea387516934867aaee6840 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rafael=20Mendon=C3=A7a=20Fran=C3=A7a?= Date: Mon, 13 May 2024 16:55:52 +0000 Subject: [PATCH] Clean CHANGELOG for 8.0 --- actioncable/CHANGELOG.md | 19 - actionmailbox/CHANGELOG.md | 4 - actionmailer/CHANGELOG.md | 7 - actionpack/CHANGELOG.md | 133 ------ actiontext/CHANGELOG.md | 41 -- actionview/CHANGELOG.md | 95 ----- activejob/CHANGELOG.md | 63 --- activemodel/CHANGELOG.md | 20 - activerecord/CHANGELOG.md | 816 ------------------------------------- activestorage/CHANGELOG.md | 72 ---- activesupport/CHANGELOG.md | 231 ----------- railties/CHANGELOG.md | 335 --------------- 12 files changed, 1836 deletions(-) diff --git a/actioncable/CHANGELOG.md b/actioncable/CHANGELOG.md index b300c38897..5b01ff530c 100644 --- a/actioncable/CHANGELOG.md +++ b/actioncable/CHANGELOG.md @@ -1,21 +1,2 @@ -* Record ping on every Action Cable message. - - Previously only `ping` and `welcome` message types were keeping the connection active. - Now every Action Cable message updates the `pingedAt` value, preventing the connection - from being marked as stale. - - *yauhenininjia* - -* Add two new assertion methods for Action Cable test cases: `assert_has_no_stream` - and `assert_has_no_stream_for`. These methods can be used to assert that a - stream has been stopped, e.g. via `stop_stream` or `stop_stream_for`. They complement - the already existing `assert_has_stream` and `assert_has_stream_for` methods. - - ```ruby - assert_has_no_stream "messages" - assert_has_no_stream_for User.find(42) - ``` - - *Sebastian Pöll*, *Junichi Sato* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actioncable/CHANGELOG.md) for previous changes. diff --git a/actionmailbox/CHANGELOG.md b/actionmailbox/CHANGELOG.md index ce7c62aa93..0ac7142166 100644 --- a/actionmailbox/CHANGELOG.md +++ b/actionmailbox/CHANGELOG.md @@ -1,6 +1,2 @@ -* Fix all Action Mailbox database related models to respect - `ActiveRecord::Base.table_name_prefix` configuration. - - *Chedli Bourguiba* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actionmailbox/CHANGELOG.md) for previous changes. diff --git a/actionmailer/CHANGELOG.md b/actionmailer/CHANGELOG.md index 44c7434cad..566e3edebc 100644 --- a/actionmailer/CHANGELOG.md +++ b/actionmailer/CHANGELOG.md @@ -1,9 +1,2 @@ -* Remove deprecated params via `:args` for `assert_enqueued_email_with`. - - *Rafael Mendonça França* - -* Remove deprecated `config.action_mailer.preview_path`. - - *Rafael Mendonça França* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actionmailer/CHANGELOG.md) for previous changes. diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index a07f6025e9..f19cf66a9c 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,135 +1,2 @@ -* Fix `Mime::Type.parse` handling type parameters for HTTP Accept headers. - - *Taylor Chaparro* - -* Fix the error page that is displayed when a view template is missing to account for nested controller paths in the - suggested correct location for the missing template. - - *Joshua Young* - -* Add `save_and_open_page` helper to IntegrationTest - `save_and_open_page` is a helpful helper to keep a short feedback loop when working on system tests. - A similar helper with matching signature has been added to integration tests. - - *Joé Dupuis* - -* Fix a regression in 7.1.3 passing a `to:` option without a controller when the controller is already defined by a scope. - - ```ruby - Rails.application.routes.draw do - controller :home do - get "recent", to: "recent_posts" - end - end - ``` - - *Étienne Barrié* - -* Request Forgery takes relative paths into account. - - *Stefan Wienert* - -* Add ".test" as a default allowed host in development to ensure smooth golden-path setup with puma.dev. - - *DHH* - -* Add `allow_browser` to set minimum browser versions for the application. - - A browser that's blocked will by default be served the file in `public/406-unsupported-browser.html` with a HTTP status code of "406 Not Acceptable". - - ```ruby - class ApplicationController < ActionController::Base - # Allow only browsers natively supporting webp images, web push, badges, import maps, CSS nesting + :has - allow_browser versions: :modern - end - - class ApplicationController < ActionController::Base - # All versions of Chrome and Opera will be allowed, but no versions of "internet explorer" (ie). Safari needs to be 16.4+ and Firefox 121+. - allow_browser versions: { safari: 16.4, firefox: 121, ie: false } - end - - class MessagesController < ApplicationController - # In addition to the browsers blocked by ApplicationController, also block Opera below 104 and Chrome below 119 for the show action. - allow_browser versions: { opera: 104, chrome: 119 }, only: :show - end - ``` - - *DHH* - -* Add rate limiting API. - - ```ruby - class SessionsController < ApplicationController - rate_limit to: 10, within: 3.minutes, only: :create - end - - class SignupsController < ApplicationController - rate_limit to: 1000, within: 10.seconds, - by: -> { request.domain }, with: -> { redirect_to busy_controller_url, alert: "Too many signups!" }, only: :new - end - ``` - - *DHH*, *Jean Boussier* - -* Add `image/svg+xml` to the compressible content types of ActionDispatch::Static - - *Georg Ledermann* - -* Add instrumentation for ActionController::Live#send_stream - - Allows subscribing to `send_stream` events. The event payload contains the filename, disposition, and type. - - *Hannah Ramadan* - -* Add support for `with_routing` test helper in `ActionDispatch::IntegrationTest` - - *Gannon McGibbon* - -* Remove deprecated support to set `Rails.application.config.action_dispatch.show_exceptions` to `true` and `false`. - - *Rafael Mendonça França* - -* Remove deprecated `speaker`, `vibrate`, and `vr` permissions policy directives. - - *Rafael Mendonça França* - -* Remove deprecated `Rails.application.config.action_dispatch.return_only_request_media_type_on_content_type`. - - *Rafael Mendonça França* - -* Deprecate `Rails.application.config.action_controller.allow_deprecated_parameters_hash_equality`. - - *Rafael Mendonça França* - -* Remove deprecated comparison between `ActionController::Parameters` and `Hash`. - - *Rafael Mendonça França* - -* Remove deprecated constant `AbstractController::Helpers::MissingHelperError`. - - *Rafael Mendonça França* - -* Fix a race condition that could cause a `Text file busy - chromedriver` - error with parallel system tests - - *Matt Brictson* - -* Add `racc` as a dependency since it will become a bundled gem in Ruby 3.4.0 - - *Hartley McGuire* -* Remove deprecated constant `ActionDispatch::IllegalStateError`. - - *Rafael Mendonça França* - -* Add parameter filter capability for redirect locations. - - It uses the `config.filter_parameters` to match what needs to be filtered. - The result would be like this: - - Redirected to http://secret.foo.bar?username=roque&password=[FILTERED] - - Fixes #14055. - - *Roque Pinel*, *Trevor Turk*, *tonytonyjan* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actionpack/CHANGELOG.md) for previous changes. diff --git a/actiontext/CHANGELOG.md b/actiontext/CHANGELOG.md index f4e3c5e204..0a0a3e2521 100644 --- a/actiontext/CHANGELOG.md +++ b/actiontext/CHANGELOG.md @@ -1,43 +1,2 @@ -* Use `includes` instead of `eager_load` for `with_all_rich_text`. - - *Petrik de Heus* - -* Delegate `ActionText::Content#deconstruct` to `Nokogiri::XML::DocumentFragment#elements` - - ```ruby - content = ActionText::Content.new <<~HTML -

Hello, world

- -
The body
- HTML - - content => [h1, div] - - assert_pattern { h1 => { content: "Hello, world" } } - assert_pattern { div => { content: "The body" } } - ``` - - *Sean Doyle* - -* Fix all Action Text database related models to respect - `ActiveRecord::Base.table_name_prefix` configuration. - - *Chedli Bourguiba* - -* Compile ESM package that can be used directly in the browser as actiontext.esm.js - - *Matias Grunberg* - -* Fix using actiontext.js with Sprockets - - *Matias Grunberg* - -* Upgrade Trix to 2.0.7 - - *Hartley McGuire* - -* Fix using Trix with Sprockets - - *Hartley McGuire* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actiontext/CHANGELOG.md) for previous changes. diff --git a/actionview/CHANGELOG.md b/actionview/CHANGELOG.md index 84659d5596..17b17db05e 100644 --- a/actionview/CHANGELOG.md +++ b/actionview/CHANGELOG.md @@ -1,97 +1,2 @@ -* Add queries count to template rendering instrumentation - - ``` - # Before - Completed 200 OK in 3804ms (Views: 41.0ms | ActiveRecord: 33.5ms | Allocations: 112788) - - # After - Completed 200 OK in 3804ms (Views: 41.0ms | ActiveRecord: 33.5ms (2 queries, 1 cached) | Allocations: 112788) - ``` - - *fatkodima* - -* Raise `ArgumentError` if `:renderable` object does not respond to `#render_in` - - *Sean Doyle* - -* Add the `nonce: true` option for `stylesheet_link_tag` helper to support automatic nonce generation for Content Security Policy. - Works the same way as `javascript_include_tag nonce: true` does. - - *Akhil G Krishnan*, *AJ Esler* - -* Parse `ActionView::TestCase#rendered` HTML content as `Nokogiri::XML::DocumentFragment` instead of `Nokogiri::XML::Document` - - *Sean Doyle* - -* Rename `ActionView::TestCase::Behavior::Content` to `ActionView::TestCase::Behavior::RenderedViewContent` - - Make `RenderedViewContent` inherit from `String`. Make private API with `:nodoc:` - - *Sean Doyle* - -* Deprecate passing `nil` as value for the `model:` argument to the `form_with` method. - - *Collin Jilbert* - -* Alias `field_set_tag` helper to `fieldset_tag` to match `
` element - - *Sean Doyle* - -* Deprecate passing content to void elements when using `tag.br` type tag builders. - - *Hartley McGuire* - -* Fix the `number_to_human_size` view helper to correctly work with negative numbers. - - *Earlopain* - -* Automatically discard the implicit locals injected by collection rendering for template that can't accept them - - When rendering a collection, two implicit variables are injected, which breaks templates with strict locals. - - Now they are only passed if the template will actually accept them. - - *Yasha Krasnou*, *Jean Boussier* - -* Fix `@rails/ujs` calling `start()` an extra time when using bundlers - - *Hartley McGuire*, *Ryunosuke Sato* - -* Fix the `capture` view helper compatibility with HAML and Slim - - When a blank string was captured in HAML or Slim (and possibly other template engines) - it would instead return the entire buffer. - - *Jean Boussier* - -* Updated `@rails/ujs` files to ignore certain data-* attributes when element is contenteditable. - - This fix was already landed in >= 7.0.4.3, < 7.1.0. - [[CVE-2023-23913](https://github.com/advisories/GHSA-xp5h-f8jf-rc8q)] - - *Ryunosuke Sato* - -* Added validation for HTML tag names in the `tag` and `content_tag` helper method. The `tag` and - `content_tag` method now checks that the provided tag name adheres to the HTML specification. If - an invalid HTML tag name is provided, the method raises an `ArgumentError` with an appropriate error - message. - - Examples: - - ```ruby - # Raises ArgumentError: Invalid HTML5 tag name: 12p - content_tag("12p") # Starting with a number - - # Raises ArgumentError: Invalid HTML5 tag name: "" - content_tag("") # Empty tag name - - # Raises ArgumentError: Invalid HTML5 tag name: div/ - tag("div/") # Contains a solidus - - # Raises ArgumentError: Invalid HTML5 tag name: "image file" - tag("image file") # Contains a space - ``` - - *Akhil G Krishnan* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/actionview/CHANGELOG.md) for previous changes. diff --git a/activejob/CHANGELOG.md b/activejob/CHANGELOG.md index 0600f443ac..cb1bf2ce45 100644 --- a/activejob/CHANGELOG.md +++ b/activejob/CHANGELOG.md @@ -1,65 +1,2 @@ -* All tests now respect the `active_job.queue_adapter` config - - Previously if you had set `config.active_job.queue_adapter` in your `config/application.rb` - or `config/environments/test.rb` file, the adapter you selected was previously not used consistently - across all tests. In some tests your adapter would be used, but other tests would use the `TestAdapter`. - - In Rails 7.2, all tests will respect the `queue_adapter` config if provided. If no config is provided, - the `TestAdapter` will continue to be used. - - See [#48585](https://github.com/rails/rails/pull/48585) for more details. - - *Alex Ghiculescu* - -* Make Active Job transaction aware when used conjointly with Active Record. - - A common mistake with Active Job is to enqueue jobs from inside a transaction, - causing them to potentially be picked and ran by another process, before the - transaction is committed, which may result in various errors. - - ```ruby - Topic.transaction do - topic = Topic.create(...) - NewTopicNotificationJob.perform_later(topic) - end - ``` - - Now Active Job will automatically defer the enqueuing to after the transaction is committed, - and drop the job if the transaction is rolled back. - - Various queue implementations can choose to disable this behavior, and users can disable it, - or force it on a per job basis: - - ```ruby - class NewTopicNotificationJob < ApplicationJob - self.enqueue_after_transaction_commit = :never # or `:always` or `:default` - end - ``` - - *Jean Boussier*, *Cristian Bica* - -* Do not trigger immediate loading of `ActiveJob::Base` when loading `ActiveJob::TestHelper`. - - *Maxime Réty* - -* Preserve the serialized timezone when deserializing `ActiveSupport::TimeWithZone` arguments. - - *Joshua Young* - -* Remove deprecated `:exponentially_longer` value for the `:wait` in `retry_on`. - - *Rafael Mendonça França* - -* Remove deprecated support to set numeric values to `scheduled_at` attribute. - - *Rafael Mendonça França* - -* Deprecate `Rails.application.config.active_job.use_big_decimal_serialize`. - - *Rafael Mendonça França* - -* Remove deprecated primitive serializer for `BigDecimal` arguments. - - *Rafael Mendonça França* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activejob/CHANGELOG.md) for previous changes. diff --git a/activemodel/CHANGELOG.md b/activemodel/CHANGELOG.md index a98f072fde..055841427e 100644 --- a/activemodel/CHANGELOG.md +++ b/activemodel/CHANGELOG.md @@ -1,22 +1,2 @@ -* Fix a bug where type casting of string to `Time` and `DateTime` doesn't - calculate minus minute value in TZ offset correctly. - - *Akira Matsuda* - -* Port the `type_for_attribute` method to Active Model. Classes that include - `ActiveModel::Attributes` will now provide this method. This method behaves - the same for Active Model as it does for Active Record. - - ```ruby - class MyModel - include ActiveModel::Attributes - - attribute :my_attribute, :integer - end - - MyModel.type_for_attribute(:my_attribute) # => # - ``` - - *Jonathan Hefner* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activemodel/CHANGELOG.md) for previous changes. diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index 8e393d8c7d..aa47f9c759 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,818 +1,2 @@ -* Support `touch_all` in batches. - - ```ruby - Post.in_batches.touch_all - ``` - - *fatkodima* - -* Add support for `:if_not_exists` and `:force` options to `create_schema` - - *fatkodima* - -* Fix `index_errors` having incorrect index in association validation errors. - - *lulalala* - -* Add `index_errors: :nested_attributes_order` mode. - - This indexes the association validation errors based on the order received by nested attributes setter, and respects the `reject_if` configuration. This enables API to provide enough information to the frontend to map the validation errors back to their respective form fields. - - *lulalala* - -* Association option `query_constraints` is deprecated in favor of `foreign_key`. - - *Nikita Vasilevsky* - -* Add ENV["SKIP_TEST_DATABASE_TRUNCATE"] flag to speed up multi-process test runs on large DBs when all tests run within default txn. (This cuts ~10s from the test run of HEY when run by 24 processes against the 178 tables, since ~4,000 table truncates can then be skipped.) - - *DHH* - -* Added support for recursive common table expressions. - - ```ruby - Post.with_recursive( - post_and_replies: [ - Post.where(id: 42), - Post.joins('JOIN post_and_replies ON posts.in_reply_to_id = post_and_replies.id'), - ] - ) - ``` - - Generates the following SQL: - - ```sql - WITH RECURSIVE "post_and_replies" AS ( - (SELECT "posts".* FROM "posts" WHERE "posts"."id" = 42) - UNION ALL - (SELECT "posts".* FROM "posts" JOIN post_and_replies ON posts.in_reply_to_id = post_and_replies.id) - ) - SELECT "posts".* FROM "posts" - ``` - - *ClearlyClaire* - -* `validate_constraint` can be called in a `change_table` block. - - ex: - ```ruby - change_table :products do |t| - t.check_constraint "price > discounted_price", name: "price_check", validate: false - t.validate_check_constraint "price_check" - end - ``` - - *Cody Cutrer* - -* `PostgreSQLAdapter` now decodes columns of type date to `Date` instead of string. - - Ex: - ```ruby - ActiveRecord::Base.connection - .select_value("select '2024-01-01'::date").class #=> Date - ``` - - *Joé Dupuis* - -* Strict loading using `:n_plus_one_only` does not eagerly load child associations. - - With this change, child associations are no longer eagerly loaded, to - match intended behavior and to prevent non-deterministic order issues caused - by calling methods like `first` or `last`. As `first` and `last` don't cause - an N+1 by themselves, calling child associations will no longer raise. - Fixes #49473. - - Before: - - ```ruby - person = Person.find(1) - person.strict_loading!(mode: :n_plus_one_only) - person.posts.first - # SELECT * FROM posts WHERE person_id = 1; -- non-deterministic order - person.posts.first.firm # raises ActiveRecord::StrictLoadingViolationError - ``` - - After: - - ```ruby - person = Person.find(1) - person.strict_loading!(mode: :n_plus_one_only) - person.posts.first # this is 1+1, not N+1 - # SELECT * FROM posts WHERE person_id = 1 ORDER BY id LIMIT 1; - person.posts.first.firm # no longer raises - ``` - - *Reid Lynch* - -* Allow `Sqlite3Adapter` to use `sqlite3` gem version `2.x` - - *Mike Dalessio* - -* Allow `ActiveRecord::Base#pluck` to accept hash values - - ```ruby - # Before - Post.joins(:comments).pluck("posts.id", "comments.id", "comments.body") - - # After - Post.joins(:comments).pluck(posts: [:id], comments: [:id, :body]) - ``` - - *fatkodima* - -* Raise an `ActiveRecord::ActiveRecordError` error when the MySQL database returns an invalid version string. - - *Kevin McPhillips* - -* `ActiveRecord::Base.transaction` now yields an `ActiveRecord::Transaction` object. - - This allows to register callbacks on it. - - ```ruby - Article.transaction do |transaction| - article.update(published: true) - transaction.after_commit do - PublishNotificationMailer.with(article: article).deliver_later - end - end - ``` - - *Jean Boussier* - -* Add `ActiveRecord::Base.current_transaction`. - - Returns the current transaction, to allow registering callbacks on it. - - ```ruby - Article.current_transaction.after_commit do - PublishNotificationMailer.with(article: article).deliver_later - end - ``` - - *Jean Boussier* - -* Add `ActiveRecord.after_all_transactions_commit` callback. - - Useful for code that may run either inside or outside a transaction and needs - to perform work after the state changes have been properly persisted. - - ```ruby - def publish_article(article) - article.update(published: true) - ActiveRecord.after_all_transactions_commit do - PublishNotificationMailer.with(article: article).deliver_later - end - end - ``` - - In the above example, the block is either executed immediately if called outside - of a transaction, or called after the open transaction is committed. - - If the transaction is rolled back, the block isn't called. - - *Jean Boussier* - -* Add the ability to ignore counter cache columns until they are backfilled. - - Starting to use counter caches on existing large tables can be troublesome, because the column - values must be backfilled separately of the column addition (to not lock the table for too long) - and before the use of `:counter_cache` (otherwise methods like `size`/`any?`/etc, which use - counter caches internally, can produce incorrect results). People usually use database triggers - or callbacks on child associations while backfilling before introducing a counter cache - configuration to the association. - - Now, to safely backfill the column, while keeping the column updated with child records added/removed, use: - - ```ruby - class Comment < ApplicationRecord - belongs_to :post, counter_cache: { active: false } - end - ``` - - While the counter cache is not "active", the methods like `size`/`any?`/etc will not use it, - but get the results directly from the database. After the counter cache column is backfilled, simply - remove the `{ active: false }` part from the counter cache definition, and it will now be used by the - mentioned methods. - - *fatkodima* - -* Retry known idempotent SELECT queries on connection-related exceptions. - - SELECT queries we construct by walking the Arel tree and / or with known model attributes - are idempotent and can safely be retried in the case of a connection error. Previously, - adapters such as `TrilogyAdapter` would raise `ActiveRecord::ConnectionFailed: Trilogy::EOFError` - when encountering a connection error mid-request. - - *Adrianna Chang* - -* Allow association's `foreign_key` to be composite. - - `query_constraints` option was the only way to configure a composite foreign key by passing an `Array`. - Now it's possible to pass an Array value as `foreign_key` to achieve the same behavior of an association. - - *Nikita Vasilevsky* - -* Allow association's `primary_key` to be composite. - - Association's `primary_key` can be composite when derived from associated model `primary_key` or `query_constraints`. - Now it's possible to explicitly set it as composite on the association. - - *Nikita Vasilevsky* - -* Add `config.active_record.permanent_connection_checkout` setting. - - Controls whether `ActiveRecord::Base.connection` raises an error, emits a deprecation warning, or neither. - - `ActiveRecord::Base.connection` checkouts a database connection from the pool and keeps it leased until the end of - the request or job. This behavior can be undesirable in environments that use many more threads or fibers than there - is available connections. - - This configuration can be used to track down and eliminate code that calls `ActiveRecord::Base.connection` and - migrate it to use `ActiveRecord::Base.with_connection` instead. - - The default behavior remains unchanged, and there is currently no plans to change the default. - - *Jean Boussier* - -* Add dirties option to uncached. - - This adds a `dirties` option to `ActiveRecord::Base.uncached` and - `ActiveRecord::ConnectionAdapters::ConnectionPool#uncached`. - - When set to `true` (the default), writes will clear all query caches belonging to the current thread. - When set to `false`, writes to the affected connection pool will not clear any query cache. - - This is needed by Solid Cache so that cache writes do not clear query caches. - - *Donal McBreen* - -* Deprecate `ActiveRecord::Base.connection` in favor of `.lease_connection`. - - The method has been renamed as `lease_connection` to better reflect that the returned - connection will be held for the duration of the request or job. - - This deprecation is a soft deprecation, no warnings will be issued and there is no - current plan to remove the method. - - *Jean Boussier* - -* Deprecate `ActiveRecord::ConnectionAdapters::ConnectionPool#connection`. - - The method has been renamed as `lease_connection` to better reflect that the returned - connection will be held for the duration of the request or job. - - *Jean Boussier* - -* Expose a generic fixture accessor for fixture names that may conflict with Minitest. - - ```ruby - assert_equal "Ruby on Rails", web_sites(:rubyonrails).name - assert_equal "Ruby on Rails", fixture(:web_sites, :rubyonrails).name - ``` - - *Jean Boussier* - -* Using `Model.query_constraints` with a single non-primary-key column used to raise as expected, but with an - incorrect error message. This has been fixed to raise with a more appropriate error message. - - *Joshua Young* - -* Fix `has_one` association autosave setting the foreign key attribute when it is unchanged. - - This behaviour is also inconsistent with autosaving `belongs_to` and can have unintended side effects like raising - an `ActiveRecord::ReadOnlyAttributeError` when the foreign key attribute is marked as read-only. - - *Joshua Young* - -* Remove deprecated behavior that would rollback a transaction block when exited using `return`, `break` or `throw`. - - *Rafael Mendonça França* - -* Deprecate `Rails.application.config.active_record.commit_transaction_on_non_local_return`. - - *Rafael Mendonça França* - -* Remove deprecated support to pass `rewhere` to `ActiveRecord::Relation#merge`. - - *Rafael Mendonça França* - -* Remove deprecated support to pass `deferrable: true` to `add_foreign_key`. - - *Rafael Mendonça França* - -* Remove deprecated support to quote `ActiveSupport::Duration`. - - *Rafael Mendonça França* - -* Remove deprecated `#quote_bound_value`. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::ConnectionAdapters::ConnectionPool#connection_klass`. - - *Rafael Mendonça França* - -* Remove deprecated support to apply `#connection_pool_list`, `#active_connections?`, `#clear_active_connections!`, - `#clear_reloadable_connections!`, `#clear_all_connections!` and `#flush_idle_connections!` to the connections pools - for the current role when the `role` argument isn't provided. - - *Rafael Mendonça França* - -* Remove deprecated `#all_connection_pools`. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::ConnectionAdapters::SchemaCache#data_sources`. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::ConnectionAdapters::SchemaCache.load_from`. - - *Rafael Mendonça França* - -* Remove deprecated `#all_foreign_keys_valid?` from database adapters. - - *Rafael Mendonça França* - -* Remove deprecated support to passing coder and class as second argument to `serialize`. - - *Rafael Mendonça França* - -* Remove deprecated support to `ActiveRecord::Base#read_attribute(:id)` to return the custom primary key value. - - *Rafael Mendonça França* - -* Remove deprecated `TestFixtures.fixture_path`. - - *Rafael Mendonça França* - -* Remove deprecated behavior to support referring to a singular association by its plural name. - - *Rafael Mendonça França* - -* Deprecate `Rails.application.config.active_record.allow_deprecated_singular_associations_name` - - *Rafael Mendonça França* - -* Remove deprecated support to passing `SchemaMigration` and `InternalMetadata` classes as arguments to - `ActiveRecord::MigrationContext`. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::Migration.check_pending` method. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::LogSubscriber.runtime` method. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::LogSubscriber.runtime=` method. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::LogSubscriber.reset_runtime` method. - - *Rafael Mendonça França* - -* Remove deprecated support to define `explain` in the connection adapter with 2 arguments. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::ActiveJobRequiredError`. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::Base.clear_active_connections!`. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::Base.clear_reloadable_connections!`. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::Base.clear_all_connections!`. - - *Rafael Mendonça França* - -* Remove deprecated `ActiveRecord::Base.flush_idle_connections!`. - - *Rafael Mendonça França* - -* Remove deprecated `name` argument from `ActiveRecord::Base.remove_connection`. - - *Rafael Mendonça França* - -* Remove deprecated support to call `alias_attribute` with non-existent attribute names. - - *Rafael Mendonça França* - -* Remove deprecated `Rails.application.config.active_record.suppress_multiple_database_warning`. - - *Rafael Mendonça França* - -* Add ActiveRecord::Encryption::MessagePackMessageSerializer - - Serialize data to the MessagePack format, for efficient storage in binary columns. - - The binary encoding requires around 30% less space than the base64 encoding - used by the default serializer. - - *Donal McBreen* - -* Add support for encrypting binary columns - - Ensure encryption and decryption pass `Type::Binary::Data` around for binary data. - - Previously encrypting binary columns with the `ActiveRecord::Encryption::MessageSerializer` - incidentally worked for MySQL and SQLite, but not PostgreSQL. - - *Donal McBreen* - -* Deprecated `ENV["SCHEMA_CACHE"]` in favor of `schema_cache_path` in the database configuration. - - *Rafael Mendonça França* - -* Add `ActiveRecord::Base.with_connection` as a shortcut for leasing a connection for a short duration. - - The leased connection is yielded, and for the duration of the block, any call to `ActiveRecord::Base.connection` - will yield that same connection. - - This is useful to perform a few database operations without causing a connection to be leased for the - entire duration of the request or job. - - *Jean Boussier* - -* Deprecate `config.active_record.warn_on_records_fetched_greater_than` now that `sql.active_record` - notification includes `:row_count` field. - - *Jason Nochlin* - -* The fix ensures that the association is joined using the appropriate join type - (either inner join or left outer join) based on the existing joins in the scope. - - This prevents unintentional overrides of existing join types and ensures consistency in the generated SQL queries. - - Example: - - - - ```ruby - # `associated` will use `LEFT JOIN` instead of using `JOIN` - Post.left_joins(:author).where.associated(:author) - ``` - - *Saleh Alhaddad* - -* Fix an issue where `ActiveRecord::Encryption` configurations are not ready before the loading - of Active Record models, when an application is eager loaded. As a result, encrypted attributes - could be misconfigured in some cases. - - *Maxime Réty* - -* Deprecate defining an `enum` with keyword arguments. - - ```ruby - class Function > ApplicationRecord - # BAD - enum color: [:red, :blue], - type: [:instance, :class] - - # GOOD - enum :color, [:red, :blue] - enum :type, [:instance, :class] - end - ``` - - *Hartley McGuire* - -* Add `config.active_record.validate_migration_timestamps` option for validating migration timestamps. - - When set, validates that the timestamp prefix for a migration is no more than a day ahead of - the timestamp associated with the current time. This is designed to prevent migrations prefixes - from being hand-edited to future timestamps, which impacts migration generation and other - migration commands. - - *Adrianna Chang* - -* Properly synchronize `Mysql2Adapter#active?` and `TrilogyAdapter#active?` - - As well as `disconnect!` and `verify!`. - - This generally isn't a big problem as connections must not be shared between - threads, but is required when running transactional tests or system tests - and could lead to a SEGV. - - *Jean Boussier* - -* Support `:source_location` tag option for query log tags - - ```ruby - config.active_record.query_log_tags << :source_location - ``` - - Calculating the caller location is a costly operation and should be used primarily in development - (note, there is also a `config.active_record.verbose_query_logs` that serves the same purpose) - or occasionally on production for debugging purposes. - - *fatkodima* - -* Add an option to `ActiveRecord::Encryption::Encryptor` to disable compression - - Allow compression to be disabled by setting `compress: false` - - ```ruby - class User - encrypts :name, encryptor: ActiveRecord::Encryption::Encryptor.new(compress: false) - end - ``` - - *Donal McBreen* - -* Deprecate passing strings to `ActiveRecord::Tasks::DatabaseTasks.cache_dump_filename`. - - A `ActiveRecord::DatabaseConfigurations::DatabaseConfig` object should be passed instead. - - *Rafael Mendonça França* - -* Add row_count field to sql.active_record notification - - This field returns the amount of rows returned by the query that emitted the notification. - - This metric is useful in cases where one wants to detect queries with big result sets. - - *Marvin Bitterlich* - -* Consistently raise an `ArgumentError` when passing an invalid argument to a nested attributes association writer. - - Previously, this would only raise on collection associations and produce a generic error on singular associations. - - Now, it will raise on both collection and singular associations. - - *Joshua Young* - -* Fix single quote escapes on default generated MySQL columns - - MySQL 5.7.5+ supports generated columns, which can be used to create a column that is computed from an expression. - - Previously, the schema dump would output a string with double escapes for generated columns with single quotes in the default expression. - - This would result in issues when importing the schema on a fresh instance of a MySQL database. - - Now, the string will not be escaped and will be valid Ruby upon importing of the schema. - - *Yash Kapadia* - -* Fix Migrations with versions older than 7.1 validating options given to - `add_reference` and `t.references`. - - *Hartley McGuire* - -* Add `_types` class method to `ActiveRecord::DelegatedType` so that the delegated types can be introspected - - *JP Rosevear* - -* Make `schema_dump`, `query_cache`, `replica` and `database_tasks` configurable via `DATABASE_URL` - - This wouldn't always work previously because boolean values would be interpreted as strings. - - e.g. `DATABASE_URL=postgres://localhost/foo?schema_dump=false` now properly disable dumping the schema - cache. - - *Mike Coutermarsh*, *Jean Boussier* - -* Introduce `ActiveRecord::Transactions::ClassMethods#set_callback` - - It is identical to `ActiveSupport::Callbacks::ClassMethods#set_callback` - but with support for `after_commit` and `after_rollback` callback options. - - *Joshua Young* - -* Make `ActiveRecord::Encryption::Encryptor` agnostic of the serialization format used for encrypted data. - - Previously, the encryptor instance only allowed an encrypted value serialized as a `String` to be passed to the message serializer. - - Now, the encryptor lets the configured `message_serializer` decide which types of serialized encrypted values are supported. A custom serialiser is therefore allowed to serialize `ActiveRecord::Encryption::Message` objects using a type other than `String`. - - The default `ActiveRecord::Encryption::MessageSerializer` already ensures that only `String` objects are passed for deserialization. - - *Maxime Réty* - -* Fix `encrypted_attribute?` to take into account context properties passed to `encrypts`. - - *Maxime Réty* - -* The object returned by `explain` now responds to `pluck`, `first`, - `last`, `average`, `count`, `maximum`, `minimum`, and `sum`. Those - new methods run `EXPLAIN` on the corresponding queries: - - ```ruby - User.all.explain.count - # EXPLAIN SELECT COUNT(*) FROM `users` - # ... - - User.all.explain.maximum(:id) - # EXPLAIN SELECT MAX(`users`.`id`) FROM `users` - # ... - ``` - - *Petrik de Heus* - -* Fixes an issue where `validates_associated` `:on` option wasn't respected - when validating associated records. - - *Austen Madden*, *Alex Ghiculescu*, *Rafał Brize* - -* Allow overriding SQLite defaults from `database.yml`. - - Any PRAGMA configuration set under the `pragmas` key in the configuration - file takes precedence over Rails' defaults, and additional PRAGMAs can be - set as well. - - ```yaml - database: storage/development.sqlite3 - timeout: 5000 - pragmas: - journal_mode: off - temp_store: memory - ``` - - *Stephen Margheim* - -* Remove warning message when running SQLite in production, but leave it unconfigured. - - There are valid use cases for running SQLite in production. However, it must be done - with care, so instead of a warning most users won't see anyway, it's preferable to - leave the configuration commented out to force them to think about having the database - on a persistent volume etc. - - *Jacopo Beschi*, *Jean Boussier* - -* Add support for generated columns to the SQLite3 adapter. - - Generated columns (both stored and dynamic) are supported since version 3.31.0 of SQLite. - This adds support for those to the SQLite3 adapter. - - ```ruby - create_table :users do |t| - t.string :name - t.virtual :name_upper, type: :string, as: 'UPPER(name)' - t.virtual :name_lower, type: :string, as: 'LOWER(name)', stored: true - end - ``` - - *Stephen Margheim* - -* TrilogyAdapter: ignore `host` if `socket` parameter is set. - - This allows to configure a connection on a UNIX socket via `DATABASE_URL`: - - ``` - DATABASE_URL=trilogy://does-not-matter/my_db_production?socket=/var/run/mysql.sock - ``` - - *Jean Boussier* - -* Make `assert_queries_count`, `assert_no_queries`, `assert_queries_match`, and - `assert_no_queries_match` assertions public. - - To assert the expected number of queries are made, Rails internally uses `assert_queries_count` and - `assert_no_queries`. To assert that specific SQL queries are made, `assert_queries_match` and - `assert_no_queries_match` are used. These assertions can now be used in applications as well. - - ```ruby - class ArticleTest < ActiveSupport::TestCase - test "queries are made" do - assert_queries_count(1) { Article.first } - end - - test "creates a foreign key" do - assert_queries_match(/ADD FOREIGN KEY/i, include_schema: true) do - @connection.add_foreign_key(:comments, :posts) - end - end - end - ``` - - *Petrik de Heus*, *fatkodima* - -* Fix `has_secure_token` calls the setter method on initialize. - - *Abeid Ahmed* - -* When using a `DATABASE_URL`, allow for a configuration to map the protocol in the URL to a specific database - adapter. This allows decoupling the adapter the application chooses to use from the database connection details - set in the deployment environment. - - ```ruby - # ENV['DATABASE_URL'] = "mysql://localhost/example_database" - config.active_record.protocol_adapters.mysql = "trilogy" - # will connect to MySQL using the trilogy adapter - ``` - - *Jean Boussier*, *Kevin McPhillips* - -* In cases where MySQL returns `warning_count` greater than zero, but returns no warnings when - the `SHOW WARNINGS` query is executed, `ActiveRecord.db_warnings_action` proc will still be - called with a generic warning message rather than silently ignoring the warning(s). - - *Kevin McPhillips* - -* `DatabaseConfigurations#configs_for` accepts a symbol in the `name` parameter. - - *Andrew Novoselac* - -* Fix `where(field: values)` queries when `field` is a serialized attribute - (for example, when `field` uses `ActiveRecord::Base.serialize` or is a JSON - column). - - *João Alves* - -* Make the output of `ActiveRecord::Core#inspect` configurable. - - By default, calling `inspect` on a record will yield a formatted string including just the `id`. - - ```ruby - Post.first.inspect #=> "#" - ``` - - The attributes to be included in the output of `inspect` can be configured with - `ActiveRecord::Core#attributes_for_inspect`. - - ```ruby - Post.attributes_for_inspect = [:id, :title] - Post.first.inspect #=> "#" - ``` - - With `attributes_for_inspect` set to `:all`, `inspect` will list all the record's attributes. - - ```ruby - Post.attributes_for_inspect = :all - Post.first.inspect #=> "#" - ``` - - In `development` and `test` mode, `attributes_for_inspect` will be set to `:all` by default. - - You can also call `full_inspect` to get an inspection with all the attributes. - - The attributes in `attribute_for_inspect` will also be used for `pretty_print`. - - *Andrew Novoselac* - -* Don't mark attributes as changed when reassigned to `Float::INFINITY` or - `-Float::INFINITY`. - - *Maicol Bentancor* - -* Support the `RETURNING` clause for MariaDB. - - *fatkodima*, *Nikolay Kondratyev* - -* The SQLite3 adapter now implements the `supports_deferrable_constraints?` contract. - - Allows foreign keys to be deferred by adding the `:deferrable` key to the `foreign_key` options. - - ```ruby - add_reference :person, :alias, foreign_key: { deferrable: :deferred } - add_reference :alias, :person, foreign_key: { deferrable: :deferred } - ``` - - *Stephen Margheim* - -* Add the `set_constraints` helper to PostgreSQL connections. - - ```ruby - Post.create!(user_id: -1) # => ActiveRecord::InvalidForeignKey - - Post.transaction do - Post.connection.set_constraints(:deferred) - p = Post.create!(user_id: -1) - u = User.create! - p.user = u - p.save! - end - ``` - - *Cody Cutrer* - -* Include `ActiveModel::API` in `ActiveRecord::Base`. - - *Sean Doyle* - -* Ensure `#signed_id` outputs `url_safe` strings. - - *Jason Meller* - -* Add `nulls_last` and working `desc.nulls_first` for MySQL. - - *Tristan Fellows* - -* Allow for more complex hash arguments for `order` which mimics `where` in `ActiveRecord::Relation`. - - ```ruby - Topic.includes(:posts).order(posts: { created_at: :desc }) - ``` - - *Myles Boone* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activerecord/CHANGELOG.md) for previous changes. diff --git a/activestorage/CHANGELOG.md b/activestorage/CHANGELOG.md index 1b1af4be2c..f68a5ab8ab 100644 --- a/activestorage/CHANGELOG.md +++ b/activestorage/CHANGELOG.md @@ -1,74 +1,2 @@ -* Remove deprecated `config.active_storage.silence_invalid_content_types_warning`. - - *Rafael Mendonça França* - -* Remove deprecated `config.active_storage.replace_on_assign_to_many`. - - *Rafael Mendonça França* - -* Add support for custom `key` in `ActiveStorage::Blob#compose`. - - *Elvin Efendiev* - -* Add `image/webp` to `config.active_storage.web_image_content_types` when `load_defaults "7.2"` - is set. - - *Lewis Buckley* - -* Fix JSON-encoding of `ActiveStorage::Filename` instances. - - *Jonathan del Strother* - -* Fix N+1 query when fetching preview images for non-image assets - - *Aaron Patterson & Justin Searls* - -* Fix all Active Storage database related models to respect - `ActiveRecord::Base.table_name_prefix` configuration. - - *Chedli Bourguiba* - -* Fix `ActiveStorage::Representations::ProxyController` not returning the proper - preview image variant for previewable files. - - *Chedli Bourguiba* - -* Fix `ActiveStorage::Representations::ProxyController` to proxy untracked - variants. - - *Chedli Bourguiba* - -* When using the `preprocessed: true` option, avoid enqueuing transform jobs - for blobs that are not representable. - - *Chedli Bourguiba* - -* Prevent `ActiveStorage::Blob#preview` to generate a variant if an empty variation is passed. - Calls to `#url`, `#key` or `#download` will now use the original preview - image instead of generating a variant with the exact same dimensions. - - *Chedli Bourguiba* - -* Process preview image variant when calling `ActiveStorage::Preview#processed`. - For example, `attached_pdf.preview(:thumb).processed` will now immediately - generate the full-sized preview image and the `:thumb` variant of it. - Previously, the `:thumb` variant would not be generated until a further call - to e.g. `processed.url`. - - *Chedli Bourguiba* and *Jonathan Hefner* - -* Prevent `ActiveRecord::StrictLoadingViolationError` when strict loading is - enabled and the variant of an Active Storage preview has already been - processed (for example, by calling `ActiveStorage::Preview#url`). - - *Jonathan Hefner* - -* Fix `preprocessed: true` option for named variants of previewable files. - - *Nico Wenterodt* - -* Allow accepting `service` as a proc as well in `has_one_attached` and `has_many_attached`. - - *Yogesh Khater* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activestorage/CHANGELOG.md) for previous changes. diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index ce46e13b23..d178e0596a 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,233 +1,2 @@ -* Support `duration` type in `ActiveSupport::XmlMini`. - - *heka1024* - -* Remove deprecated `ActiveSupport::Notifications::Event#children` and `ActiveSupport::Notifications::Event#parent_of?`. - - *Rafael Mendonça França* - -* Remove deprecated support to call the following methods without passing a deprecator: - - - `deprecate` - - `deprecate_constant` - - `ActiveSupport::Deprecation::DeprecatedObjectProxy.new` - - `ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new` - - `ActiveSupport::Deprecation::DeprecatedConstantProxy.new` - - `assert_deprecated` - - `assert_not_deprecated` - - `collect_deprecations` - - *Rafael Mendonça França* - -* Remove deprecated `ActiveSupport::Deprecation` delegation to instance. - - *Rafael Mendonça França* - -* Remove deprecated `SafeBuffer#clone_empty`. - - *Rafael Mendonça França* - -* Remove deprecated `#to_default_s` from `Array`, `Date`, `DateTime` and `Time`. - - *Rafael Mendonça França* - -* Remove deprecated support to passing `Dalli::Client` instances to `MemCacheStore`. - - *Rafael Mendonça França* - -* Remove deprecated `config.active_support.use_rfc4122_namespaced_uuids`. - - *Rafael Mendonça França* - -* Remove deprecated `config.active_support.remove_deprecated_time_with_zone_name`. - - *Rafael Mendonça França* - -* Remove deprecated `config.active_support.disable_to_s_conversion`. - - *Rafael Mendonça França* - -* Remove deprecated support to bolding log text with positional boolean in `ActiveSupport::LogSubscriber#color`. - - *Rafael Mendonça França* - -* Remove deprecated constants `ActiveSupport::LogSubscriber::CLEAR` and `ActiveSupport::LogSubscriber::BOLD`. - - *Rafael Mendonça França* - -* Remove deprecated support for `config.active_support.cache_format_version = 6.1`. - - *Rafael Mendonça França* - -* Remove deprecated `:pool_size` and `:pool_timeout` options for the cache storage. - - *Rafael Mendonça França* - -* Warn on tests without assertions. - - `ActiveSupport::TestCase` now warns when tests do not run any assertions. - This is helpful in detecting broken tests that do not perform intended assertions. - - *fatkodima* - -* Support `hexBinary` type in `ActiveSupport::XmlMini`. - - *heka1024* - -* Deprecate `ActiveSupport::ProxyObject` in favor of Ruby's built-in `BasicObject` - - *Earlopain* - -* `stub_const` now accepts a `exists: false` parameter to allow stubbing missing constants. - - *Jean Boussier* - -* Make ActiveSupport::BacktraceCleaner copy filters and silencers on dup and clone - - Previously the copy would still share the internal silencers and filters array, - causing state to leak. - - *Jean Boussier* - -* Updating Astana with Western Kazakhstan TZInfo identifier - - *Damian Nelson* - -* Add filename support for `ActiveSupport::Logger.logger_outputs_to?` - - ```ruby - logger = Logger.new('/var/log/rails.log') - ActiveSupport::Logger.logger_outputs_to?(logger, '/var/log/rails.log') - ``` - - *Christian Schmidt* - -* Include `IPAddr#prefix` when serializing an `IPAddr` using the - `ActiveSupport::MessagePack` serializer. This change is backward and forward - compatible — old payloads can still be read, and new payloads will be - readable by older versions of Rails. - - *Taiki Komaba* - -* Add `default:` support for `ActiveSupport::CurrentAttributes.attribute` - - ```ruby - class Current < ActiveSupport::CurrentAttributes - attribute :counter, default: 0 - end - ``` - - *Sean Doyle* - -* Remove deprecated support for the pre-Ruby 2.4 behavior of `to_time` returning a `Time` object with local timezone. - - *Rafael Mendonça França* - -* Deprecate `config.active_support.to_time_preserves_timezone`. - - *Rafael Mendonça França* - -* Deprecate `DateAndTime::Compatibility.preserve_timezone`. - - *Rafael Mendonça França* - -* Yield instance to `Object#with` block - - ```ruby - client.with(timeout: 5_000) do |c| - c.get("/commits") - end - ``` - - *Sean Doyle* - -* Use logical core count instead of physical core count to determine the - default number of workers when parallelizing tests. - - *Jonathan Hefner* - -* Fix `Time.now/DateTime.now/Date.today` to return results in a system timezone after `#travel_to`. - - There is a bug in the current implementation of #travel_to: - it remembers a timezone of its argument, and all stubbed methods start - returning results in that remembered timezone. However, the expected - behaviour is to return results in a system timezone. - - *Aleksei Chernenkov* - -* Add `ErrorReported#unexpected` to report precondition violations. - - For example: - - ```ruby - def edit - if published? - Rails.error.unexpected("[BUG] Attempting to edit a published article, that shouldn't be possible") - return false - end - # ... - end - ``` - - The above will raise an error in development and test, but only report the error in production. - - *Jean Boussier* - -* Make the order of read_multi and write_multi notifications for `Cache::Store#fetch_multi` operations match the order they are executed in. - - *Adam Renberg Tamm* - -* Make return values of `Cache::Store#write` consistent. - - The return value was not specified before. Now it returns `true` on a successful write, - `nil` if there was an error talking to the cache backend, and `false` if the write failed - for another reason (e.g. the key already exists and `unless_exist: true` was passed). - - *Sander Verdonschot* - -* Fix logged cache keys not always matching actual key used by cache action. - - *Hartley McGuire* - -* Improve error messages of `assert_changes` and `assert_no_changes` - - `assert_changes` error messages now display objects with `.inspect` to make it easier - to differentiate nil from empty strings, strings from symbols, etc. - `assert_no_changes` error messages now surface the actual value. - - *pcreux* - -* Fix `#to_fs(:human_size)` to correctly work with negative numbers. - - *Earlopain* - -* Fix `BroadcastLogger#dup` so that it duplicates the logger's `broadcasts`. - - *Andrew Novoselac* - -* Fix issue where `bootstrap.rb` overwrites the `level` of a `BroadcastLogger`'s `broadcasts`. - - *Andrew Novoselac* - -* Fix compatibility with the `semantic_logger` gem. - - The `semantic_logger` gem doesn't behave exactly like stdlib logger in that - `SemanticLogger#level` returns a Symbol while stdlib `Logger#level` returns an Integer. - - This caused the various `LogSubscriber` classes in Rails to break when assigned a - `SemanticLogger` instance. - - *Jean Boussier*, *ojab* - -* Fix MemoryStore to prevent race conditions when incrementing or decrementing. - - *Pierre Jambet* - -* Implement `HashWithIndifferentAccess#to_proc`. - - Previously, calling `#to_proc` on `HashWithIndifferentAccess` object used inherited `#to_proc` - method from the `Hash` class, which was not able to access values using indifferent keys. - - *fatkodima* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/activesupport/CHANGELOG.md) for previous changes. diff --git a/railties/CHANGELOG.md b/railties/CHANGELOG.md index 1022772dcf..5826cb3791 100644 --- a/railties/CHANGELOG.md +++ b/railties/CHANGELOG.md @@ -1,337 +1,2 @@ -* Defer route drawing to the first request, or when url_helpers are called - - Executes the first routes reload in middleware, or when a route set's - url_helpers receives a route call / asked if it responds to a route. - Previously, this was executed unconditionally on boot, which can - slow down boot time unnecessarily for larger apps with lots of routes. - - *Gannon McGibbon* - -* Add options to bin/rails app:update. - - `bin/rails app:update` now supports the same generic options that generators do: - - * `--force`: Accept all changes to existing files - * `--skip`: Refuse all changes to existing files - * `--pretend`: Don't make any changes - * `--quiet`: Don't output all changes made - - *Étienne Barrié* - -* Implement Rails console commands and helpers with IRB v1.13's extension APIs - - Rails console users will now see `helper`, `controller`, `new_session`, and `app` under - IRB help message's `Helper methods` category. And `reload!` command will be displayed under - the new `Rails console` commands category. - - Prior to this change, Rails console's commands and helper methods are added through IRB's - private components and don't show up in its help message, which led to poor discoverability. - - *Stan Lo* - -* Remove deprecated `Rails::Generators::Testing::Behaviour`. - - *Rafael Mendonça França* - -* Remove deprecated `find_cmd_and_exec` console helper. - - *Rafael Mendonça França* - -* Remove deprecated `Rails.config.enable_dependency_loading`. - - *Rafael Mendonça França* - -* Remove deprecated `Rails.application.secrets`. - - *Rafael Mendonça França* - -* Generated Gemfile will include `require: "debug/prelude"` for the `debug` gem - - Requiring `debug` gem directly automatically activates it, which could introduce - additional overhead and memory usage even without entering a debugging session. - - By making Bundler require `debug/prelude` instead, developers can keep their access - to breakpoint methods like `debugger` or `binding.break`, but the debugger won't be - activated until a breakpoint is hit. - - *Stan Lo* - -* Allow Actionable Errors encountered when running tests to be retried. - - ```txt - Migrations are pending. To resolve this issue, run: - - bin/rails db:migrate - - You have 1 pending migration: - - db/migrate/20240201213806_add_a_to_b.rb - Run pending migrations? [Yn] Y - == 20240201213806 AddAToB: migrating ========================================= - == 20240201213806 AddAToB: migrated (0.0000s) ================================ - - Running 7 tests in a single process (parallelization threshold is 50) - Run options: --seed 22200 - - # Running: - - ....... - - Finished in 0.243394s, 28.7600 runs/s, 45.1942 assertions/s. - 7 runs, 11 assertions, 0 failures, 0 errors, 0 skips - ``` - - This feature will only be present on interactive terminals. - - *Andrew Novoselac & Gannon McGibbon* - -* Skip generating a `test` job in ci.yml when a new application is generated with the - `--skip-test` option. - - *Steve Polito* - -* Update the `.node-version` file conditionally generated for new applications to 20.11.1 - - *Steve Polito* - -* Fix sanitizer vendor configuration in 7.1 defaults. - - In apps where rails-html-sanitizer was not eagerly loaded, the sanitizer default could end up - being Rails::HTML4::Sanitizer when it should be set to Rails::HTML5::Sanitizer. - - *Mike Dalessio*, *Rafael Mendonça França* - -* Set `action_mailer.default_url_options` values in `development` and `test`. - - Prior to this commit, new Rails applications would raise `ActionView::Template::Error` - if a mailer included a url built with a `*_path` helper. - - *Steve Polito* - -* Introduce `Rails::Generators::Testing::Assertions#assert_initializer` - - Compliments the existing `initializer` generator action. - - ```rb - assert_initializer "mail_interceptors.rb" - ``` - - *Steve Polito* - -* Generate a .devcontainer folder and its contents when creating a new app. - - The .devcontainer folder includes everything needed to boot the app and do development in a remote container. - - The container setup includes: - - A redis container for Kredis, ActionCable etc. - - A database (SQLite, Postgres, MySQL or MariaDB) - - A Headless chrome container for system tests - - Active Storage configured to use the local disk and with preview features working - - If any of these options are skipped in the app setup they will not be included in the container configuration. - - These files can be skipped using the `--skip-devcontainer` option. - - *Andrew Novoselac & Rafael Mendonça França* - -* Introduce `SystemTestCase#served_by` for configuring the System Test application server - - By default this is localhost. This method allows the host and port to be specified manually. - - ```ruby - class ApplicationSystemTestCase < ActionDispatch::SystemTestCase - served_by host: "testserver", port: 45678 - end - ``` - - *Andrew Novoselac & Rafael Mendonça França* - -* `bin/rails test` will no longer load files named `*_test.rb` if they are located in the `fixtures` folder. - - *Edouard Chin* - -* Ensure logger tags configured with `config.log_tags` are still active in `request.action_dispatch` handlers - - *KJ Tsanaktsidis* - -* Setup jemalloc in the default Dockerfile for memory optimization. - - *Matt Almeida*, *Jean Boussier* - -* Commented out lines in .railsrc file should not be treated as arguments when using - rails new generator command. Update ARGVScrubber to ignore text after # symbols. - - *Willian Tenfen* - -* Skip CSS when generating APIs. - - *Ruy Rocha* - -* Rails console now indicates application name and the current Rails environment: - - ```txt - my-app(dev)> # for RAILS_ENV=development - my-app(test)> # for RAILS_ENV=test - my-app(prod)> # for RAILS_ENV=production - my-app(my_env)> # for RAILS_ENV=my_env - ``` - - The application name is derived from the application's module name from `config/application.rb`. - For example, `MyApp` will displayed as `my-app` in the prompt. - - Additionally, the environment name will be colorized when the environment is - `development` (blue), `test` (blue), or `production` (red), if your - terminal supports it. - - *Stan Lo* - -* Ensure `autoload_paths`, `autoload_once_paths`, `eager_load_paths`, and - `load_paths` only have directories when initialized from engine defaults. - Previously, files under the `app` directory could end up there too. - - *Takumasa Ochi* - -* Prevent unnecessary application reloads in development. - - Previously, some files outside autoload paths triggered unnecessary reloads. - With this fix, application reloads according to `Rails.autoloaders.main.dirs`, - thereby preventing unnecessary reloads. - - *Takumasa Ochi* - -* Use `oven-sh/setup-bun` in GitHub CI when generating an app with Bun. - - *TangRufus* - -* Disable `pidfile` generation in the `production` environment. - - *Hans Schnedlitz* - -* Set `config.action_view.annotate_rendered_view_with_filenames` to `true` in - the `development` environment. - - *Adrian Marin* - -* Support the `BACKTRACE` environment variable to turn off backtrace cleaning. - - Useful for debugging framework code: - - ```sh - BACKTRACE=1 bin/rails server - ``` - - *Alex Ghiculescu* - -* Raise `ArgumentError` when reading `config.x.something` with arguments: - - ```ruby - config.x.this_works.this_raises true # raises ArgumentError - ``` - - *Sean Doyle* - -* Add default PWA files for manifest and service-worker that are served from `app/views/pwa` and can be dynamically rendered through ERB. Mount these files explicitly at the root with default routes in the generated routes file. - - *DHH* - -* Updated system tests to now use headless Chrome by default for the new applications. - - *DHH* - -* Add GitHub CI files for Dependabot, Brakeman, RuboCop, and running tests by default. Can be skipped with `--skip-ci`. - - *DHH* - -* Add Brakeman by default for static analysis of security vulnerabilities. Allow skipping with `--skip-brakeman option`. - - *vipulnsward* - -* Add RuboCop with rules from `rubocop-rails-omakase` by default. Skip with `--skip-rubocop`. - - *DHH* and *zzak* - -* Use `bin/rails runner --skip-executor` to not wrap the runner script with an - Executor. - - *Ben Sheldon* - -* Fix isolated engines to take `ActiveRecord::Base.table_name_prefix` into consideration. - This will allow for engine defined models, such as inside Active Storage, to respect - Active Record table name prefix configuration. - - *Chedli Bourguiba* - -* Fix running `db:system:change` when the app has no Dockerfile. - - *Hartley McGuire* - -* In Action Mailer previews, list inline attachments separately from normal - attachments. For example, attachments that were previously listed like - - > Attachments: logo.png file1.pdf file2.pdf - - will now be listed like - - > Attachments: file1.pdf file2.pdf (Inline: logo.png) - - *Christian Schmidt* and *Jonathan Hefner* - -* In mailer preview, only show SMTP-To if it differs from the union of To, Cc and Bcc. - - *Christian Schmidt* - -* Enable YJIT by default on new applications running Ruby 3.3+. - - Adds a `config/initializers/enable_yjit.rb` initializer that enables YJIT - when running on Ruby 3.3+. - - *Jean Boussier* - -* In Action Mailer previews, show date from message `Date` header if present. - - *Sampat Badhe* - -* Exit with non-zero status when the migration generator fails. - - *Katsuhiko YOSHIDA* - -* Use numeric UID and GID in Dockerfile template - - The Dockerfile generated by `rails new` sets the default user and group - by name instead of UID:GID. This can cause the following error in Kubernetes: - - ``` - container has runAsNonRoot and image has non-numeric user (rails), cannot verify user is non-root - ``` - - This change sets default user and group by their numeric values. - - *Ivan Fedotov* - -* Disallow invalid values for rails new options. - - The `--database`, `--asset-pipeline`, `--css`, and `--javascript` options - for `rails new` take different arguments. This change validates them. - - *Tony Drake*, *Akhil G Krishnan*, *Petrik de Heus* - -* Conditionally print `$stdout` when invoking `run_generator`. - - In an effort to improve the developer experience when debugging - generator tests, we add the ability to conditionally print `$stdout` - instead of capturing it. - - This allows for calls to `binding.irb` and `puts` work as expected. - - ```sh - RAILS_LOG_TO_STDOUT=true ./bin/test test/generators/actions_test.rb - ``` - - *Steve Polito* - -* Remove the option `config.public_file_server.enabled` from the generators - for all environments, as the value is the same in all environments. - - *Adrian Hirt* Please check [7-2-stable](https://github.com/rails/rails/blob/7-2-stable/railties/CHANGELOG.md) for previous changes.