MemCacheStore に Dalli::Client を渡した場合に ArgumentError を発生させるよう変更
MemCacheStore のコンストラクタで Dalli::Client を渡した際、これまでは条件分岐で黙認されていましたが、明示的な ArgumentError を発生させるよう修正されました。
背景
Dalli::Client を直接 MemCacheStore に渡す使い方は、コミット 78b74e9 で非推奨となり、その後 c33e2d2 で削除されました。しかし、initialize メソッド内の引数バリデーションロジックには Dalli::Client が許容型として残ったままになっていました。
その結果、Dalli::Client を渡しても引数チェックをパスしてしまい、その後の処理で意図しない挙動を引き起こす可能性がありました。エラーメッセージ自体も「空配列、アドレス、またはアドレスの配列のみ受け付ける」と明記しており、Dalli::Client の許容は実態と乖離した状態でした。
技術的な変更
mem_cache_store.rb の initialize メソッド内、引数バリデーションの許容型リストから Dalli::Client が除外されました。
変更前:
unless [String, Dalli::Client, NilClass].include?(addresses.first.class)
raise ArgumentError, "First argument must be an empty array, address, or array of addresses."
end
変更後:
unless [String, NilClass].include?(addresses.first.class)
raise ArgumentError, "First argument must be an empty array, address, or array of addresses."
end
変更は1行の削除のみであり、Dalli::Client を渡した場合は ArgumentError が即座に発生します。String や NilClass(空配列を含む)を渡す正常系の動作に影響はありません。
設計判断
実装の実態とバリデーションロジックの整合性を回復することが本変更の主眼です。
Dalli::Client のサポートが削除された時点で、バリデーション側も同時に更新されるべきでしたが、その対応が漏れていました。許容型リストに残ったままの Dalli::Client は、エラーを抑制しつつも機能しない状態を生み出しており、デバッグを困難にするリスクがありました。エラーメッセージの記述内容とコードの動作を一致させることで、誤った使い方を早期に検出できます。
まとめ
本PRは、削除済みの機能に対応するバリデーション上の残留コードを除去し、エラーメッセージと実装を一致させた修正です。Dalli::Client を渡した際に明確な ArgumentError が発生するようになり、誤った使い方がサイレントに通過するリスクが排除されました。