なるようになるブログ

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

rails commit log流し読み(2023/03/15)

2023/03/15分のコミットです。

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

activerecord/CHANGELOG.md

railties/CHANGELOG.md


Pass self directly to connection_class

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

establish_connectionに渡すclassをresolve_config_for_connection経由で取得した値を使用していたのを、selfを使用するよう修正しています。古い振る舞いの為の処理で、現在はresolve_config_for_connection経由で値を取得する必要が無くなった為。


Update link to the security announcements list

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

security announcementを行う先のリンク先について、現在使われていないmailing listを削除し、代わりに https://discuss.rubyonrails.org/c/security-announcements/9 を追加しています。


add nodoc to valid*options methods

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

通常のRailsアプリケーションで使う想定ではないメソッドに:nodoc:の指定を追加しています。


Fix Rake-style task arguments for bin/rails

railties/lib/rails/commands/rake/rake_command.rbの修正です。

bin/railsコマンド経由で[]フォーマットを使用したRake taskの引数(e.g. foo[bar])を指定出来るよう修正しています。


Merge pull request #47663 from p8/railties/remove-unused-command-requires-in-tests

railtiesのテストから、使用していないrequireを削除しています。


Merge pull request #47655 from alpaca-tc/deferrable_exclusion_constraint

Active Recordの修正です。

PostgreSQLのexclude constraintsのmode(IMMEDIATEまたはDEFERRED)を引数で指定出来るよう修正しています。modeはdeferredオプションで値を指定出来るようになっています。

exclusion_constraint :users, "daterange(valid_from, valid_to) WITH &&", deferrable: :deferred

Fix rubygems version mentioned in CHANGELOG

railties/CHANGELOG.mdの修正です。

prerelease RubyをGemfile templateで使用出来るRubyGemsのバージョンの指定が誤っていたのを修正しています。


Merge pull request #47649 from fatkodima/retry-flaky-secure_password-test

activerecord/test/cases/secure_password_test.rbの修正です。

処理の実行時間に依存する不安定テストについて、テスト失敗時にretryするよう修正しています。


Remove redundant require: follow #10776

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

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


Revert "Quote binary strings in Arel"

Arelでbinary stringのquoteを行うようにした、Quote binary strings in ArelをRevertしています。

quoteする事により解釈が違う値に変換されてしまう事があり、非互換な処理になってしまう為、のようです。


Use Thor for built-in restart task

railtiesの修正です。

restartコマンドを実装するのにrake taskを使用していたのを、Thorを使用するよう修正しています。これにより、application directoryの外からでもrestartコマンドが実行出来るようになっています。


Merge PR #47675

Active Recordの修正です。

テストで使用するfixtureのpathが1つしか指定出来なかったのを、複数指定出来るよう修正しています。

ActiveSupport::TestCase.fixture_paths << "component1/test/fixtures"
ActiveSupport::TestCase.fixture_paths << "component2/test/fixtures"

合わせて、元々fixtureのpathを設定する為のattributeであるActiveSupport::TestCase.fixture_path/ActiveSupport::TestCase.fixture_path=はdeprecateになっています。


Merge pull request #47668 from Shopify/pm/destroy-async-composite-keys

Active Recordの修正です。

associationのdestroy asyncの処理でcomposite primary keyを使用出来るよう修正しています。


Merge pull request #47664 from Shopify/support-composite-identifier-in-find

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

ActiveRecord::FinderMethods#findにcomposite primary keyを使用出来るよう修正しています。

rails commit log流し読み(2023/03/14)

2023/03/14分のコミットです。

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

railties/CHANGELOG.md

activerecord/CHANGELOG.md


Merge pull request #47597 from higher-pixels/fix-47535

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

Rack 3でcookieが複数指定されている場合に、ActionDispatch::SSL middlewareのcookieのパース処理がエラーになってしまうバグがあったのを修正しています。


Merge pull request #47644 from zzak/action-discord

GitHub Actionsの修正です。

main branchのテストがfailした場合に、discordに通知するよう修正しています。


Implement SafeBuffer#bytesplice

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

