Object#with returns the block's result
Object#with がブロックの評価結果をそのまま返すことを明示的に検証するテストが追加されました。既存のテストでは self が正しく渡されることだけが確認されており、戻り値の契約は未保証でした。
背景
Object#with はオブジェクト自身をブロックに渡し、ブロックの評価結果を返すユーティリティメソッドです。元々のテストは属性変更のスコープ内で self が参照できることを assert_equal "1", @object.with(public_attr: "1", &:public_attr) で確認していましたが、ブロックが返す任意の値がそのまま返されるかは検証されていませんでした。この抜けはメソッドの公開インタフェースとして重要な振る舞いを見落としている可能性があります。
技術的な変更
テストファイル activesupport/test/core_ext/object/with_test.rb に新たに "returns the result of the block" というテストケースが追加されました。テストは Object#with にブロックを渡し、ブロックがシンボル :block_result を返すことを期待し、その結果がメソッドの戻り値として正しく伝播しているかを assert_equal で検証します。
test "returns the result of the block" do
result = @object.with(public_attr: "1") { :block_result }
assert_equal :block_result, result
end
この追加により、Object#with が「ブロックに渡すだけでなく、ブロックの評価結果をそのまま返す」という仕様がテストで保証されます。テストコードは既存のテストクラスにそのまま組み込まれ、他のテストロジックと衝突することはありません。
設計判断
本変更は テストカバレッジの拡充 を目的としており、プロダクションコードには一切手を加えていません。Object#with の公開契約は「self をブロックに渡し、ブロックの結果を返す」ことですが、これまでのテストでは結果の検証が欠如していました。追加テストはその契約を明文化し、将来的な実装変更やリファクタリング時に不意の振る舞い変更を防止する安全策として機能します。コードベースに影響を与えない純粋なテスト追加であるため、リリースリスクは極めて低く、品質向上のみをもたらします。
まとめ
Object#with の戻り値がブロックの評価結果であることを確認するテストが追加され、API の契約が明確に保証されるようになりました。プロダクションコードは変更せず、テストスイートの信頼性を高めるだけのシンプルな改善です。