Hash#reverse_mergeとHash#reverse_merge!
タイトルのClass#Methodをransack gemで見かけたので、調べてみました。
ActiveSupport::CoreExtensions::Hash::ReverseMergeのソースは下記になります。 https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/reverse_merge.rb
一部抜粋していくと
other_hash.merge(self)
こんだけです。 !付きのは下記の通りです。
options
=> { name: 'ikeda', age: 29 }
self
=> { name: 'kazuyuki', programmer: true }
options.merge!( other_hash ){ |key,left,right|, left }
=> { name: 'ikeda', age: 29, programmer: true }
あと、alias reverse_update, rever_merge!としています。 これはHash#merge!,Hash#updateでも同様ですね。
これにより何が期待できるかというと(開発者の意図はしりませんが)
{ name: 'ikeda', age: 29 }.merge(options)
options.reverse_merge({ name: 'ikeda', age: 29 })
optionsのメソッドを利用して,optionsの値を優先でmergeできます。
オブジェクトと引数を逆にするほうが直感的だったんでしょうね。