信頼されていないユーザー入力を使用して、SafeBufferRuby 3.2で追加されたbytespliceメソッドを使用した場合にHTMLのエスケープ処理が実行されない脆弱性があったのを修正しています。CVE-2023-28120。

参考: [CVE-2023-28120] Possible XSS Security Vulnerability in SafeBuffer#bytesplice


Ignore certain data-* attributes in rails-ujs when element is contenteditable

rails-ujsの修正です。

data-methoddata-remotedata-disable属性を含む不正なHTMLコンテンツをクリップボードから貼り付けた場合に、XSSが出来てしまう可能性がある脆弱性を修正しています。CVE-2023-23913。

参考: [CVE-2023-23913] DOM Based Cross-site Scripting in rails-ujs for contenteditable HTML Elements


Typo fix on create_table description

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

create_tableメソッドのdoc内のタイポを修正しています。


Use Thor for built-in middleware task

railtiesの修正です。

middlewareコマンドを実装するのにrake taskを使用していたのを、Thorを使用するよう修正しています。


Merge pull request #47584 from yahonda/diag_47542

railties/lib/rails/generators/rails/app/templates/Gemfile.ttの修正です。

RubyGems 3.3.16以上を使用している場合のときのみ、rails newで生成するGemfileにprerelease Rubyのバージョンの指定が行えるよう修正しています。


Extract gem_ruby_version from app generator

railties/lib/rails/generators/app_base.rbrailties/lib/rails/generators/rails/app/templates/Gemfile.ttの修正です。

Ruby versionの取得処理をメソッドに切り出しています。


Delegated Type supports customizeable foreign_type column

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

