なるようになるブログ

読書感想文かrailsについてかrubyについてか

rails commit log流し読み(2022/11/26)

2022/11/26分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

activerecord/CHANGELOG.md

actionpack/CHANGELOG.md


Fix composed_of freezing and duplication

activerecord/lib/active_record/aggregations.rbの修正です。

DBのデータを読み込んでインスタンスを生成したした場合に、composed_ofの値をfreezeするよう修正しています。writer経由で値を設定した場合はfreezeするように元々なっており、挙動を合わせる為。


Update migration generator timestamp behavior

rails guideのActive Record Migrationsの修正です。

Creating a Migrationの項、generatorはmigrationファイル名の先頭にタイムスタンプを追加する旨説明を修正しています。


Clarify load_environment_config initializer order [ci-skip]

rails guideのConfiguring Rails Applicationsの修正です。

load_environment_config initializerについて説明している箇所にこのinitializerはload_environment_hookより前に実行される旨説明を追加しています。


Improve enum docs for instance_methods and scopes [ci-skip]

activerecord/lib/active_record/enum.rbのdocの修正です。

enuminstance_methodsオプションについて説明している箇所のexampleコードが、enumメソッドの記載だけだったのを、classの記載から行うよう修正しています。


update load_defaults 7.1 to config.load_defaults 7.1

docの修正です。

load_defaults -> config.load_defaultsに修正しています。


Merge pull request #46570 from andyw8/andyw8/add-details-to-cookie-overflow-exception

actionpack/lib/action_dispatch/middleware/cookies.rbの修正です。

CookieOverflow exceptionをraiseする際に、エラーになったcookie名とサイズをエラーメッセージに含むよう修正しています。

rails commit log流し読み(2022/11/25)

2022/11/25分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

railties/CHANGELOG.md

activerecord/CHANGELOG.md


Add AS::ParameterFilter.precompile_filters

Active Support、railtiesの修正です。

config.filter_parametersのprecompileを行えるようにしています。precompileしておくと、実行時のfilter処理が多少速く実行されるようになっています。この挙動は、config.precompile_filter_parametersにtrueを指定、または、load_defaults 7.1を指定した場合に使用されるようになっています。


Override ERB::Util#html_escape with Module#prepend

activesupport/lib/active_support/core_ext/erb/util.rbの修正です。

html_escapeCGI.escapeHTMLが使われていたのをERB::Util#html_escapeを使用するよう修正しています。Ruby 3.2、または、次にリリースされるerb gemから、escape処理が不要な場合、ERB::Util#html_escape方がCGI.escapeHTML`より高速になっている為、との事です。

参考: Feature #19102: Optimize ERB::Util.html_escape more than CGI.escapeHTML for template engines


document instance_methods option on enum [ci-skip]

activerecord/lib/active_record/enum.rbのdocの修正です。

enumのdocに、enumメソッドでinstance_methodsを生成しない場合の例を追加しています。


Fix incorrect caching of case-insensitivity

activerecord/lib/active_record/connection_adapters/postgresql_adapter.rbの修正です。

columnがinsensitive comparisonの対象かどうかのチェック処理で、値がfalseの場合に、値がキャッシュされず毎回queryが実行されてしまっていたのを、falseの場合も値がキャッシュされるよう修正しています。

rails commit log流し読み(2022/11/24)

2022/11/24分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

activerecord/CHANGELOG.md

actionview/CHANGELOG.md

actioncable/CHANGELOG.md


Merge PR #45696

activerecord/lib/active_record/persistence.rbの修正です。

persistanceにbuildメソッドを追加しています。newメソッドのラッパーなのですが、attributeをArrayで指定しての複数オブジェクトのまとめての作成などが出来るようになっています。

User.build([{ first_name: 'Jamie' }, { first_name: 'Jeremy' }])

# blockを指定した場合、blockは全てのオブジェクトで実行される
User.build([{ first_name: 'Jamie' }, { first_name: 'Jeremy' }]) do |u|
  u.is_admin = false
end

Validate ActiveStorage::Blob io is rewindable

activestorage/app/models/active_storage/blob.rbの修正です。

ActiveStorage::Blob.create_and_upload!のioパラメータにrewindableじゃないオブジェクトが指定された場合にArgumentErrorをraiseするよう修正しています。


Merge PR #45660

activerecord/lib/active_record/attribute_methods/serialization.rbactiverecord/lib/active_record/coders/yaml_column.rbの修正です。

serializeメソッドで、permitted classes 及び unsafe loadの設定を、attribute毎に指定出来るよう修正しています。

class User < ActiveRecord::Base
  serialize :preferences, yaml: { permitted_classes: [Symbol, Time] }
end

Merge PR #43019

actionview/lib/action_view/helpers/tags/select.rbの修正です。

