Skip to content

Commit

Permalink
fixes #778
Browse files Browse the repository at this point in the history
  • Loading branch information
rjrodger committed Jan 16, 2020
1 parent f8b1f2e commit 20a5565
Show file tree
Hide file tree
Showing 4 changed files with 59 additions and 113 deletions.
5 changes: 5 additions & 0 deletions CHANGES.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,8 @@
## 3.18.0 2020-01-16

* Action subscriptions now provide proper error messages.


## 3.17.0 2019-10-01

* Fix: use internal.print function fully throughout code base.
Expand Down
25 changes: 17 additions & 8 deletions lib/api.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,15 +38,11 @@ exports.fix = function(patargs, msgargs, custom) {
var fix_delegate = self.delegate(patargs)

fix_delegate.add = function fix_add() {
var args = Common.parsePattern(this, arguments, 'rest:.*', patargs)
var addargs = [args.pattern]
.concat({
fixed$: Object.assign({}, msgargs, args.pattern.fixed$),
custom$: Object.assign({}, custom, args.pattern.custom$)
})
.concat(args.rest)
return self.add.apply(this, intern.fix_args(arguments, patargs, msgargs, custom))
}

return self.add.apply(this, addargs)
fix_delegate.sub = function fix_sub() {
return self.sub.apply(this, intern.fix_args(arguments, patargs, msgargs, custom))
}

return fix_delegate
Expand Down Expand Up @@ -980,3 +976,16 @@ intern.close = function(callpoint, done) {

return seneca
}


intern.fix_args = function(origargs, patargs, msgargs, custom) {
var args = Common.parsePattern(this, origargs, 'rest:.*', patargs)
var fixargs = [args.pattern]
.concat({
fixed$: Object.assign({}, msgargs, args.pattern.fixed$),
custom$: Object.assign({}, custom, args.pattern.custom$)
})
.concat(args.rest)
return fixargs
}

105 changes: 0 additions & 105 deletions lib/sub.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,108 +38,3 @@ exports.api_sub = function() {

return self
}

/*
exports.api_subx = function() {
var self = this
//var private$ = self.private$
//var opts = self.options()
//var args = Common.parsePattern(self, arguments, 'action:f? actdef:o?')
//var raw_pattern = args.pattern
//var pattern = self.util.clean(raw_pattern)
var private_sub = self.private$.sub
var subargs = Common.parsePattern(self, arguments, 'action:f actdef:o?')
var pattern = subargs.pattern
if (
pattern.in$ == null &&
pattern.out$ == null &&
pattern.error$ == null &&
pattern.cache$ == null &&
pattern.default$ == null &&
pattern.client$ == null
) {
pattern.in$ = true
}
if (!private_sub.handler) {
private_sub.handler = function handle_sub(msg, result, meta) {
// only entry msg of prior chain is published
if (meta && meta.prior) {
return
}
var subfuncs = self.private$.subrouter.find(msg)
if (subfuncs) {
meta.sub = subfuncs.pattern
var actdef = subfuncs.actdef
subfuncs.forEach(function subfunc(subfunc) {
try {
for (
var stI = 0, stlen = private_sub.tracers.length;
stI < stlen;
stI++
) {
private_sub.tracers[stI].call(
self,
subfunc.instance$,
msg,
result,
meta,
actdef
)
}
subfunc.call(subfunc.instance$, msg, result, meta)
// TODO: this should in it's own function
} catch (ex) {
// TODO: not really satisfactory
var err = self.private$.error(ex, 'sub_function_catch', {
args: msg,
result: result
})
self.log.error(
errlog(err, {
kind: 'sub',
msg: msg,
actid: meta.id
})
)
}
})
}
}
// TODO: other cases
// Subs are triggered via events
self.on('act-in', annotate('in$', private_sub.handler))
self.on('act-out', annotate('out$', private_sub.handler))
}
function annotate(prop, handle_sub) {
return function annotation(origmsg, result, meta) {
var msg = self.util.deep(origmsg)
result = self.util.deep(result)
msg[prop] = true
handle_sub(msg, result, meta)
}
}
var subs = self.private$.subrouter.find(pattern)
if (!subs) {
self.private$.subrouter.add(pattern, (subs = []))
subs.pattern = Common.pattern(pattern)
subs.actdef = self.find(pattern)
}
subs.push(subargs.action)
subargs.action.instance$ = self
return self
}
*/
37 changes: 37 additions & 0 deletions test/sub.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -436,4 +436,41 @@ describe('sub', function() {
fin()
})
})


it('sub-fix', function(fin) {
var log = []
var si = Seneca()
.test(fin)

.add('a:1,b:1', function(msg, reply, meta) {
log.push('a')
expect(meta.pattern).equals('a:1,b:1')
reply({ x: 1 })
})

var sifix = si
.fix('a:1')

.sub('b:1', function(msg, out, meta) {
log.push('s1')
// Default case is inwards, in$:true
expect(msg.in$).true()
expect(out).not.exists()
expect(meta.pattern).equals('a:1,b:1')
expect(msg.a).equal(1)
expect(msg.b).equal(1)
})

si
.act({ a: 1, b: 1 }, function(err, out) {
log.push('r1')
expect(err).equal(null)
expect(out.x).equal(1)
expect(log).equal(['s1', 'a', 'r1'])

fin()
})
})

})

0 comments on commit 20a5565

Please sign in to comment.