def with (hash, quiet: false)
      old_values = data.values_at(hash.keys)
      log.debug "with #{hash}", quiet: quiet do
        set hash
        yield
      end
    ensure
      hash.keys.each.with_index do |key, i|
        @data[key] = old_values[i]
      end
    end
def with (hash, quiet: false)
      old_values = data.values_at(hash.keys)
      log.debug "with #{hash}", quiet: quiet do
        set hash
        yield
      end
    ensure
      hash.keys.each.with_index do |key, i|
        @data[key] = old_values[i]
      end
    end
Yield with the hash temporary merged into the context variables.
 Only variables specifically named in +hash+ will be reset when the yield returns.
 @param [Hash] hash The values to merge into the context variables.
 @return Whatever the yielded-to block returns.
 @macro quietable