grouped/nested collectionsをselectに指定した場合に、collectionの末尾に指定した要素がselect tagのattributeとして使われるよう修正しています。

<%= 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>

Allow resetting singular associations

activerecord/lib/active_record/associations.rbactiverecord/lib/active_record/associations/builder/singular_association.rbの修正です。

has_one、及び、belongs_toassociationを使用している場合に、そのassociationのcacheをアンロードする為のreset_association(association`部分はassociation名)メソッドが使用出来るよう修正しています。

class Account < ApplicationRecord
  has_one :beneficiary
end

account.reset_beneficiary

Merge pull request #45119 from p8/guides/add-cors-to-security-guide

rails guideのSecuring Rails Applicationsの修正です。

CORSの対応方法について説明した、Cross-Origin Resource Sharingの項を追加しています。


Merge pull request #46440 from okuramasafumi/add-active-support-note-to-contribution-guide

rails guideのHow to contribute to Ruby on Railsの修正です。

Do you intend to add a new feature or change an existing one?の項に、Active Supportのcore extensionsの変更は基本的にはrejectされる、そのような変更を行いたい場合、Ruby本体へ提案を行う方が良い、という説明を追加しています。


Inline QueryConstraints module into Persistence

Active Recordの修正です。

query_constraintsに関する処理を専用のmoduleで行っていたのを、Persistence内で処理を定義するよう修正しています。専用のmoduleで行う程の処理の量では無いため。


Avoid warning when loading YAMLColumn generated by old versions of Rails on Ruby 2.7

activerecord/lib/active_record/coders/yaml_column.rbの修正です。

Rails + Ruby 2.7 で生成したYAMLColumnをロードした場合に未初期化に関するwarningが出ていたのを修正しています。


feat: restore Action Cable Redis pub/sub listener on connection failure

actioncable/lib/action_cable/subscription_adapter/redis.rbの修正です。

Action CableのRediのpub/sub adapterで、Redisのconnectionが切れた場合、自動で再接続するよう修正しています。


Avoid validating belongs_to association if it has not changed

Active Recordの修正です。

required: truebelongs_to associationが定義されている場合、レコード更新時に必ずそのassociationの存在チェックをするqueryが実行されていたのを、associationの値が変更されていない場合は、そのチェックを実行しないよう修正しています。この挙動は、config.active_record.belongs_to_required_validates_foreign_keyにtrueを指定、または、load_defaults 7.1を指定した場合に使用されるようになっています。


option to disable all methods that ActiveRecord.enum generates

activerecord/lib/active_record/enum.rbの修正です。

オプションで、ActiveRecord.enumのメソッドを全て生成しないように出来るよう修正しています。生成したく無い場合は、_instance_methodsにfalseを指定すれば良いようになっています。

class Book < ApplicationRecord
  enum status: [:proposed, :written], _instance_methods: false
end

LoggerThreadSafeLevel only impact the receiving logger

activesupport/lib/active_support/logger_thread_safe_level.rbの修正です。

LoggerSilenceがreceiverのloggerだけでなく、全てのloggerに影響を与えてしまう(全てのloggerの出力を抑止してしまう)バグがあったのを修正しています。

rails commit log流し読み(2022/11/23)

2022/11/23分のコミットです。

CHANGELOGにのったコミットは以下の通りです。

actionmailbox/CHANGELOG.md

railties/CHANGELOG.md


Add example for data-turbo-confirm on button_to in Working with JavaScript Guide

rails guideのWorking with JavaScript in Railsの修正です。

Confirmationsの項に、button_todata-turbo-confirmを指定する場合のexampleを追加しています。


Add X-Forwarded-To addresses to recipients

actionmailbox/lib/action_mailbox/mail_ext/addresses.rbactionmailbox/lib/action_mailbox/mail_ext/recipients.rbの修正です。

recipientsにX-Forwarded-Toに指定されたaddressを含むよう修正しています。転送されたメールも処理出来るようにする為。


Merge pull request #46473 from nvasilevski/remove-state-invalidate-indirection

activerecord/lib/active_record/connection_adapters/abstract/transaction.rbactiverecord/lib/active_record/connection_adapters/abstract_adapter.rbの修正です。

transactionにinvalidate!メソッドを定義し、transactionのinvalidateを行う際にtransactionの変数を直接操作するのではなく、transactionのメソッドを経由で処理を行えるよう修正しています。


Merge pull request #46439 from Shopify/use-primary-key-as-default-query-constraints

activerecord/lib/active_record/persistence.rbactiverecord/lib/active_record/query_constraints.rbの修正です。

query_constraintsで使用するカラムのリストに、primary keyをデフォルトで使用するようにして、各メソッド毎に行っていた互換性の為のprimary keyの設定処理を削除しています。


Add after_routes_loaded hook for Engines to trigger code after application routes have been loaded (#46539)

railties/lib/rails/application/finisher.rbrailties/lib/rails/railtie/configuration.rbの修正です。

routesのload完了後に実行する処理を定義する為のafter_routes_loaded hookを追加しています。

config.after_routes_loaded do
  # ...
end

Merge pull request #46545 from fatkodima/eager_load-validation_error

activemodel/lib/active_model.rbの修正です。

ActiveModel::ValidationErrorをautoloadの対象に追加しています。


Merge pull request #46525 from rails/rm-fix-touch

Active Recordの修正です。

nested attributeで指定したassociationを更新した場合に、そのassociation経由でのtouch処理が行われないバグがあったのを修正しています。


Merge pull request #46533 from fatkodima/fix-file_fixture_path

railties/lib/rails/test_help.rbの修正です。

Active Recordがロードされない場合も、file_fixture_pathは設定されるよう修正しています。Active Recordがロードされていないアプリケーションでもfile_fixtureメソッドが動作するようにする為。


Remove blank lines

rails guideのWorking with JavaScript in Railsの修正です。

不要な空行を削除しています。


Merge pull request #46554 from MatElGran/nested-field-hash-models

actionview/lib/action_view/helpers/form_helper.rbの修正です。

FormBuilder#fields、及び、FormBuilder#fields_forにhash-like modelを指定した場合に、メソッドに指定したfields optionsが無視されてしまう(recordがそのまま使われてしまう)バグがあったのを修正しています。

rails commit log流し読み(2022/11/22)

2022/11/22分のコミットです。

CHANGELOGへの追加はありませんでした。


Fix docs for Readonly Attributes changes

activerecord/lib/active_record/readonly_attributes.rbのdocの修正です。

Raise on assignment to readonly attributesでreadonly attributesに値を設定した場合にexceptionをraiseするように変更されたのですが、ドキュメントが古い挙動のままの説明になっていたのを修正しています。


Update upgrading_ruby_on_rails.md

rails guideのUpgrading Ruby on Railsの修正です。

Key generator digest class change requires a cookie rotatorの項に、cookie rotatorの設定が無いと、upgradeの際にユーザのセッションが無効化されてしまう旨説明を追加しています。


Merge pull request #46534 from mensfeld/patch-1

activesupport/lib/active_support/testing/time_helpers.rbの修正です。

並列実行される事が無い筈の処理でConcurrent::Mapを使用していたのを、通常のHashを使用するよう修正しています。


Merge pull request #46531 from p8/guides/fix-capitalization-of-AJAX

docの修正です。

AJAXAjaxに修正しています。


Merge pull request #46530 from jonathanhefner/url_helpers-use-dup-for-reinclusion

actionpack/lib/abstract_controller/railties/routes_helpers.rbactionpack/lib/action_dispatch/routing/route_set.rbの修正です。

controllerにurl_helpersの設定を行う際、不要なModuleクラスが追加されないよう修正しています。


Rename initializer to respect convention

activerecord/lib/active_record/railtie.rbの修正です。

cache versioningをサポートしているかどうかをチェックするinitializer名を、他のinitializer名と同じ命名規則の名前(underscore_framework.underscore_name)に修正しています。


Remove ActiveStorage::Blob classic mode gotcha

activestorage/app/models/active_storage/blob.rbの修正です。

ActiveStorage::Blobのinclude処理が、classic loaderを考慮したコードになっていたのを、Zeitwerk loaderのみをサポートしたコードに修正しています。classic loaderはもう存在せず、サポートする必要が無いため。


Merge pull request #46501 from evaniainbrooks/fix-mailer-template

mailter templateのmetaタグから、不要な閉じタグを削除しています。


AbstractAdapter: only synchronize when necessary

Active Record、Active Supportの修正です。

DB関連の処理を行う際に、必ずmonitorを使って同期処理が行われていたのを、同期処理が必要な箇所でのみ使用するよう修正しています。 この同期処理はsystem test対応時に、同じDBコネクションが複数スレッドで使われる事がなる為追加されたのですが、テスト以外の環境で同じコネクションが異なるスレッドで共有される事は無く、同期処理は不要な為修正されています。

rails commit log流し読み(2022/11/21)

2022/11/21分のコミットです。

CHANGELOGへの追加はありませんでした。


Make sure that concurrent map usage is thread-safe

actionview/lib/action_view/renderer/abstract_renderer.rbの修正です。

partial nameを保持する変数の初期化処理がスレッドセーフになるよう修正しています。

rails commit log流し読み(2022/11/20)

2022/11/20分のコミットです。

CHANGELOGへの追加はありませんでした。


Merge pull request #46516 from risinglf/fix-uuid-on-active-storage-guide

rails guideのActive Storage Overviewの修正です。

Setupの項に、generatorで生成するmigrationファイルで、primary_key_typeにuuidを使用する場合の設定方法についての説明を追加しています。