こんにちは、hachi8833です。新しい情報ではありませんが、Active Support Core ExtensionsのHash#diffは、Rails 4.0で非推奨化され、4.1で廃止されていたことを確認したのでメモします。
apidock.comではRails 3以降についての表示がありませんが(下図)、実際にはRails 3にもありました。
Rails 3から4にかけてののHash#diff
GitHubでは、以下のとおりRails 3.0〜3.1までHash#diff
のコードがありました。
def diff(h2)
dup.delete_if { |k, v| h2[k] == v }.merge!(h2.dup.delete_if { |k, v| has_key?(k) })
end
そして以下のようにRails 4.0で非推奨化(deprecated)され、4.1で廃止されました。
Hash#diff is no longer used inside of Rails, and is being deprecated with no replacement. If you’re using it to compare hashes for the purpose of testing, please use MiniTest’s assert_equal instead.
(大意)Hash#diffはRails内部で使われていないので非推奨化中。代替メソッドはなし。テストでハッシュの比較が必要であれば、MiniTestのassert_equalを使うこと。
diff.rbのメッセージより
MiniTestのassert_equal
Hash#diffの代わりに使って欲しいとあるassert_equalは、RailsではなくRubyのMiniTestのメソッドです。
# File lib/minitest/assertions.rb, line 171
def assert_equal exp, act, msg = nil
msg = message(msg, E) { diff exp, act }
assert exp == act, msg
end
追伸
http://apidock.com/の情報を訂正したいのですが、なぜかアカウント登録しようとするとエラーになって先に進めませんでした。後日再挑戦してみます。
参考
- Hash#diff非推奨化のプルリク:#8158
- 関連する議論 issue#8142: 「Hash#diffはRails内でほとんど使われていないので削除でよいのでは」とのこと。