String#truncate の omission が truncate_to を超えるケースをテスト追加

rails/rails

Rails の String#truncate は、:omission 文字列が指定した長さ (truncate_to) より長い場合、結果として omission 文字列だけが返ります。この挙動は公式ドキュメントに記載されていますが、実装を検証するテストが欠如していました。本 PR はそのエッジケースをカバーするテストを追加し、期待通りの動作が保証されることを明示します。

背景

String#truncate が omission longer than truncate_to の場合に全体長を超える可能性がある とドキュメントに記載されているものの、従来のテストスイートには該当シナリオがありませんでした。実装 (activesupport/lib/active_support/core_ext/string/filters.rb) では length_with_room_for_omission が負になると omission のみが返るロジックが存在しますが、未テストのまま残っていたため、回帰リスクが潜在していました。

技術的な変更

テストファイル activesupport/test/core_ext/string_ext_test.rb に以下のメソッドが追加されました。

  def test_truncate_with_omission_longer_than_truncate_to
    assert_equal "[truncated]", "Hello World!".truncate(3, omission: "[truncated]")
    assert_equal "[...]", "Hello World!".truncate(2, omission: "[...]")
  end

このテストは、truncate の第二引数 (truncate_to) が omission よりも短い場合に、結果が omission 文字列そのものになることを検証します。期待される出力は omission がそのまま返るケースと、長さがさらに制限された場合に省略記号が返るケースの二つです。コードロジック自体は変更せず、テストのみを追加するため、既存の機能やパフォーマンスに影響はありません。

設計判断

テストのみの追加 という選択は、既存実装が正しいことを裏付けるだけで機能変更を伴わない点が評価されています。Rails のコア拡張は多数のユーティリティメソッドを提供するため、ドキュメントと実装の一致を保証するテスト網は品質維持に不可欠です。今回の PR は、ドキュメント記載の例外ケースを明示的にテストし、将来的なリファクタリングやパラメータ変更時に意図しない振る舞いが導入されるリスクを低減します。

まとめ

String#truncate の omission が truncate_to を超えるシナリオを検証するテストが追加され、公式ドキュメント通りの挙動が自動的に保証されるようになりました。実装変更はなくテストだけでカバーすることで、既存コードへの影響を最小限に抑えつつ、エッジケースの回帰防止を実現しています。

記事メタデータ

Generated by:
gpt-oss-120b for DiffDaily
LLM Trace:
593f6c61

この記事はAIによって自動生成されています。内容の正確性については、必ずソースコードやPRを確認してください。

品質レビュー結果

Review Status:
承認済み
Review Count:
1回
Reviewed by:
gpt-oss-120b for DiffDaily

Review Criteria:

記事構成 ✓ PASS

Title, Context, Technical Detailの存在と明確さ

リード文があり、背景・技術的変更・設計判断・まとめの4セクションで構成されており、総論→各論→結論の流れが明確です。

カスタムMarkdown構文 ⚠ WARNING

シンタックスハイライト・GitHubリンク記法の正確性

コードブロックは正しい `言語:ファイルパス` 形式ですが、PRリンクの記法が `[PR #57541](URL)` となっており、推奨の `[#57541](URL)` とは異なります。

対象読者への適合性 ✓ PASS

エンジニア向けの適切な技術レベルと表現

Rails エンジニア向けの技術的内容で、初心者向けの余計な説明はありません。

パラグラフ・ライティング ✓ PASS

トピックセンテンス・1段落1トピック・段落長

各セクションは総論・各論・結論の段落構成で、トピックセンテンスが先頭にあり、1段落1トピック・適切な長さが保たれています。

Diff内容との照合 ✓ PASS

コードブロックとDiff内容の一致

記事中のコードブロックは Diff に示された追加テストと完全に一致しています。

技術用語の正確性 ✓ PASS

技術用語の正確な使用

`omission`, `truncate_to`, `String#truncate` などの用語は PR と一致し、誤用はありません。

説明の技術的正確性 ✓ PASS

技術的主張の正確性と論理性

説明は PR の内容と合致し、技術的に正確です。

事実の突合 ✓ PASS

PR情報による主張の裏付け(ハルシネーション検出)

全ての主張は PR の記述や Diff で裏付けられており、捏造や推測は見られません。

数値・固有名詞の確認 ✓ PASS

PR番号・コミットID・バージョン等の正確性

PR 番号やコード内の数値(3, 2 など)は正確です。

タイトル・説明との一致 ✓ PASS

記事タイトル・説明とPR内容の一致

記事タイトルは PR タイトルの意味を正しく日本語化しています。

外部知識の正確性 ✓ PASS

PRに記載のない外部知識(LTS、サポート状況など)の不使用

外部知識(バージョン支援状況等)は一切記載されておらず、問題はありません。

時間表現の正確性 ✓ PASS

時間表現がPR情報と一致しているか

時間表現の歪曲はありません。