Merge pull request #962 from clarkorz/fix/nestRemote-hooks
fix nestRemoting is nesting hooks from other relations
This commit is contained in:
commit
d77c5fac1d
12
lib/model.js
12
lib/model.js
|
@ -654,7 +654,7 @@ Model.nestRemoting = function(relationName, options, cb) {
|
||||||
opts.returns = [].concat(method.returns || []);
|
opts.returns = [].concat(method.returns || []);
|
||||||
opts.description = method.description;
|
opts.description = method.description;
|
||||||
opts.rest = extend({}, method.rest || {});
|
opts.rest = extend({}, method.rest || {});
|
||||||
opts.rest.delegateTo = method.name;
|
opts.rest.delegateTo = method;
|
||||||
|
|
||||||
opts.http = [];
|
opts.http = [];
|
||||||
var routes = [].concat(method.http || []);
|
var routes = [].concat(method.http || []);
|
||||||
|
@ -718,18 +718,18 @@ Model.nestRemoting = function(relationName, options, cb) {
|
||||||
|
|
||||||
sharedClass.methods().forEach(function(method) {
|
sharedClass.methods().forEach(function(method) {
|
||||||
var delegateTo = method.rest && method.rest.delegateTo;
|
var delegateTo = method.rest && method.rest.delegateTo;
|
||||||
if (delegateTo) {
|
if (delegateTo && delegateTo.ctor == relation.modelTo) {
|
||||||
var before = method.isStatic ? beforeListeners : beforeListeners['prototype'];
|
var before = method.isStatic ? beforeListeners : beforeListeners['prototype'];
|
||||||
var after = method.isStatic ? afterListeners : afterListeners['prototype'];
|
var after = method.isStatic ? afterListeners : afterListeners['prototype'];
|
||||||
var m = method.isStatic ? method.name : 'prototype.' + method.name;
|
var m = method.isStatic ? method.name : 'prototype.' + method.name;
|
||||||
if (before && before[delegateTo]) {
|
if (before && before[delegateTo.name]) {
|
||||||
self.beforeRemote(m, function(ctx, result, next) {
|
self.beforeRemote(m, function(ctx, result, next) {
|
||||||
before[delegateTo]._listeners.call(null, ctx, next);
|
before[delegateTo.name]._listeners.call(null, ctx, next);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (after && after[delegateTo]) {
|
if (after && after[delegateTo.name]) {
|
||||||
self.afterRemote(m, function(ctx, result, next) {
|
self.afterRemote(m, function(ctx, result, next) {
|
||||||
after[delegateTo]._listeners.call(null, ctx, next);
|
after[delegateTo.name]._listeners.call(null, ctx, next);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1164,8 +1164,15 @@ describe('relations - integration', function() {
|
||||||
{ properties: { text: 'string' }, dataSource: 'db',
|
{ properties: { text: 'string' }, dataSource: 'db',
|
||||||
plural: 'notes' }
|
plural: 'notes' }
|
||||||
);
|
);
|
||||||
|
var Chapter = app.model(
|
||||||
|
'Chapter',
|
||||||
|
{ properties: { name: 'string' }, dataSource: 'db',
|
||||||
|
plural: 'chapters' }
|
||||||
|
);
|
||||||
Book.hasMany(Page);
|
Book.hasMany(Page);
|
||||||
|
Book.hasMany(Chapter);
|
||||||
Page.hasMany(Note);
|
Page.hasMany(Note);
|
||||||
|
Chapter.hasMany(Note);
|
||||||
Image.belongsTo(Book);
|
Image.belongsTo(Book);
|
||||||
|
|
||||||
// fake a remote method that match the filter in Model.nestRemoting()
|
// fake a remote method that match the filter in Model.nestRemoting()
|
||||||
|
@ -1176,6 +1183,7 @@ describe('relations - integration', function() {
|
||||||
Page.remoteMethod('__throw__errors', { isStatic: false, http: { path: '/throws', verb: 'get' } });
|
Page.remoteMethod('__throw__errors', { isStatic: false, http: { path: '/throws', verb: 'get' } });
|
||||||
|
|
||||||
Book.nestRemoting('pages');
|
Book.nestRemoting('pages');
|
||||||
|
Book.nestRemoting('chapters');
|
||||||
Image.nestRemoting('book');
|
Image.nestRemoting('book');
|
||||||
|
|
||||||
expect(Book.prototype['__findById__pages__notes']).to.be.a.function;
|
expect(Book.prototype['__findById__pages__notes']).to.be.a.function;
|
||||||
|
@ -1212,6 +1220,19 @@ describe('relations - integration', function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
before(function createChapters(done) {
|
||||||
|
var test = this;
|
||||||
|
test.book.chapters.create({ name: 'Chapter 1' },
|
||||||
|
function(err, chapter) {
|
||||||
|
if (err) return done(err);
|
||||||
|
test.chapter = chapter;
|
||||||
|
chapter.notes.create({ text: 'Chapter Note 1' }, function(err, note) {
|
||||||
|
test.cnote = note;
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
before(function createCover(done) {
|
before(function createCover(done) {
|
||||||
var test = this;
|
var test = this;
|
||||||
app.models.Image.create({ name: 'Cover 1', book: test.book },
|
app.models.Image.create({ name: 'Cover 1', book: test.book },
|
||||||
|
@ -1300,6 +1321,16 @@ describe('relations - integration', function() {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should nest remote hooks of ModelTo - hasMany findById', function(done) {
|
||||||
|
var test = this;
|
||||||
|
this.get('/api/books/' + test.book.id + '/chapters/' + test.chapter.id + '/notes/' + test.cnote.id)
|
||||||
|
.expect(200, function(err, res) {
|
||||||
|
expect(res.headers['x-before']).to.empty();
|
||||||
|
expect(res.headers['x-after']).to.empty();
|
||||||
|
done();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it('should have proper http.path for remoting', function() {
|
it('should have proper http.path for remoting', function() {
|
||||||
[app.models.Book, app.models.Image].forEach(function(Model) {
|
[app.models.Book, app.models.Image].forEach(function(Model) {
|
||||||
Model.sharedClass.methods().forEach(function(method) {
|
Model.sharedClass.methods().forEach(function(method) {
|
||||||
|
|
Loading…
Reference in New Issue