class Hash
def transform_keys_with_hash_arg!(hash = not_given = true, &block)
def transform_keys_with_hash_arg!(hash = not_given = true, &block) return enum_for(:transform_keys!) { size } if not_given && !block return transform_keys_without_hash_arg!(&block) if not_given h = {} begin if block_given? each do |key, value| h[hash.fetch(key) { yield key }] = value end else each do |key, value| h[hash.fetch(key, key)] = value end end ensure replace(h) end self end