なるようになるブログ

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

rails commit log流し読み(2023/03/29

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

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

railties/CHANGELOG.md

activerecord/CHANGELOG.md

actionpack/CHANGELOG.md


Accept list of composite primary keys in #destroy

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

destroyメソッドにcomposite primary keyのリストを指定出来るよう修正しています。


Merge pull request #47610 from ghiculescu/less-rake

rails guideの修正です。

各taskを実行するのにrakeを使用している箇所を、railsコマンドを使用するよう修正しています。


Merge pull request #47736 from rails/thread-safety

activesupport/lib/active_support/notifications/fanout.rb

Notifications::Fanoutでsubscribersを保持するのにHashを使用していたのをConcurrent::Mapを使用するよう修正しています。thread safeにする為。


Use compute_if_absent to make sure we don't get race conditions

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

先の対応のフォローアップとして、Concurrent::Mapで値が指定されてなかった場合の初期化処理にcompute_if_absentを使用するよう修正しています。race condition対策。


Use bin/rails for Rake commands usage

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

Rake commands usageのrailsbin/railsに修正しています。


Merge pull request #47787 from Shopify/pm/cpk-destroy


Remove superflous check

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

不要なidがArrayかどうかのチェックを削除しています。


Merge pull request #47718 from jonathanhefner/command-did_you_mean-load-rake-tasks-only-once

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

bin/rails --helpに表示されるコマンドの一覧に、ユーザが定義したrakeタスクも含まれてしまっていたのを、rails及びpluginで提供されているコマンドのみ表示されるよう修正しています。


Merge pull request #47679 from smridge/update-trix

Action Textの修正です。

bundleしているTrixのバージョンを2.0.4に更新しています。Update Action Text's Trix dependencyで同様の対応を行ったのですが、その際にTrixのバージョンが2.0.4ではなく2.0.0になってしまっていた為、再度2.0.4に更新するよう対応しています。


Merge pull request #47640 from a5-stable/add-record-not-destroyed

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

after_destroy, before_destroy 及び around_destroy callbackでActiveRecord::RecordNotDestroyedでraiseされた場合の挙動についての説明を追加しています。


Use bin/rails in generator Base banner

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

generatorのbannerでrailsではなくbin/railsを使用するよう修正しています。


Merge pull request #47753 from mscoutermarsh/auto-gen-index-name

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

自動で生成されるindex名について、エラーにならない長さ(62 bytes)になるよう修正しています。生成されるindex名が左記のサイズを超えた場合、エラーにならない長さに調節 + index名がユニークになるようユニークなidを付与するよう修正しています。

# before
index_testings_on_foo_and_bar_and_first_name_and_last_name_and_administrator

# after
idx_on_foo_bar_first_name_last_name_administrator_5939248142

Use idx instead of ix for index prefix

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

indexのprefixとしてix_を使用していたのを、idx_を使用するよう修正しています。


Merge pull request #47734 from olefriis/add-arel-node-docs-for-binding-parameters-and-plus

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

Arel.sqlのdocにbinding parameterを使用する場合の説明とexampleを追加しています。


Alias ActionController::Parameters except as without

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

ActiveController::Parametersexceptのaliasとしてwithoutを定義するよう修正しています。


Fix Gemfile resolution on parser gem

Gemfile.lockの修正です。

rubocop-ast 1.27.0が要求するバージョンとマッチするよう、parser gemを最新バージョンに更新しています。


Fix Enumerable#in_order_of to preserve duplicates

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

Enumerable#in_order_ofが重複したkeyの値を除外するようになってしまっていたのを、重複した値も保持するよう修正しています。


Merge pull request #47796 from Shopify/pm/read-attribute

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

#read_attribute(:id)にcomposite primary keyのサポートを追加しています。


ActiveModel::Type::SerializeCastValue only compute compatibility once per class

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

ActiveModel::Type::SerializeCastValueで値がcompatibleかどうかのチェックをインスタンス毎に行っていたのを、classで行う&値をキャッシュするようにして、各インスタンスで処理を行わないでよいよう修正しています。class共通の値で各インスタンス毎に処理を行う必要は無い値の為。

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

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

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

activestorage/CHANGELOG.md

activerecord/CHANGELOG.md


Update active_record_migrations.md

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

Using reversibleの項にあるexampleコードについて説明している箇所で、exampleコードで行われる処理についての説明が不足していたのを追加しています。


Remove mini_mime usage in favour of marcel

Active Storageの修正です。

Active Storage内部でmime関連の処理を行うのにmini_mimemarcelと2つのgemを使用していたのを、全ての処理でmarcelを使用するようにして、mini_mimeは依存から削除するよう修正しています。


Merge pull request #47777 from shouichi/use-google-cloud-env

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

GCSでemailを取得するのに、google-cloud-env gemが提供しているメソッドを使用するよう修正しています。


Output generator usage on two lines

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

railsコマンドのusageを2行にわけて表示するよう修正しています。


Merge pull request #47781 from brenda-daroz/fix-hover-welcome-page

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

welcomeページのロゴをhoverした際に画像が正しく切り替わるよう修正しています。


Merge pull request #47773 from Roriz/feat/custom-header-direct-upload

Active Storageの修正です。

direct uploadでcustom headerを指定する際に、Authorization bearer tokenなどのauthorization tokenをheaderに指定出来るよう修正しています。


Copy edit last PR

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

各箇所の言い回しやタイポの修正を行っています。


fix(ac-redis): rescue BaseConnectionError in redis <5

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

redis gem 5未満を使用している場合に、存在しない定数を参照している箇所があったのを修正しています。


Merge pull request #47548 from the-spectator/tagged_logging_example

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

TaggedLogging moduleのdoc内のexampleコードの変数名をより適切な名前に変更しています。


Fix dumping enum definitions from other schemas

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

PostgreSQLのschema dumpで他のschemaのenumが含まれてしまっていたのを修正しています。


Implement marshal_dump and marshal_load on ActiveRecord::Base

Active Recordの修正です。

Ative RecordのmodelをMarshalでserializeした際のフォーマットを変更し、極力Railsとして必要な情報のみを含むよう修正しています。フォーマットの変更はbreaking changeな為、config.active_record.marshalling_format_version7.1、またはload_defaults7.1を指定した場合のみ新しいフォーマットが使用されるようになっています。

背景として、Ruby 3.2でmarshal dumpした際のデータのフォーマットが変わってしまっており、その影響で、特定のパターンのActive Recordのmodelのdeseriazlizeが出来ない、という問題があった為対応したとの事です。

参考:


Ensure Inflector methods return un-frozen strings

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

Optimize camelize for single wordの対応によりInflector#camelize、#underscore`がfrozen Stringを返すようになってしまったのを、un-frozen Stringを返すよう修正しています。frozen Stringだと戻り値を使用している他の処理でエラーになってしまう為。

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

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

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


Fix config.after_routes_loaded heading level [ci-skip]

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

config.after_routes_loadedのheading levelを他のconfigと合わせるよう修正しています。


Merge pull request #47774 from zzak/fix-race-condition-in-evented-file-update-checker

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

evented file update checkerで使用するlistenerの初期化後、listenerが実際に使用出来る状態になるまでwaitするよう修正しています。


Update recommended Node.js dev deps guide

rails guideのInstalling Rails Core Development Dependenciesの修正です。

Node.jsのインストール手順でインストールされているNode.jsが大分古いバージョンになっていたのを更新、及び、yarnのインストールをするのにnpmを使用するよう修正しています。


Add a note about installing dev deps on debian linux

rails guideのInstalling Rails Core Development Dependenciesの修正です。

Debian Linuxでのdependenciesのインストール手順についての説明を追加しています。

rails ommit log流し読み(2023/03/26)

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

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

activejob/CHANGELOG.md

actiontext/CHANGELOG.md

activestorage/CHANGELOG.md


Merge pull request #47737 from waymondo/encrypted-rich-text-load-hook

actiontext/app/models/action_text/encrypted_rich_text.rbの修正です。

ActionText::EncryptedRichTextがloadされた際に実行する:action_text_encrypted_rich_text hookを追加しています。


Merge pull request #47732 from cmatheson/backburner-provider-job-id

activejob/lib/active_job/queue_adapters/backburner_adapter.rbの修正です。

Backburner AdapterでBackburnerが返すid(provider_job_id)を取得出来るよう修正しています。


Merge pull request #47758 from sled/security/set-content-type-charset

Content-Typeが指定されている全てのresponse headersでcharsetを指定するよう修正しています。Content-Typeが指定されている場合、charsetも指定するのがOWASPで推奨されている為。

参考: OWASP/ASVS/blob/v4.0.3/4.0/en/0x22-V14-Config.md#v144-http-security-headers


Merge pull request #47186 from zzak/rubocop-md

rubocop-mdを追加、及び各markdownファイルにcopを適用しています。


Merge pull request #47313 from gregmolnar/stats

railties/lib/rails/tasks/statistics.rakeの修正です。

stats taskのロード時に行っていた解析対象ディレクトリの存在チェックを、task実行時に行うよう修正しています。解析対象ディレクトリをライブラリ側で追加する、かつ、それがロード時に存在しない場合にエラーにならないようにする為。


Merge pull request #46101 from swanson/swanson/missing-attachable-partial

Action Textの修正です。

Action Textでattachされているファイルをrenderする際に、対象となるrecordが削除された際に使用されるtemplateが固定のものになっていたのを、アプリケーション側で任意のtemplateを指定出来るよう修正しています。templateをカスタマイズしたい場合、modelにto_missing_attachable_partial_pathメソッドを追加すれば良いようになっています。

class User < ApplicationRecord
  def self.to_missing_attachable_partial_path
    "users/missing_attachable"
  end
end

Copy-edit CHANGELOG

actiontext/CHANGELOG.mdの修正です。

コンポーネント名を正式名称に修正しています。


Merge PR #47150

activestorage/app/models/active_storage/variant.rbactivestorage/app/models/active_storage/variant_with_record.rbの修正です。

Active Storageにvariantを削除する為のdestroyメソッドを追加しています。

User.first.avatar.variant(resize_to_limit: [100, 100]).destroy

Merge pull request #47738 from p8/railties/thor-usage-titles

railtiesの修正です。

各コマンドのUSAGEのインデントを調整しています。

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

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

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


Fix an issue where TestFixtures#fixture_path was returning an array. It is deprecated, but it should still return a string until it is removed. So, if multiple fixture_paths are configured, it just returns the first path.

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

TestFixtures#fixture_pathをdeprecatedにした際の対応で、戻り値が前のバージョンから変わってしまっていたのを、前のバージョンを同じ値を返すよう修正しています。


Fix actionpack CHANGELOG lint error

actionpack/CHANGELOG.mdの修正です。

ファイルの末尾にピリオドを追加しています。


Bring truncate* docs in line with signatures

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

String#truncateString#truncate_bytesの引数名を同じ値に変更、及び、docの引数名と実際の引数名が一致していなかったのを修正しています。

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

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

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

activestorage/CHANGELOG.md


Extract sample rate in audio analyzer

activestorage/lib/active_storage/analyzer/audio_analyzer.rbの修正です。

ActiveStorage::Analyzer::AudioAnalyzerが出力するaudioデータのmetadataにsample rateを含むよう修正しています。


Fix precedence of primary_key: in associations with query_constraints

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

associationの定義でquery_constraintsオプションが指定されている場合、primary_keyが無視されてしまうバグがあったのを修正しています。


Merge pull request #47748 from Shopify/fix-race-condition-in-evented-file-update-checker

activesupport/test/evented_file_update_checker_test.rbの修正です。

EventedFileUpdateCheckerTestEventedFileUpdateCheckerGCされる事を確認するテストで、listener用のスレッドが終了するのをまつよう修正しています。スレッドが生きたままだとEventedFileUpdateCheckerが回収されない為。


Document SQL and IRB comment styles

rails guideのAPI Documentation Guidelinesの修正です。

Example Codeの項にSQLIRBのexampleコードにコメントを記載する場合の例を追加しています。


Fix where HealthController doc gets parsed

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

Rails::HealthControllerのdocがRails定数の配下に表示されてしまっていたのを修正しています。


Fix ActiveRecord::Calculations#ids for a composite primary key model

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

composite primary keyを使用している場合に、ActiveRecord::Calculations#idsがprimary keyのArrayのArrayを返すよう修正しています。

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

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

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

activerecord/CHANGELOG.md


Mark RaiseWarnings as :nodoc:

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

Rails内部で使用しているRaiseWarningsAPI docに表示されないよう修正しています。


Merge pull request #47702 from shouichi/class-cache-nodoc

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

Rails内部で使用しているActiveRecord::FixtureSet::ClassCacheAPI docに表示されないよう修正しています。


Merge pull request #47729 from Shopify/pm/cpk-where-syntax

Active Recordの修正です。

whereに新しいtuple記法を指定出来るよう修正しています。この記法では、カラム名や値をarrayを指定出来るようになっています。

# Cpk::Book #=> Cpk::Book(author_id: integer, number: integer, title: string, revision: integer)
# Cpk::Book.primary_key #=> ["author_id", "number"]
book = Cpk::Book.create!(author_id: 1, number: 1)
Cpk::Book.where(Cpk::Book.primary_key => [[1, 2]]) # => [book]

# Topic #=> Topic(id: integer, title: string, author_name: string...)
Topic.where([:title, :author_name] => [["The Alchemist", "Paul Coelho"], ["Harry Potter", "J.K Rowling"]])

Support composite primary keys during transaction rollback

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

composite primary keysを使用している場合に、transactionのrollackが実行された場合に元のstateへの復元が正しく行われてなかったのを修正しています。