重複する頭字語の順序依存性を解消
重複する頭字語(acronym)を設定した際の underscore メソッドの動作が改善されました。これにより、"USD" と "USDC" のように一方が他方を含む頭字語を定義しても、正しく変換されるようになります。
背景
ActiveSupportの inflections 機能では、頭字語を登録することで単語の変換ルールをカスタマイズできます。しかし、"USD" と "USDC" のように一方が他方の部分文字列となる頭字語を登録すると、登録順序によって underscore メソッドの結果が異なる問題がありました。
38e8df6 のコミットコメントで指摘されたこの問題は、頭字語の照合順序が定義順に依存していたことに起因します。短い頭字語が先にマッチすると、長い頭字語が正しく認識されないケースが発生していました。
技術的な変更
この修正により、先に短い頭字語を定義した場合でも、より長い頭字語が正しく変換されるようになります。CHANGELOGに示された例は以下の通りです。
修正後の動作:
ActiveSupport::Inflector.inflections(:en) do |inflect|
inflect.acronym "USD"
inflect.acronym "USDC"
end
"USDC".underscore # => "usdc"
この例では、"USD" を先に定義しても "USDC" が正しく "usdc" に変換されます。以前は登録順序によって意図しない変換結果が生じる可能性がありました。
設計判断
本PRは 頭字語の照合順序を最適化 することで問題を解決しています。
CHANGELOGには「Fix inflections to better handle overlapping acronyms.」と記載されており、定義順序に依存しない、より堅牢な照合ロジックが導入されたことが示唆されています。定義順序への依存をなくすことで、開発者は頭字語の登録順を意識せずに設定でき、inflections設定の保守性が向上しています。
まとめ
本PRは、重複する頭字語の照合ロジックを改善することで、定義順序に依存しない安定した変換を実現しました。"USD" / "USDC" のように現実のドメインで頻出する重複パターンにも対応できるようになり、inflections機能の実用性が高まっています。