delegated_typeで使用するobjectのtypeのcolumnをカスタマイズ出来るよう修正しています。デフォルト(role +_type)から変更したい場合、delegated_typeメソッドのforeign_type`オプションを指定すれば良いようになっています。

rails commit log流し読み(2023/03/13)

2023/03/13分のコミットです。

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


Convert Entryable comment definition to HTML table

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

Declare delegated_typeの項にある、delegator classに定義されるメソッドの一覧をHTMLのtableで表示するよう修正しています。


Merge pull request #47622 from p8/railties/thor-about-task

railties/lib/rails/commands/about/about_command.rbrailties/lib/rails/tasks/misc.rakeの修正です。

aboutコマンドを実装するのにrake taskを使用していたのを、Thorを使用するよう修正しています。


Optimize slow tests in activerecord

Active Recordのテストの修正です。

schema dumping及びschema cacheのテストで、arunit2 connectionを使用するよう修正しています。元々使用していたarunitと比べて保持しているtableが大分少なく、テストの実行時間が短く済む為。


Merge pull request #47651 from rrunyon/assert-deprecation-warning

activesupport/test/cache/cache_store_setting_test.rbの修正です。

mem_cache_storeに関するdeprecationがテスト実行時に出力されていたのを、出力されないよう修正しています。


Fix drop table invert when if_exists option is present

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

create_table/drop_tableメソッドにif_existsオプションを指定した場合にも、各メソッドがreversibleになるよう修正しています。


Merge pull request #47635 from Shopify/generate-composite-pk-in-fixtures

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

composite primary keysを指定している場合にfixtureのid生成処理が正しく動作するよう修正しています。

rails commit log流し読み(2023/03/12)

2023/03/12分のコミットです。

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

activerecord/CHANGELOG.md


Remove unused require of "active_support/deprecation" in DBconsoleCommand

railties/lib/rails/commands/dbconsole/dbconsole_command.rbの修正です。

使用していないrequireを削除しています。


Merge pull request #47438 from benedikt/arel-documentation

activerecord/lib/arel/nodes/node.rbのdocの修正です。

Arel::Nodes::Node classにdocを追加しています。


Update GitHub organization of Minitest [ci skip]

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

minitest gemのrepositoryをhttps://github.com/seattlerb/minitestからhttps://github.com/minitest/minitestに変更しています。minitest organization配下のrepositoryが変更された為。


Merge pull request #47636 from jonathanhefner/action_controller-remove-obsolete-_normalize_args

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

現在使用していないActionController::Rendering#_normalize_argsメソッドを削除しています。


Merge pull request #46192 from alpaca-tc/support_unique_constraints

Active Recordの修正です。

PostgreSQLUnique Constraintsをmigrationで指定出来るよう修正しています。

add_unique_key :sections, [:position], deferrable: :deferred, name: "unique_section_position"
remove_unique_key :sections, name: "unique_section_position"

deferrableオプションには、SET CONSTRAINTS実行時のmode(deferrableまたはimmediate)が指定出来るようになっています。

参考: PostgreSQL: Documentation: 5.4. Constraints

rails commit log流し読み(2023/03/11)

2023/03/11分のコミットです。

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


Use composite primary_key value as a fallback for query_constraints_list

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

primary_keyにcomposite primary keyが指定されている場合、各SQLを実行する際に使用するquery_constraints_listにcomposite primary keyの値を使用するよう修正しています。


Remove obsolete assert_not_deprecated

activesupport/test/core_ext/enumerable_test.rbの修正です。

現在不要なassert_not_deprecatedの呼び出しを削除しています。


Iterate instructions for custom namespaces in Rails < 7.1

rails guideのAutoloading and Reloading Constantsの修正です。

Railsのバージョンが7.1未満の場合にautoloadでcustom namespaceを使用する場合の説明を追加しています。

rails commit log流し読み(2023/03/10)

2023/03/10分のコミットです。

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

activemodel/CHANGELOG.md


Enhance has_secure_password to also generate a password_salt method https://github.com/rails/rails/commit/ebe9e575b7691c6a04abfadfedfb55516eb63e47

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

has_secure_passwordメソッドを使用している場合に、password digestの計算に使用する為のsaltを返す#{attribute}_saltを使用出来るよう修正しています。

class User < ActiveRecord::Base
  has_secure_password
  generates_token_for :password_reset, expires_in: 15.minutes do
    password_salt&.last(10)
  end
end

Use Thor for built-in secret task

railties/lib/rails/commands/secret/secret_command.rbrailties/lib/rails/tasks/misc.rakeの修正です。

secretコマンドを実装するのにrake taskを使用していたのを、Thorを使用するよう修正しています。


Define ActiveRecord::Base#id API for composite primary key models

Active Recordの修正です。

composite primary keyを使用している場合に、ActiveRecord::Base#idメソッドが全てのprimary keyのcolumnを返すよう修正しています。

class Order < ActiveRecord::Base
  self.primary_key = [:shop_id, :id]
end
order = Order.create!(shop_id: 1, id: 2)
order.id # => [1, 2]

rails commit log流し読み(2023/03/09)

2023/03/09分のコミットです。

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


Make some database tasks methods private

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

内部用のメソッドがAPI docに表示されないよう修正しています。


Fix schema cache file test

activerecord/test/cases/connection_adapters/schema_cache_test.rbの修正です。

schema cacheのテストで、テスト終了後にテストで使用したディレクトリを削除するようするよう、及び、ファイルの出力処理後にファイルが生成される事のチェックが出来ていなかったのを修正しています。


Factor out valid_column_definition_options

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

valid_table_definition_optionsvalid_column_definition_optionsメソッドをadapter instanceのpublic methodとして定義するよう修正しています。アプリケーション側でoverride出来るようにする為。


Fix rails new --dev APP_PATH command crashing

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

rails new--dev APP_PATHという順番でオプションを指定した場合に正しく動作していなかったのを修正しています。


Move SQLite3 blob encoding to ActiveModel

activemodel/lib/active_model/type/immutable_string.rbactiverecord/lib/active_record/connection_adapters/sqlite3/quoting.rbの修正です。

Stringをserializeする際、StringがbinaryにencodeされたStringの場合のみUTF-8に変換するよう修正しています。


Use an actual version in .node-version

railtiesの修正です。

Dockerで使用するNodeのバージョンを設定する際に、node --versionでバージョンを取得出来ない場合はltsという文字列を使用していたのを正しいバージョンの値(18.15.0)を使用するよう修正しています。ltsは全てのversion managerで使用出来る値ではない為。


Fix a typo TLS -> LTS

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

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