 
     return this
 
-  provideData: (form, provides) ->
-    for field in provides
+  provideData: (form, providers) ->
+    for field in providers
       @providers[field] ?= []
       @providers[field].push(
         if 'string' is typeof form

      return this

    satisfy: (field) ->
      if (satisfier = @fields[field])?
        satisfier.satisfy()

      child.satisfy field  for own _, child of @children



  constructor: (options = {}, data) ->
    super options, data

    @collector = new Collector
    @collector.on 'Pending', @bound 'nextForm'
    @forwardEvent @collector, 'DataCollected'

    @forms      = {}
    @providers  = {}

  enter: -> @ready @bound 'nextForm'

  requireData: (fields, mode = 'all') ->
    gate =
      if fields.isGate
      then fields
      else @[mode] fields...

    @collector.addRequirement gate

