ActiveSupport の Hash#compact は 値が nil のものしか除去してくれない。 例えば、
Rack::Utils.parse_query などの戻り値から値が空文字のものを除去したいときに、ど忘れするのでメモしておく。
> { a: 1, b: "" , c: " ", d: nil, e: true, f: false }.transform_values(&:presence).compact
=> {:a=>1, :b=>"", :c=>" ", :e=>true, :f=>false}
Hash#compact と Hash#transform_values は元々 ActiveSupport にあったメソッドで、 Ruby 2.4 で追加されたメソッド。 Object#presence は Ruby 本体にはなく、 ActiveSupport の拡張。