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 コボラー、ITコンサル、ローカライズ業界を経てなぜかWeb開発者志願。 これまでにRuby on Rails チュートリアルの大半、Railsガイドのほぼすべてを翻訳。 かと思うと、正規表現の粋を尽くした日本語エラーチェックサービス enno.jpを運営。 仕事に関係ないすっとこブログ「あけてくれ」は2000年頃から多少の中断をはさんで継続、現在はnote.muに移転。

hachi8833の書いた記事

BPSアドベントカレンダー

人気の記事