`ActionController::Parameters#merge!` の `:call-seq` に `&block` を追記
ActionController::Parameters#merge! がブロック引数を受け取れるにも関わらず、RDoc の :call-seq: がそれを記載していなかった点を是正した変更です。ブロックでキー競合時の解決ロジックが利用可能であることを、ドキュメント上で明確に示します。
背景
ActionController::Parameters#merge! は内部で Hash#merge! を呼び出し、&block をそのまま転送しています。実装上はブロックが有効ですが、RDoc のメソッドシグネチャが merge!(*other_hashes) だけを示していたため、利用者がブロックを渡すことを認識しにくい状態でした。既に同クラスの deep_merge! ではブロックが :call-seq に記載されており、ドキュメントの一貫性が欠如していました。
技術的な変更
変更点は actionpack/lib/action_controller/metal/strong_parameters.rb のコメント行のみです。merge! の :call-seq: に , &block を追加し、シグネチャを実装と合わせました。
@@ -1072,7 +1072,7 @@ def merge(*other_hashes, &block)
end
##
- # :call-seq: merge!(*other_hashes)
+ # :call-seq: merge!(*other_hashes, &block)
#
# Returns the current `ActionController::Parameters` instance with `other_hashes`
# merged into current hash.
この修正は実行時の挙動を変えず、RDoc の生成結果にだけ影響します。merge! を呼び出すコードはそのまま動作し、ブロックを渡す場合も従来通り Hash#merge! のロジックが適用されます。
設計判断
この PR は ドキュメントの正確性と一貫性 を高めることを目的としています。機能追加や挙動変更ではなく、既存実装に対する記述の見直しです。deep_merge! と同様の記法を採用することで、開発者がメソッドシグネチャを統一的に把握できるよう配慮されています。後方互換性への影響はなく、唯一の副作用は生成される API ドキュメントが更新される点です。
まとめ
merge! の :call-seq に &block を追記したことで、ブロック引数の受け渡しが正式にドキュメント化されました。実装上の変更はなく、既存コードへの影響はありませんが、利用者が正しくメソッドを活用できるようになる重要な改善です。