Tech Racho エンジニアの「?」を「!」に。
  • 開発

Active Support core_extのHash#diffはRails 4で非推奨化・廃止された

こんにちは、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/の情報を訂正したいのですが、なぜかアカウント登録しようとするとエラーになって先に進めませんでした。後日再挑戦してみます。

参考

関連記事


CONTACT

TechRachoでは、パートナーシップをご検討いただける方からの
ご連絡をお待ちしております。ぜひお気軽にご意見・ご相談ください。