なるようになるブログ

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

rails commit log流し読み(2021/11/27)

2021/11/27分のコミットです。

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

actionpack/CHANGELOG.md


[skip ci] fix tiny typo

activesupport/lib/active_support/core_ext/date_and_time/compatibility.rbactivesupport/lib/active_support/inflector/methods.rbのdocの修正です。

各doc内のタイポを修正しています。


Revert "Add missing require "active_support in XmlMini"

active_supportのrequireを追加した、Add missing require "active_support in XmlMiniをRevertしています。

active_supportフレームワークのトップレベルでロードされるようになっており、Active Support配下の個別ファイルでrequireする必要は無い為。


Consider onion services secure for cookies

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

secure cookieを使用出来るかどうかのチェック処理で、Onionドメインであればsecure cookieを使用出来るよう修正しています。OnionドメインはTor経由でのみアクセス可能であり、エンドツーエンドの暗号化および認証が行われている為、HTTPSでなくてもsecureである、とみなす事が出来る為。


Move the least common check to the end of the conditional

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

先のコミットで追加された、onionドメインのチェック処理を、チェックの最後に行うよう修正しています。onionドメインのチェックは他のチェックよりも行われる可能性が低いため。


Wrap ActionController::TestCase with Rails executor

Action Pack、Active Supportの修正です。

Rails.application.executor hookを、ActionController::TestCaseのリクエスト実行時にも呼ぶよう修正しています。より実際のアプリケーションに近いかたちでテストが動作するようにする為。

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

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

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

activerecord/CHANGELOG.md

railties/CHANGELOG.md

activesupport/CHANGELOG.md

activestorage/CHANGELOG.md


Clarify Active Record Encryption docs

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

guide全体のグラマーや言い回しの修正を行っています。


Fix DescendantTracker.clear on Ruby 3.1

Active Support、railtiesの修正です。

