diff --git a/spec/Helpers.coffee b/spec/Helpers.coffee index 44b2133ec..8a5cecd1d 100644 --- a/spec/Helpers.coffee +++ b/spec/Helpers.coffee @@ -753,8 +753,6 @@ describe 'Component traits', -> d1.disconnect() d2.send 123 d2.disconnect() - p3.send() # Send default - p3.disconnect() p1.send 'req' p1.disconnect() # the handler should be triggered here @@ -803,8 +801,6 @@ describe 'Component traits', -> d1.disconnect() d2.send 123 d2.disconnect() - p3.send() # Send default - p3.disconnect() p1.send 'req' p1.disconnect() # the handler should be triggered here @@ -920,7 +916,6 @@ describe 'Component traits', -> chai.expect(c.invCount).to.equal 3 done() - whn.send() # Send defaults line.send 'op' rpt.send 10 line.disconnect() @@ -937,7 +932,6 @@ describe 'Component traits', -> # this flushes the earlier stuff - it 'should be able to postpone and retry after timeout', (done) -> c.invCount = 0 res.once 'data', (data) -> diff --git a/src/lib/Helpers.coffee b/src/lib/Helpers.coffee index 1c20d3f3c..629626b68 100644 --- a/src/lib/Helpers.coffee +++ b/src/lib/Helpers.coffee @@ -3,6 +3,7 @@ # NoFlo may be freely distributed under the MIT license StreamSender = require('./Streams').StreamSender StreamReceiver = require('./Streams').StreamReceiver +InternalSocket = require './InternalSocket' # MapComponent maps a single inport to a single outport, forwarding all # groups from in to out and calling `func` on each incoming packet @@ -180,6 +181,19 @@ exports.WirePattern = (component, config, proc) -> component.params = {} component.requiredParams = [] component.completeParams = [] + component.defaultedParams = [] + component.defaultsSent = false + + sendDefaultParams = -> + if not component.defaultsSent and component.defaultedParams.length > 0 + for param in component.defaultedParams + tempSocket = InternalSocket.createSocket() + component.inPorts[param].attach tempSocket + tempSocket.send() + tempSocket.disconnect() + component.inPorts[param].detach tempSocket + component.defaultsSent = true + resumeTaskQ = -> if component.completeParams.length is component.requiredParams.length and component.taskQ.length > 0 @@ -193,6 +207,7 @@ exports.WirePattern = (component, config, proc) -> unless component.inPorts[port] throw new Error "no inPort named '#{port}'" component.requiredParams.push port if component.inPorts[port].isRequired() + component.defaultedParams.push port if component.inPorts[port].hasDefault() for port in config.params do (port) -> inPort = component.inPorts[port] @@ -345,6 +360,9 @@ exports.WirePattern = (component, config, proc) -> if typeof component.beforeProcess is 'function' component.beforeProcess outs + # Sending defaults if not sent already + sendDefaultParams() + # Group forwarding if outPorts.length is 1 outs.beginGroup g for g in groups if config.forwardGroups @@ -387,6 +405,8 @@ exports.WirePattern = (component, config, proc) -> component.taskQ = [] component.params = {} component.completeParams = [] + component.defaultedParams = [] + component.defaultsSent = false # Make it chainable or usable at the end of getComponent() return component