なるようになるブログ

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

rails commit log流し読み(2024/06/15)

2024/06/15分のコミットです。

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


Move the rewind code closer to the reason why we need to rewind

actionpack/lib/action_dispatch/http/request.rbの修正です。

request bodyを取得する際のbody streamのrewind処理について、rewindが必要になる処理(body streamのread後)の近くに移動するよう修正しています。


Document test transactions w/ multiple databases

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

Transactionsセクションに複数DBを使用している場合の挙動についての説明を追加しています。

rails commit log流し読み(2024/06/14)

2024/06/14分のコミットです。

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

activerecord/CHANGELOG.md


Fix a performance regression in attribute methods

Active Recordの修正です。

同じattribute nameに対して複数alias_attributeでaliasを定義した場合に値がcacheされてしまいaliasが正しく定義されないバグがあったのを修正した、Use call_args in the define_proxy_method namespace.の影響で、attribute methodを定義した際のメモリ使用量が増加、及び、実行時の性能が劣化してしまっていたのを修正しています。argsを元に動的にnamespaceを生成していたのを原因だったようで、違うやり方でaliasを定義出来るよう修正しています。


Add changelog for the new internal route rails/info/notes

railties/CHANGELOG.mdの修正です。

/rails/info/notesを追加したAdd an internal route for bin/rails notesの対応について、CHANGELOGにエントリーを追加しています。


Merge pull request #52112 from y-yagi/fix_driven_by_for_devcontainer

railties/lib/rails/generators/rails/devcontainer/devcontainer_generator.rbの修正です。

Development Containers用のsystem testの設定が正しく生成されていないバグがあったのを修正しています。


Merge pull request #52040 from zzak/re-52026

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

Rails::ConsoleMethodsがdeprecatedになったことを表示するためのメッセージの出力箇所が正しく表示されてなかったのを修正しています。


Bump stringio to 3.1.1

Gemfile.lockの修正です。

stringio gemのバージョンを3.1.1に更新しています。ロードされていいるgemのバージョンの不一致によりエラーになってしまうのを避けるため。


Document transactions in the testing guide

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

Transactionの挙動について説明したTransactionsセクションを追加しています。


Optimize ActiveRecord::Relation#exists? with no conditions for loaded relations

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

ActiveRecord::Relation#exists?メソッドで、load済みのrelationに対して、conditonを指定せずに再度実行した場合にqueryを実行せずに結果を返すよう修正しています。不要なSQLの実行を避けるため。

rails commit log流し読み(2024/06/13)

2024/06/13分のコミットです。

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

activesupport/CHANGELOG.md

activerecord/CHANGELOG.md


Fix action-text-attachment HTML escaping regression test

actiontext/test/unit/attachment_test.rbの修正です。

Action Textでattachmentがアップロードされた場合の挙動のテストで、テストで使用するメソッドを誤っていたのを修正しています。


Don't try to set invalid cookies.

actionpack/test/dispatch/cookies_test.rbの修正です。

テストで不正な文字をcookieを設定しないよう修正しています。Rack 3.1でdeprecatedになった挙動で、Rack 3.2ではcookieに不正な文字を指定した場合にexceptionがraiseされるようになっているため。


Merge pull request #52069 from otorain/fix-redundant-package-in-ci-template

railties/lib/rails/generators/rails/app/templates/github/ci.yml.ttrailties/lib/rails/generators/rails/plugin/templates/github/ci.yml.ttの修正です。

GitHub ActionsでDB用のパッケージをインストールする際に、同じパッケージが重複して指定されていたのを修正しています。


Merge pull request #49240 from deepakmahakale/notes-ui

railtiesの修正です。

bin/rails notesで表示している内容(annotationがついているコメント)をブラウザ(/rails/info/notes)で確認出来るよう対応しています。


Merge pull request #52100 from jdlubrano/fix-activerecord-configs-shadowing

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

new_framework_defaultsで指定したconfig.active_record.run_after_transaction_callbacks_in_order_definedが反映されないバグがあったのを修正しています。


