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

参考

関連記事

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

hachi8833

Twitter: @hachi8833、GitHub: @hachi8833

コボラー、ITコンサル、ローカライズ業界、Rails開発を経てTechRachoの編集・記事作成を担当。
これまでにRuby on Rails チュートリアル第2版の半分ほど、Railsガイドの初期翻訳ではほぼすべてを翻訳。その後も折に触れてそれぞれ一部を翻訳。
かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。
実は最近Go言語が好き。
仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

BPSアドベントカレンダー

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