場合によってはこの動作を望まない(http json応答の処理など)
そこで、改良を加えました。
module HashUtil
refine Hash do
def eager_except(*args)
proc = Proc.new do |key|
case
when key.is_a?(Symbol)
key.to_s
when key.is_a?(String)
key.to_sym
else
nil
end
end
eager_args = (args + args.map(&proc)).compact
except(*eager_args)
end
end
end
using HashUtil
hash = { a: 'a', "b" => 'b' }
hash.eager_except('a', :b)
# => {}
※ 追加情報
上に書いた後、私は他の方法を見つけました。
すべてのキーをHash#deep_symbolize_keysでシンボルに変換します!
{"a" => "hoge"}.deep_symbolize_keys!.except(:a) # => {}
ActiveSupport::HashWithIndifferentAccessを使用する
{"a" => "hoge"}.with_indifferent_access.except(:a) # => {}
ありがとう