code: 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
docs: 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