Hash#flatten_keys

operator_for_match = {
  :partial => 'like',
  :forward => 'like',
  :backward => 'like',
  :exact => '='
}  

こんなん書くのは面倒なので、こんな風に書けたらいいなって思った。

operator_for_match = {
  [:partial, :forward, :backward] => 'like',
  :exact => '='
}.flatten_keys

で、それを実現するコードはこちら。

class Hash
  def flatten_keys
    inject({}) do |dest, entry|
      key, value = *entry
      if key.respond_to?(:each)
        key.each{|k| dest[k] = value}
      else
        dest[key] = value
      end
      dest
    end
  end
end