From 7d93967d3481c4a2327a44c7cb55f8de60c96b8a Mon Sep 17 00:00:00 2001 From: Loris Guignard Date: Sat, 3 Oct 2015 18:24:09 +0200 Subject: [PATCH 1/2] Add rubberduck args to service events parameters --- lib/mixins/event.js | 19 +++++++++++++++++-- test/mixins/event.test.js | 25 +++++++++++++++++++------ 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/lib/mixins/event.js b/lib/mixins/event.js index eb25c391ee..8cf481075a 100644 --- a/lib/mixins/event.js +++ b/lib/mixins/event.js @@ -10,6 +10,20 @@ var eventMappings = { patch: 'patched' }; +function getEventNamedArgs(args, event) { + switch (event) { + case 'update': + case 'patch': + return { id: args[0], data: args[1], params: args[2] }; + case 'create': + return { data: args[0], params: args[1] }; + case 'remove': + return { id: args[0], params: args[1] }; + default: + return {}; + } +} + /** * An event mixin that emits events after a service method calls its callback. * @@ -38,9 +52,10 @@ var EventMixin = { // Punch the given method emitter.punch(method, -1); // Pass the event and error event through - emitter.on(eventName, function (results) { + emitter.on(eventName, function (results, args) { if (!results[0]) { // callback without error - self.emit(event, results[1]); + var namedArgs = getEventNamedArgs(args, method); + self.emit(event, results[1], namedArgs); } else { self.emit('serviceError', results[0]); } diff --git a/test/mixins/event.test.js b/test/mixins/event.test.js index bb64a9ba17..651e5b3d99 100644 --- a/test/mixins/event.test.js +++ b/test/mixins/event.test.js @@ -84,15 +84,19 @@ describe('Event mixin', function () { var instance = create.call(FixtureService); instance.setup(); - instance.on('created', function (data) { + instance.on('created', function (data, args) { assert.equal(data.id, 10); assert.equal(data.name, 'Tester'); + assert.equal(args.data.name, 'Tester'); + assert.equal(args.params.custom, 'value'); done(); }); instance.create({ name: 'Tester' - }, {}, function (error, data) { + }, { + custom: 'value' + }, function (error, data) { assert.equal(data.id, 10); }); }); @@ -114,15 +118,20 @@ describe('Event mixin', function () { var instance = create.call(FixtureService); instance.setup(); - instance.on('updated', function (data) { + instance.on('updated', function (data, args) { assert.equal(data.id, 12); assert.equal(data.name, 'Updated tester'); + assert.equal(args.id, 12); + assert.equal(args.data.name, 'Updated tester'); + assert.equal(args.params.custom, 'value'); done(); }); instance.update(12, { name: 'Updated tester' - }, {}, function (error, data) { + }, { + custom: 'value' + }, function (error, data) { assert.equal(data.id, 12); }); }); @@ -143,12 +152,16 @@ describe('Event mixin', function () { var instance = create.call(FixtureService); instance.setup(); - instance.on('removed', function (data) { + instance.on('removed', function (data, args) { assert.equal(data.id, 27); + assert.equal(args.id, 27); + assert.equal(args.params.custom, 'value'); done(); }); - instance.remove(27, {}, function (error, data) { + instance.remove(27, { + custom: 'value' + }, function (error, data) { assert.equal(data.id, 27); }); }); From 705c9fba4dcf59ad74ed5d63ddf0a751d9d6989c Mon Sep 17 00:00:00 2001 From: Loris Guignard Date: Tue, 6 Oct 2015 17:06:44 +0200 Subject: [PATCH 2/2] Refactor using hookObject method from feathers-common --- lib/mixins/event.js | 19 +++---------------- 1 file changed, 3 insertions(+), 16 deletions(-) diff --git a/lib/mixins/event.js b/lib/mixins/event.js index 8cf481075a..cb20cf791a 100644 --- a/lib/mixins/event.js +++ b/lib/mixins/event.js @@ -3,6 +3,7 @@ var _ = require('lodash'); var rubberduck = require('rubberduck'); var EventEmitter = require('events').EventEmitter; +var hookObject = require('feathers-commons').hooks.hookObject; var eventMappings = { create: 'created', update: 'updated', @@ -10,20 +11,6 @@ var eventMappings = { patch: 'patched' }; -function getEventNamedArgs(args, event) { - switch (event) { - case 'update': - case 'patch': - return { id: args[0], data: args[1], params: args[2] }; - case 'create': - return { data: args[0], params: args[1] }; - case 'remove': - return { id: args[0], params: args[1] }; - default: - return {}; - } -} - /** * An event mixin that emits events after a service method calls its callback. * @@ -54,8 +41,8 @@ var EventMixin = { // Pass the event and error event through emitter.on(eventName, function (results, args) { if (!results[0]) { // callback without error - var namedArgs = getEventNamedArgs(args, method); - self.emit(event, results[1], namedArgs); + var hook = hookObject(method, 'after', args); + self.emit(event, results[1], hook); } else { self.emit('serviceError', results[0]); }