https://github.com/rails/rails
`render_in`のアリティチェックで`@renderable.method(:render_in)`を呼び出す際、オブジェクト自身が`method`という名前のアクセサを定義していると正しく動作しない不具合を修正。`Kernel.instance_method(:method).bind_call`を使ってメソッド解決をバイパスすることで、名前衝突を回避しています。
Rails全体でRactor対応を進めるため、センチネル値として使われる `Object.new` や、RuboCopの `Style/MutableConstant` Copでは検出できないSet・Hash・Arrayの演算結果定数に `.freeze` を追加したPRです。`JS_ESCAPE_MAP` のように定義後に要素追加していたHashはインライン化してフリーズし、`rubocop:disable` コメントも除去されています。前PR #57323 のリテラル定数フリーズに続く後続作業です。
`CollectionProxy#pluck`を呼び出した際にstrict_loading違反が検出されずN+1クエリがサイレントに実行されていたバグが修正されました。`pluck`メソッドの独自コードパスに違反チェックを追加するとともに、`violates_strict_loading?`をpublicメソッドに昇格させ、プリロード済みアソシエーションを正しく扱えるよう`find_target?`によるガードが追加されています。
`ActiveModel::Conversion`モジュールに`#render_in`のデフォルト実装が追加されました。新しい実装は`to_partial_path`と`object: self`を組み合わせたパーシャルレンダリングをデフォルトとし、`locals:`やブロックなどの呼び出し元オプションを透過的に転送します。後方互換性を維持しながら、Active Model LintテストにもRender_inの要件が追加され、ViewComponentなどのビューシステムとの統合基盤が整備されました。
`ActionText::Editor::Tag#render_in` のシグネチャが `render_in(view_context)` のままだったため、PR #50623 以降に Action View が渡す追加引数を受け取れず、`super` を呼び出すサブクラスで `ArgumentError` が発生していた問題を修正。シグネチャを `(view_context, ...)` に変更し、追加引数を透過的に受け流すことでアダプターパターンを実装するサードパーティ製エディターとの互換性を回復しています。
Style/MutableConstant copの有効化(#57323)により、SQLite3アダプターの `NATIVE_DATABASE_TYPES` が意図せずfreezeされ、`neighbor` など拡張gemが `FrozenError` でクラッシュする問題が発生していた。本PRはMySQL向けの修正(#57333)に倣い、`.freeze` を削除して `rubocop:disable` コメントを付与することで、拡張ポイントとしての可変性を明示的に維持する。
Railsの新規アプリケーションテンプレートで生成される `production.rb` において、`config.asset_host` がデフォルトで `ENV["CDN_HOST"]` を参照するように変更されました。環境変数が未設定の場合は `nil` となり既存の動作を維持するため、CDN設定をコードの変更なしに環境変数のみで完結させることが可能になります。
`this_week?` にオプショナルな `start_day` 引数が追加され、`all_week`・`beginning_of_week`・`end_of_week` と同じインターフェースに統一されました。グローバルな `Date.beginning_of_week` 設定を変更せずに週の開始曜日を呼び出し単位で指定できるようになり、マルチテナントやi18n対応アプリケーションでのスレッドセーフな日付判定が可能になります。デフォルト値は従来通りのため完全な後方互換変更です。
非トランザクションテスト後にActiveRecord::FixtureSet.reset_cacheが呼ばれない問題を修正。`invalidate_already_loaded_fixtures`メソッドに2つのキャッシュ層のリセット処理を集約することで、テスト実行順序に依存したフィクスチャの不整合を解消しています。megatestによる完全ランダム実行環境で顕在化したバグへの対処です。
`#render_in` を実装したレンダラブルオブジェクトへのレンダリング呼び出しで、`locals` などのオプションとブロックが渡せるようになりました。レンダリングスタック全体への `&block` 伝播と `Renderable` クラスの改修が中心で、旧シグネチャ(引数1つ)は非推奨化され移行期間が設けられています。
ArelのテストスイートがMinitest::SpecのDSLからActiveSupport::TestCaseベースの記法へ全面移行されました。`describe`/`it`によるSpec構文を`test`ブロックへ変換し、`must_be_like`を`assert_like`に置き換えることで、Rails独自のテスト実行基盤「megatest」へのArel統合を妨げていた最後のブロッカーが解消されます。
Active Storage で `dependent: :purge` を指定した場合にレコード削除時に添付ファイルがデタッチされるだけで実際にはストレージから削除されていなかったバグを修正。`ActiveStorage::Attachment` の `after_destroy_commit` コールバックを拡張し、`:purge_later`・`:purge`・`:detach` の3オプションがすべて期待通りに動作するようになりました。
Ractorセーフ化を目的とした定数フリーズ対応(#57323)の直後に、フレームワーク利用者が拡張することを想定した `Date::DATE_FORMATS` と `AbstractMysqlAdapter::NATIVE_DATABASE_TYPES` が誤って凍結される問題が発生。本PRはこれらの定数が変更可能であることをテストとして明文化し、将来の同種のリグレッションをCIレベルで検出できる安全網を構築します。
Style/MutableConstant Copの有効化(#57323)により`NATIVE_DATABASE_TYPES`がフリーズされ、この定数を起動時に拡張するneighborなどのgemでFrozenErrorが発生するリグレッションが発生しました。本PRは`.freeze`を削除し`# rubocop:disable Style/MutableConstant`コメントを付与することで修正します。これはPostgreSQLアダプタと同一のアプローチであり、「Ractor安全性のための定数フリーズ」とフレームワーク拡張ポイントの維持を両立する設計判断です。
Action MailboxのMandrillインgressで、X-Mandrill-Signatureヘッダーが欠落したリクエストがNoMethodErrorを引き起こしていたバグを修正。`authenticated?`メソッドに`given_signature.present?`のガード節を追加し、署名欠落のリクエストも偽造署名と同様に401 Unauthorizedで拒否されるようになりました。
`Date::DATE_FORMATS` に誤って適用されていた `.freeze` を除去し、カスタムフォーマットの追加が `FrozenError` で失敗する問題を修正しました。`Time::DATE_FORMATS` に倣い、`rubocop:disable Style/MutableConstant` コメントを付与して意図的にミュータブルな定数として維持しています。
Rails の全フレームワークから `test:isolated` タスクが削除されました。各テストファイルを独立プロセスで実行する isolated テストは実行コストが高い一方で検出効果が低いと判断され、CI 停止(buildkite-config 側)に続いてリポジトリのタスク定義ごと廃止されています。ルート Rakefile を含む12ファイルが変更され、デフォルトタスクも `test` のみに簡略化されました。
Rails の Ractor 安全化に向け、`Style/MutableConstant` RuboCop cop が `EnforcedStyle: literals` で有効化されました。Array・Hash・String リテラルで定義された定数全体に `.freeze` が付与され、キャッシュや拡張ポイントとして意図的にミュータブルな定数は `rubocop:disable` コメントで明示的に除外されています。
megatestへの移行作業から切り出されたActive Recordのフレーキーテスト修正PR。非同期クエリ統計で`lock_wait`がnilの場合に算術エラーが発生する問題、`Car`モデルの`Person`依存宣言の欠落、テストファイルの`require`順序の3件を修正。依存関係の暗黙的な解決を明示的な宣言へと改めることで、テスト実行順序に依存しない堅牢な構成を実現しています。
ActiveRecordのテストに残っていた3箇所のアドホックなポーリングループを `wait_for` ヘルパーに置き換えました。上限なしのビジーウェイトによる無限ハングと、タイムアウト後もサイレントに続行するパターンを解消し、タイムアウト時に `Timeout::Error` が実際の失敗箇所で発生するよう統一しています。