ActiveSupport::DescendantsTracker.clearRuby 3.1で動作しなくなっていた(Ruby本体のClass#descendantsを使うようにした影響)のを修正しています。


DescendantsTracker: fix the TruffleRuby branch

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

ActiveSupport::DescendantsTracker.clearのTruffleRuby向けの処理で必要なオブジェクトのインスタンス生成が漏れていたのを修正しています。


Make sure errors.messages works in the same way as Rails 6.1

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

errors.messagesに存在しないattributeを指定した場合に空のArrayを返すよう修正しています。Rails 6.1までと同じ挙動になるようにする為。


Require the ErrorReporter#handle fallback to be a callable

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

Rails.error.handleに指定するfallback値に、callableを指定させるよう修正しています。


Merge PR #43517

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

to_aメソッドなどでpersisted recordsとin-memory recordsのマージ処理が行われる場合に、実際に保存されているrecordよりも多く結果が変える(in-memory内にあるpersited recordsの考慮が不足していた)事があるバグがあったのを修正しています。


Merge pull request #43324 from ghiculescu/patch-5

activesupport/lib/active_support/core_ext/module/attribute_accessors.rbactivesupport/lib/active_support/core_ext/module/attribute_accessors_per_thread.rbのdocの修正です。

thread_mattr_accessorや親/子クラスと値を共有しない点についてdocに説明を追加しています。


Merge PR #43322

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

ActiveRecord::QueryMethods#in_order_ofにintegerのenumで定義した値を指定した場合に正しく結果が取得出来ないバグがあったのを修正しています。


Merge pull request #43284 from mibradev/password-digest-nil

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

passwordが空の場合に#authenticateメソッドがerrorをraiseしていたのを、falseを返すよう修正しています。


Add CHANGELOG entry for #43284

activerecord/CHANGELOG.mdの修正です。

先の#authenticateメソッドの対応についてCHANGELOGにエントリーを追加しています。


Fix AzureStorageService#headers_for_direct_upload default for #43294

activestorage/lib/active_storage/service/azure_storage_service.rbの修正です。

AzureStorageService#headers_for_direct_uploadメソッドのcustom_metadata引数のデフォルト値の指定が不足していたのを修正しています。


Merge PR #41769

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

X-XSS-Protectionのデフォルト値をXSS auditorを無効(0)に変更しています。

X-XSS-Protectionヘッダーはdeprecateになっており、メジャーなブラウザ(Chromeなど)ではXSS auditorは既に削除済みの状態です。古いブラウザではX-XSS-ProtectionのデフォルトはXSS auditorを有効(1)になっている事があるのですが、これはsecurity issueになってしまう可能性がある為、明示的に無効を指定するようにしています(OWASP


Use reflection_class in TableRow for fixtures

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

fixturesでmodelのロードをする際に、STIのsubclassについては正しいsubclassのmodelとしてロードするよう修正しています。これにより、STIのsubclassでenumを独自に定義していた場合に、fixture load時にそのenumの値が無視されてしまう、というバグがあったのが修正されるようになっています。


Merge pull request #43726 from timoschilling/add-pathname-existence

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

Pathname classに、ファイルが存在する場合はreceiverを、存在しない場合はnilを返すPathname#existenceを追加しています。これにより、ファイルが存在する場合のみファイルの中身を読み込みたいような場合に、Pathname.new("file").existence&.readのように書けるようになっています。


Add ActiveStorage::Blob.compose

Active Storageの修正です。

複数のblobを連結する為のActiveStorage::Blob.composeを追加しています。元々GCSにComposite objectsというファイルを結合する為の仕組みがあり、このAPIを使用してGCS serviceは実装されています。GCS以外のサービスについては、独自にファイルを結合してアップロードするようになっています。ActiveStorage::Blob.compose(filename: "all_numbers.txt", blobs: blobs)にように、結合後のファイル名と、結合したblobをArrayで指定する事で使用出来るようになっています。


Add missing require "active_support in XmlMini

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

不足していたactive_supportのrequireを追加しています。

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

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

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

activerecord/CHANGELOG.md


Add missing comment char to RDoc comment

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

countメソッドのdoc内のexampleコードのコメント部分の先頭に#が不足していたのを修正しています。


Allow a fallback value to be returned from Rails.error.handle

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

Rails.error.handleにerrorになった場合に返すfallback値を指定出来るよう修正しています。

user = Rails.error.handle(fallback: User.anonymous) do
  User.find_by(params)
end

Merge pull request #43712 from Shopify/as-cache-error-handling

Active Supportの修正です。

Memcache storeとRedis storeのerror report処理でActiveSupport::ErrorReporterを使用するよう修正しています。


Merge pull request #43711 from Shopify/thread-accessor-isolated-state

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

thread_mattr_accessorで、Introduce ActiveSupport::IsolatedExecutionState for internal useで追加したActiveSupport::IsolatedExecutionStateを使用するよう修正しています。


Merge pull request #43704 from esparta/fix_race_conditions_test_cache_iv

activesupport/test/cache/behaviors/failure_raising_behavior.rbactivesupport/test/cache/behaviors/failure_safety_behavior.rbの修正です。

Active Supportのcacheのテストで、異なるテストで同じkeyを使っていたのを、keyにランダムな値を使用するようにして、並列に実行してもfailしないよう修正しています。


Add support for passing the list of columns to update in upsert_all

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

upsert_allに、コンフリした場合に更新するカラムを指定する為の:update_onlyオプションを追加しています。

Commodity.upsert_all(
  [
    { id: 2, name: "Copper", price: 4.84 },
    { id: 4, name: "Gold", price: 1380.87 },
    { id: 6, name: "Aluminium", price: 0.35 }
  ],
  update_only: [:price] # `price`カラムのみ更新される
)

Use ActiveRecord::FixtureSet.signed_global_id defined by the globalid gem

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

Active Recordで定義されていたsigned_global_idを、globalid gemで定義されているsigned_global_idを使用するようする修正しています。

元々signed_global_idはActive Record側で定義されていたメソッドなのですが、このメソッドはglobalidに依存している、かつ、Active Recordはglobalidには依存しておらず、globalidを前提としたコードをActive Record側で定義するのはよくないよね、という事でglobalid側で定義されるようになりました。


Add missing space to error message

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

credentialの設定が正しく行われていない場合のエラーメッセージにスペースが不足していたのを修正しています。


Explicitly order Railties by load order

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

Class#descendantsを使用する事によって、Railtiesのload順がランダムになってしまっていたのを、元と同じように指定した順にロードされるよう修正しています。load順がランダムになると挙動が変わってしまうケースがある為。


AS::Callbacks specialize call templates for better performance

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

run_callbacksにcallbackが登録されていない場合の性能改善の為のリファクタリングを行っています。

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

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

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

activestorage/CHANGELOG.md


Expose role/shard on pool/connection

Active Recordの修正です。

connection poolのinitializeでrole / shardを指定出来るよう対応、及び、connection / connection poolで使用しているrole / shardを取得出来るようメソッドを追加しています。


Fix active_record_migrations guide typo

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

Referencesの項のグラマーの修正を行っています。


Fix active_record_multiple_databases.md guide typo

rails guideのMultiple Databases with Active Recordの修正です。

Migrate to the new connection handlingの項のタイポを修正しています。


Merge pull request #43693 from esparta/fix_race_conditions_test_cache_iii

activesupport/test/cache/behaviors/cache_instrumentation_behavior.rbactivesupport/test/cache/stores/redis_cache_store_test.rbの修正です。

Active Supportのcacheのテストで、異なるテストで同じkeyを使っていたのを、keyにランダムな値を使用するようにして、並列に実行してもfailしないよう修正しています。


Update inspect output of ActionController::Parameters in docs [skip-ci]

actionpack/lib/action_controller/metal/strong_parameters.rbのdocの修正です。

各doc内のexampleコードの実行結果が、実際の結果と異なっている箇所があったのを修正しています。


Introduce custom metadata

Active Supportの修正です。

blobにcustom metadataを指定出来るよう修正しています。metadataは使用している外部ストレージにそのまま保存されます。なお、direct uploadを使用している場合、別途custom metadaを保存出来るようにする為のbucket CORSの修正が必要になります。


Fix metadata assertions in direct upload tests

activestorage/test/controllers/direct_uploads_controller_test.rbの修正です。

先のコミットで追加された、blobにcustom metadataを設定するテストがfailしていたのを修正しています。


Fix boolean error in form helpers guide

rails guideのAction View Form Helpersの修正です。

Preventing Empty Recordsの項にある、accepts_nested_attributes_for:reject_ifにprocを指定した場合の挙動の説明に誤りがあったのを修正しています。

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

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

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


Add warning about type arg in column_exists?

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

column_exists?メソッドのdocに、column_exists?type引数に違う値にcastされる型では正しく動作しない可能性がある旨注記を追加しています。


Merge pull request #43612 from MaxLap/patch-1

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

recordの削除に失敗した場合のエラーメッセージに、recordのclassと削除に使用したkeyを含むよう修正しています。


Merge pull request #43365 from alpaca-tc/fixed_scaffold

railties/lib/rails/generators/erb/scaffold/scaffold_generator.rbrailties/lib/rails/generators/erb/scaffold/templates/partial.html.erb.ttの修正です。

scaffold generatorにnamespaced modelを指定した場合に、誤った値を参照しているpartial htmlが生成されてしまうバグがあったのを修正しています。


Better column_exists? docs

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

column_exists?メソッドのdoc内のtype引数について説明している箇所の言い回しを修正しています。


activerecord: add missing require statements

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

不足していたrequireを追加しています。


Use native Class#subclasses if available

Active Supportの修正です。

Ruby本体のClass#subclassesが使える場合、そちらを使用するよう修正しています。Ruby 3.1でRuby本体にClass#subclassesが追加された為。参考: Feature #18273: Class#subclasses - Ruby master - Ruby Issue Tracking System


Use same comment format as other gems, including links to learn more

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

rails newで生成するGemfile内のsprockets-rails、propshaftに対するコメントに、他のgemと同じようにGitHubのコードへのリンクを追加しています。


Cut down on needlessly verbose comments

railties/lib/rails/generators/rails/app/templates/config/routes.rb.ttの修正です。

rootingに対するコメントの言い回しを修正しています。