Rails 7.2.0 Active Support CHANGELOG(全項目リンク付き)
更新42件(うち非推奨削除14件)
Rails 7.2.0.rc1(2024/08/07)
🔗 Fix delegate_missing_to allow_nil: true
when called with implict self by casperisfine · Pull Request #52437 · rails/rails
delegate_missing_to allow_nil: true
を指定して暗黙でselfに対して呼び出すとエラーになる問題を修正
class Person
delegate_missing_to :address, allow_nil: true
def address
nil
end
def berliner?
city == "Berlin"
end
end
Person.new.city # => nil
Person.new.berliner? # undefined local variable or method `city' for an instance of Person (NameError)
Jean Boussier
Rails 7.2.0.beta3(2024/07/11)
🔗 Add an explicit dependency on the logger
gem by Earlopain · Pull Request #52024 · rails/rails
- logger gemを依存関係に追加
理由: loggerはRuby 3.5の「bundled gem」候補であるため。
Earlopain
Rails 7.2.0.beta2(2024/06/04)
🔗 Define Digest::UUID.nil_uuid · rails/rails@0869d36
Digest::UUID.nil_uuid
を定義
これはいわゆる「nil UUID」を返す。
Xavier Noria
Rails 7.2.0.beta1(2024/05/29)
🔗 Support duration in ActiveSupport::XmlMini
by heka1024 · Pull Request #51651 · rails/rails
ActiveSupport::XmlMini
でduration
型をサポート
heka1024
🔗 (削除)Remove child event tracking from ActiveSupport::Subscriber by jhawthorn · Pull Request #43390 · rails/rails
- 非推奨化されていた
ActiveSupport::Notifications::Event#children
およびActiveSupport::Notifications::Event#parent_of?
を削除
Rafael Mendonça França
🔗 (削除)Deprecate ActiveSupport::Deprecation singleton usage by etiennebarrie · Pull Request #47354 · rails/rails
- 以下のメソッドにdeprecatorを渡せる非推奨サポートを削除
deprecate
deprecate_constant
ActiveSupport::Deprecation::DeprecatedObjectProxy.new
ActiveSupport::Deprecation::DeprecatedInstanceVariableProxy.new
ActiveSupport::Deprecation::DeprecatedConstantProxy.new
assert_deprecated
assert_not_deprecated
collect_deprecations
Rafael Mendonça França
🔗 (削除)Deprecate ActiveSupport::Deprecation singleton usage by etiennebarrie · Pull Request #47354 · rails/rails
ActiveSupport::Deprecation
をインスタンスに委譲できる非推奨化サポートを削除
Rafael Mendonça França
🔗 (削除)Deprecate SafeBuffer#clone_empty by flavorjones · Pull Request #48264 · rails/rails
- 非推奨化されていた
SafeBuffer#clone_empty
を削除
Rafael Mendonça França
🔗 (削除)Remove deprecated option to passing a format to #to_s
· rails/rails@e420c33
Array
、Date
、DateTime
、Time
から非推奨化されていた#to_default_s
を削除
Rafael Mendonça França
🔗 (削除)Deprecate initialize memcache store with dalli client by aledustet · Pull Request #47340 · rails/rails
Dalli::Client
インスタンスをMemCacheStore
に渡せる非推奨サポートを削除
Rafael Mendonça França
🔗 (削除)Remove deprecated support to generate incorrect RFC 4122 UUIDs · rails/rails@7b4affc
- 非推奨化されていた
config.active_support.use_rfc4122_namespaced_uuids
を削除
Rafael Mendonça França
🔗 (削除)Remove deprecated override of ActiveSupport::TimeWithZone.name
· rails/rails@34e296d
- 非推奨化されていた
config.active_support.remove_deprecated_time_with_zone_name
を削除
Rafael Mendonça França
🔗 (削除)Remove deprecated option to passing a format to #to_s · rails/rails@e420c33
- 非推奨化されていた
config.active_support.disable_to_s_conversion
を削除
Rafael Mendonça França
🔗 (削除)Add italic and underline support to ActiveSupport::LogSubscriber#color
by gmcgibbon · Pull Request #45976 · rails/rails
ActiveSupport::LogSubscriber#color
に位置引数でブーリアンを渡すことでテキストを太字にできる非推奨化サポートを削除
Rafael Mendonça França
- 非推奨化されていた定数
ActiveSupport::LogSubscriber::CLEAR
とActiveSupport::LogSubscriber::BOLD
を削除
Rafael Mendonça França
🔗 (削除)Improve cache performance for bare string values by jonathanhefner · Pull Request #48122 · rails/rails
- 非推奨化されていた
config.active_support.cache_format_version = 6.1
サポートを削除
Rafael Mendonça França
🔗 (削除)Deprecate :pool_size and :pool_timeout options for configuring connection pooling in cache stores by fatkodima · Pull Request #45111 · rails/rails
- キャッシュストレージの非推奨化オプション
:pool_size
と:pool_timeout
を削除
Rafael Mendonça França
🔗 Allow assertionless tests to be reported by fatkodima · Pull Request #51625 · rails/rails
参考: 週刊Railsウォッチ20240513: アサーションが動いていないテストを検出するassertionless_tests_behavior
コンフィグが追加
- アサーションが動いていないテストで警告を表示するようになった
ActiveSupport::TestCase
は、アサーションが実行されていないテストで警告を表示するようになった。これは、意図したアサーションが実行されていない壊れたテストを検出するのに有用。
fatkodima
🔗 Support hexBinary type in XML by heka1024 · Pull Request #51631 · rails/rails
参考: 週刊Railsウォッチ20240513: ActiveSupport::XmlMini
でhexBinaryフォーマットをサポート
ActiveSupport::XmlMini
でhexBinaryフォーマットをサポート
heka1024
🔗 Deprecate ActiveSupport::ProxyObject
by Earlopain · Pull Request #51638 · rails/rails
参考: 週刊Railsウォッチ20240513: ActiveSupport::ProxyObject
が非推奨化
- ActiveSupport::ProxyObjectが非推奨化される
今後はRuby組み込みのBasicObjectを使うこと。
Earlopain
🔗 Fix ActiveJob::EnqueueAfterTransactionCommit
API by casperisfine · Pull Request #51525 · rails/rails
参考: 週刊Railsウォッチ20240425: テストで自動先延ばしジョブのエンキューをトランザクション終了後でもチェックできるようになった
stub_const
にexists: false
パラメータを渡すことで、まだ存在していない定数をスタブできるようになった
Jean Boussier
🔗 Make ActiveSupport::BacktraceCleaner copy filters and silencers on dup and clone by casperisfine · Pull Request #51447 · rails/rails
参考: 週刊Railsウォッチ20240409: ActiveSupport::BacktraceCleaner
でdeep copyされていない項目があったのを修正
ActiveSupport::BacktraceCleaner
を拡張して、複製やクローンのときにfilters
とsilencers
を複製するよう修正
従来は、複製によって内部のfilters
とsilencers
の配列が共有され、ステートが漏洩していた。
Jean Boussier
🔗 Updating Astana with a Western Kazakhstan timezone by damiann · Pull Request #51317 · rails/rails
参考: 週刊Railsウォッチ20240326: カザフスタンのタイムゾーン移行に対応
- アスタナ(カザフスタンの首都)を西カザフスタンのTZInfo識別子で更新
Damian Nelson
🔗 Support filenames in Logger.logger_outputs_to?
by c960657 · Pull Request #51125 · rails/rails
参考: 週刊Railsウォッチ20240306: Logger.logger_outputs_to?
にファイル名の文字列やFile
オブジェクトを渡せるようになった
ActiveSupport::Logger.logger_outputs_to?
でファイル名をサポート
logger = Logger.new('/var/log/rails.log')
ActiveSupport::Logger.logger_outputs_to?(logger, '/var/log/rails.log')
Christian Schmidt
🔗 Fix IPAddr prefix information missing when write to cache in msgpack serializer by r-plus · Pull Request #50742 · rails/rails
参考: 週刊Railsウォッチ20240215: ActiveSupport::MessagePack
でIPAddr
をシリアライズするとprefix
が含まれていなかったのを修正
ActiveSupport::MessagePack
シリアライザでIPAddr
をシリアライズしたときにIPAddr#prefix
が含まれるようにした。この変更には下位互換性と上位互換性があり、古いペイロードは引き続き読み取り可能になり、新しいペイロードは古いバージョンのRailsでも読み取り可能になる
Taiki Komaba
🔗 Add default:
support for ActiveSupport::CurrentAttributes.attribute
by seanpdoyle · Pull Request #50677 · rails/rails
参考: 週刊Railsウォッチ20240206: ActiveSupport::CurrentAttributes.attribute
でdefault:
オプションをサポート
ActiveSupport::CurrentAttributes.attribute
でdefault:
オプションをサポート
class Current < ActiveSupport::CurrentAttributes
attribute :counter, default: 0
end
Sean Doyle
🔗 Yield instance to Object#with
block by seanpdoyle · Pull Request #50470 · rails/rails
参考: 週刊Railsウォッチ20240206: Object#with
に渡すブロックのインスタンスをyield
するようになった
- 以下のように
Object#with
に渡したブロックのインスタンスをyield
するようになった
client.with(timeout: 5_000) do |c|
c.get("/commits")
end
Sean Doyle
🔗 Use logical core count for test parallelization by jonathanhefner · Pull Request #50564 · rails/rails
- テストをパラレル化したときのデフォルトのワーカー数を、物理コア数ではなく論理コア数に基づいて決定するようになった
Jonathan Hefner
なお、上の改修によって以下の#50564が取り消されました。
🔗 Fix Time.now
/DateTime.now
/Date.today
to return results in a system timezone after #travel_to
by 907th · Pull Request #50236 · rails/rails
参考: 週刊Railsウォッチ20231222: #travel_to
で設定したタイムゾーンがクリアされていなかったのを修正
#travel_to
実行後にTime.now
/DateTime.now
/Date.today
が結果をシステムのタイムゾーンで返すよう修正
#travel_to
の現在の実装にはバグがある: このメソッドが引数のタイムゾーンを記憶して、スタブ化されたあらゆるメソッドが以後そのタイムゾーンで結果を返すようになる。ただし、本来期待される振る舞いは結果をシステムのタイムゾーンで返すこと。
Aleksei Chernenkov
🔗 ErrorReporter#unexpected
to report in production but raise in development by byroot · Pull Request #49951 · rails/rails
参考: 週刊Railsウォッチ20231213: production環境でraise
せずにレポートするErrorReporter#unexpected
を追加
前提条件違反をレポートするErrorReported#unexpected
を追加
例:
def edit
if published?
Rails.error.unexpected("[BUG] Attempting to edit a published article, that shouldn't be possible")
return false
end
# ...
end
上のコードはdevelopment環境やtest環境ではエラーをraiseするが、production環境ではエラーのレポートだけを行う。
Jean Boussier
🔗 Adjust instr. for Cache::Store#fetch_multi so writes are after reads by tgwizard · Pull Request #50071 · rails/rails
Cache::Store#fetch_multi
操作で、read_multi
やwrite_multi
の通知順序が実際の実行順序と一致するよう修正
Adam Renberg Tamm
🔗 Make return value of Cache::Store#write
consistent by Mangara · Pull Request #49873 · rails/rails
Cache::Store#write
の戻り値が一貫するよう修正
従来この戻り値は指定されていなかった。修正後は以下のようになった。
書き込みが成功した場合はtrue
を返す。
キャッシュバックエンドとの通信でエラーが発生した場合はnil
を返す。
別の理由(キーが既に存在し、unless_exist: true
が渡されたなど)で書き込みが失敗した場合は false
を返す。
Sander Verdonschot
🔗 Fix logged cache key normalization by skipkayhil · Pull Request #50008 · rails/rails
- ログ出力されたキャッシュキーが、キャッシュ操作で実際に使われたキーと一致しない場合がある問題を修正
Hartley McGuire
🔗 Improve error messages of assert_changes
and assert_no_changes
by pcreux · Pull Request #48482 · rails/rails
参考: 週刊Railsウォッチ20231114: assert_changes
とassert_no_changes
のエラーメッセージを改善
assert_changes
のエラーメッセージでは.inspect
でオブジェクトが表示されるようになり、nil
と空文字列の違いや、文字列とシンボルの違いなどがわかりやすくなった。
assert_no_changes
のエラーメッセージでは、実際の値が表示されるようになった。
pcreux
🔗 Handle negative numbers in NumberToHumanSizeConverter
by Earlopain · Pull Request #49791 · rails/rails
参考: 週刊Railsウォッチ20231107: number_to_human_size
で負数を扱えるよう修正
#to_fs(:human_size)
が負数を正しく扱えるよう修正
Earlopain
注: これはRails 7.1.2でリリース済みです。
🔗 Add BroadcastLogger#deep_dup
by andrewn617 · Pull Request #49720 · rails/rails
BroadcastLogger#dup
がロガーのbroadcasts
を複製できなかったため、deep_dup
を追加
Andrew Novoselac
注: これはRails 7.1.2でリリース済みです。
🔗 Fix issue where bootstrap.rb
overwrites the level
of a BroadcastLogger
's broadcasts
by andrewn617 · Pull Request #49721 · rails/rails
BroadcastLogger
でbroadcasts
のlevel
をbootstrap.rbが上書きしていたのを修正
Andrew Novoselac
注: これはRails 7.1.2でリリース済みです。
🔗 ActiveSupport::LogSubscriber restore compatibility with SemanticLogger by casperisfine · Pull Request #49621 · rails/rails
- semantic_logger gemとの互換性を修正。
semantic_logger gemの振る舞いはstdlibロガーと完全に同じではない。stdlibのLogger#level
がIntegerを返すのに対し、SemanticLogger#level
はSymbolを返す。
このため、SemanticLogger
インスタンスを代入するとRailsでさまざまなLogSubscriber
クラスが壊れた。
Jean Boussier, ojab
注: これはRails 7.1.2でリリース済みです。
🔗 MemoryStore: prevent race condition by pjambet · Pull Request #49542 · rails/rails
MemoryStore
でインクリメントやデクリメントを行ったときの競合状態を防止するよう修正
Pierre Jambet
注: これはRails 7.1.1でリリース済みです。
🔗 Implement HashWithIndifferentAccess#to_proc
by fatkodima · Pull Request #49475 · rails/rails
参考: 週刊Railsウォッチ20231017: HashWithIndifferentAccess
に#to_proc
を実装
HashWithIndifferentAccess#to_proc
を実装
従来は、HashWithIndifferentAccess
オブジェクトに対して#to_proc
を呼び出すと、Hashクラスから継承された#to_proc
メソッドが使われていたが、これは文字列キーとシンボルキーを問わず値にアクセスする機能が使えなかった。
fatkodima
これより前のActive Supportの変更については7-1-stableを参照してください。
概要
MITライセンスに基づいて翻訳・公開いたします。
なお、機能削除のエントリについては、原則として7.2での削除プルリクではなく、その機能が非推奨化されたときの過去のプルリクへリンクしています。