     # Removes any items not seen (iff `remove` is true).
     @_removeItem item for _, item of itemsToRemove
 
+  # Forces an item to update its value.
+  touch: (key) ->
+    item = @_byKey[key]
+
+    @_assert(
+      item?
+      "no item with key “#{key}”"
+    )
+
+    @_updateItem @_rules[item.rule], item
+
   #--------------------------------
 
   _assert: (cond, message) ->

    return unless @_runHook 'beforeUpdate', item

    # Computes its value.
    @_computeValue rule, item

    return unless @_runHook 'beforeSave', item

    # Registers the new item.
    @_byKey[key] = item

    # TODO: Cascades changes.

  _removeItem: (item) ->

    delete @_byKey[item.key]

    # TODO: Cascades changes.

#=====================================================================

module.exports = $MappedCollection2

        if update
          # Fetches the existing entry.
          item = @_byKey[key]

          # Checks if there is a conflict in rules.
          @_assert(
            item.rule is rule.name
            "the key “#{key}” cannot be of rule “#{rule.name}”, "
            "already used by “#{item.rule}”"
          )

          # Updates its generator values.
          item.genkey = genkey