Fix typo in global_executor_concurrency error message (#52103)

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

global_executor_concurrencyに不正な値が指定された場合のエラーメッセージ内のタイポを修正しています。


Update the upgrade guides for Rails 7.1 regarding the breaking change (in development/test environments) of the location of secret_key_base (#52083)

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

Upgrading from Rails 7.0 to Rails 7.1セクションに、devとtest envのsecret_key_baseを読み込むファイルのファイル名が変更になっている事についての説明を追加しています。


Improve ActiveSupport::MessageVerifier and ActiveRecord::SignedId docs

docの修正です。

ActiveSupport::MessageVerifier、及び、ActiveRecord::SignedIdのdocについて、言い回しの修正、Signing処理は暗号化ではない(単にencodingされているだけ)である旨の説明を追加しています。


Merge pull request #52054 from justinko/issue-52000

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

TestFixtures#fixtureメソッドについてのdocを追加しています。


[ActiveSupport] Add option filter on in_order_of (#52072)

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

in_order_ofメソッドに、指定された値と一致しない値を除外するかどうかを指定するためのオプション(filter)を追加しています。デフォルトはtrue(除外、今までと同じ挙動)で、除外したくない場合はfalseを指定すればOKです。

# 'filter' is true
[ Person.find(5), Person.find(3), Person.find(1) ].in_order_of(:id, [ 1, 5 ])
# => [ Person.find(1), Person.find(5) ]

# 'filter' is false
[ Person.find(5), Person.find(3), Person.find(1) ].in_order_of(:id, [ 1, 5 ], filter: false)
# => [ Person.find(1), Person.find(5), Person.find(3) ]

[ActiveRecord] Add option filter on in_order_of (#51761)

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

先程のActive Supportの対応と同様に、Active Recordのin_order_ofにもfilterオプションを追加しています。

order = [3, 4, 1]

# 'filter' is true
Post.in_order_of(:id, order).to_sql
# SELECT
  # "posts".* FROM "posts"
# WHERE
  # "posts"."id" IN (3, 4, 1)
# ORDER BY
  # CASE WHEN "posts"."id" = 3 THEN 1 WHEN "posts"."id" = 4 THEN 2 WHEN "posts"."id" = 1 THEN 3 END ASC


# 'filter' is false
Post.in_order_of(:id, order, filter: false).to_sql
# SELECT
  # "posts".* FROM "posts"
# ORDER BY
  # CASE WHEN "posts"."id" = 3 THEN 1 WHEN "posts"."id" = 4 THEN 2 WHEN "posts"."id" = 1 THEN 3 ELSE 4 END ASC

Merge pull request #52059 from fatkodima/move-associations-errors-to-errors

Active Recordの修正です。

activerecord/lib/active_record/associations.rbで定義されていたエラー関係のクラスをactiverecord/lib/active_record/associations/errors.rbに移動し、このファイルをactiverecord/lib/active_record/errors.rbでロードするよう修正しています。eager_loadがtrueの場合に、 activerecord/lib/active_record/associations.rbが読み込まれる前にエラークラスが使用されてエラーになる、という事があり、それを避けるため。


Log trace of causes for unhandled exceptions

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

ActionDispatch::DebugExceptionsでexceptionのcauseを表示する際に、エラーが発生した箇所のソースの情報も表示するよう修正しています。


properly reference tables from Arel in #order

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

ActiveRecord::Relation#orderArel::Attributeのオブジェクトを渡した場合に正しくSQLが組み立てられないバグがあったのを修正しています。


Harden the .current_transaction API

Active Recordの修正です。

current_transaction APIについて、transactionがfinalizedした後にcurrent_transaction経由でメソッドを呼び出した場合にerrorをraiseするよう修正、transaction外の場合にActive Record notificationのtransaction payloadをnull-objectからnilに変更、等の改善を行っています。


ActiveRecord::Transaction#open? returns false if the transaction is finalized

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

transactionがfinalizedしている場合、ActiveRecord::Transaction#open?がfalseを返すよう修正しています。

rails commit log流し読み(2024/06/12)

2024/06/12分のコミットです。

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

actiontext/CHANGELOG.md


Correct typo for Active Record Callbacks doc [ci skip]

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

associatedasssociatedにタイポしていたのを修正しています。


Merge pull request #52062 from skipkayhil/hm-restore-config-skb

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

Remove deprecated Rails.application.secretsで削除されたconfig.secret_key_base関係のいくつかのメソッドを戻しています。前のバージョンでdeprecatedになっていたため削除されたのですが、実際はdeprecatedになっていなかった挙動まで削除されてしまっており、非互換になってしまうため、それらの挙動を元に戻しています。


Merge pull request #52086 from y-yagi/bring_back_pumarb_to_app_update

railties/lib/rails/generators/rails/app/app_generator.rbの修正です。

app:update実行時にpuma.rbが更新対象のファイルに含まれてなかったのを、含むよう修正しています。


Print Rack.release as part of default Rails welcome page.

railties/lib/rails/templates/rails/welcome/index.html.erbの修正です。

welcome pageでRackのバージョンも表示するよう修正しています。


Do not use SyntaxError#path

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

エラー発生箇所をパースする際に、Ruby 3.3+の場合SyntaxError#pathを使用していたのを、使用しないよう修正しています。SyntaxError#pathは戻り値ががnilになるケースがあり、それが原因で違うエラーが発生してしまう事がある為。


Add support for fast smoke tests.

Rakefileの修正です。

smoke test用のRake taskで、コンポーネントの指定、及び、isolated testを実行するかを引数で指定出来るよう修正しています。必要なテストだけ高速に実行出来るようにする為。


Only sanitize content attribute when present in attachments

actiontext/lib/action_text/content.rbの修正です。

Sanitize ActionText HTML ContentAttachment in Trix edit viewで行われるようになったAction TextのHTML ContentAttachmentのsanitize処理について、ContentAttachmentがある場合のみsanitize処理を行うよう修正しています。ContentAttachmentが無い場合だと、この処理の影響で存在しなかったcontent attributeが追加されてしまい、previewの表示に影響が出てしまう為。

rails commit log流し読み(2024/06/11)

2024/06/11分のコミットです。

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


Define the new start_transaction.active_record event

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

DBのtransactionが開始した際に実行されるstart_transaction.active_record eventを追加しています。

rails commit log流し読み(2024/06/10)

2024/06/10分のコミットです。

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


[RF-DOCS] Active Record Callbacks (#51654)

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

guide全体について、validations guideへのリンクの追加、exampleコードの追加、説明の追加等を行っています。


docs: update list of methods that trigger active record callbacks

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

callbackが実行されるメソッドの一覧にupdate_attribute!を追加しています。

rails commit log流し読み(2024/06/09)

2024/06/09分のコミットです。

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

activesupport/CHANGELOG.md


Merge pull request #52034 from jhawthorn/ruby_time_zone_object_support

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

ActiveSupport::TimeZone#abbrメソッド、及び、ActiveSupport::TimeZone#dst?メソッドを追加しています。Ruby本体のTimeクラスに同名のメソッドがすでにあり、Railsでも同じように使用出来るようにする為。


Fix a value for disabling enqueue_after_transaction_commit [ci-skip]

rails guideのRuby on Rails 7.2 Release Notesの修正です。

enqueue_after_transaction_commitを無効化するときに指定する値が誤っていたのを修正しています。


Improve error message when passing a proc to assert_difference

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

assert_difference及びassert_changesにProcを渡してassertionがfailした場合に、Procのソースコードを表示するよう修正しています。

test "see proc output" do
  assert_difference -> { 1 } do
  end
end

例えば、上記のようなコードがあった場合、下記のように出力結果が変わるようになっています。

Before

#<Proc:0x000074357846eae8 /home/richard/my-test-app/test/models/test.rb:21 (lambda)> didn't change by 1, but by 0.
Expected: 2
  Actual: 1

After

"-> { 1 }" didn't change by 1, but by 0.
Expected: 2
  Actual: 1