Merge pull request #1424 from lehni/feature/rename-get-async

Rename getAsync() methods to find() and get()
This commit is contained in:
Miroslav Bajtoš 2017-07-20 15:15:12 +02:00 committed by GitHub
commit 1fb7b0e24d
4 changed files with 56 additions and 45 deletions

View File

@ -20,6 +20,7 @@ var idEquals = utils.idEquals;
var ModelBaseClass = require('./model.js');
var applyFilter = require('./connectors/memory').applyFilter;
var ValidationError = require('./validations.js').ValidationError;
var deprecated = require('depd')('loopback-datasource-juggler');
var debug = require('debug')('loopback:relations');
var RelationTypes = {
@ -1338,7 +1339,11 @@ RelationDefinition.belongsTo = function(modelFrom, modelToRef, params) {
get: function() {
var relation = new BelongsTo(definition, this);
var relationMethod = relation.related.bind(relation);
relationMethod.getAsync = relation.getAsync.bind(relation);
relationMethod.get = relation.get.bind(relation);
relationMethod.getAsync = function() {
deprecated(g.f('BelongsTo method "getAsync()" is deprecated, use "get()" instead.'));
return this.get.apply(this, arguments);
};
relationMethod.update = relation.update.bind(relation);
relationMethod.destroy = relation.destroy.bind(relation);
if (!polymorphic) {
@ -1580,9 +1585,8 @@ BelongsTo.prototype.related = function(condOrRefresh, options, cb) {
* @param {Function} cb Callback of the form function (err, inst)
* @returns {Promise | Undefined} returns promise if callback is omitted
*/
BelongsTo.prototype.getAsync = function(options, cb) {
BelongsTo.prototype.get = function(options, cb) {
if (typeof options === 'function' && cb === undefined) {
// order.customer.getAsync(cb)
cb = options;
options = {};
}
@ -1712,7 +1716,11 @@ RelationDefinition.hasOne = function(modelFrom, modelToRef, params) {
get: function() {
var relation = new HasOne(definition, this);
var relationMethod = relation.related.bind(relation);
relationMethod.getAsync = relation.getAsync.bind(relation);
relationMethod.get = relation.get.bind(relation);
relationMethod.getAsync = function() {
deprecated(g.f('HasOne method "getAsync()" is deprecated, use "get()" instead.'));
return this.get.apply(this, arguments);
};
relationMethod.create = relation.create.bind(relation);
relationMethod.build = relation.build.bind(relation);
relationMethod.update = relation.update.bind(relation);
@ -1991,15 +1999,13 @@ HasOne.prototype.related = function(condOrRefresh, options, cb) {
/**
* Define a Promise-based method for the hasOne relation itself
* - order.customer.getAsync(cb): Load the target model instance asynchronously
* - order.customer.get(cb): Load the target model instance asynchronously
*
* @param {Function} cb Callback of the form function (err, inst)
* @returns {Promise | Undefined} Returns promise if cb is omitted
*/
HasOne.prototype.getAsync = function(options, cb) {
HasOne.prototype.get = function(options, cb) {
if (typeof options === 'function' && cb === undefined) {
// order.profile.getAsync(cb)
cb = options;
options = {};
}

View File

@ -6,6 +6,7 @@
var _ = require('lodash');
var i8n = require('inflection');
var g = require('strong-globalize')();
var utils = require('./utils');
var defineCachedRelations = utils.defineCachedRelations;
var setScopeValuesFromWhere = utils.setScopeValuesFromWhere;
@ -13,6 +14,7 @@ var mergeQuery = utils.mergeQuery;
var DefaultModelBaseClass = require('./model.js');
var collectTargetIds = utils.collectTargetIds;
var idName = utils.idName;
var deprecated = require('depd')('loopback-datasource-juggler');
/**
* Module exports
@ -272,15 +274,13 @@ function defineScope(cls, targetClass, name, params, methods, options) {
f._targetClass = rel && rel.modelTo && rel.modelTo.modelName || i8n.camelize(f._scope.collect);
}
f.getAsync = function(condOrRefresh, options, cb) {
f.find = function(condOrRefresh, options, cb) {
if (typeof condOrRefresh === 'function' &&
options === undefined && cb === undefined) {
// customer.orders.getAsync(cb)
cb = condOrRefresh;
options = {};
condOrRefresh = {};
} else if (typeof options === 'function' && cb === undefined) {
// customer.orders.getAsync(condOrRefresh, cb);
cb = options;
options = {};
}
@ -288,6 +288,11 @@ function defineScope(cls, targetClass, name, params, methods, options) {
return definition.related(self, f._scope, condOrRefresh, options, cb);
};
f.getAsync = function() {
deprecated(g.f('Scope method "getAsync()" is deprecated, use "find()" instead.'));
return this.find.apply(this, arguments);
};
f.build = build;
f.create = create;
f.updateAll = updateAll;

View File

@ -182,7 +182,7 @@ function mergeQuery(base, update, spec) {
} else {
if (spec.nestedInclude === true) {
// specify nestedInclude=true to force nesting of inclusions on scoped
// queries. e.g. In physician.patients.getAsync({include: 'address'}),
// queries. e.g. In physician.patients.find({include: 'address'}),
// inclusion should be on patient model, not on physician model.
var saved = base.include;
base.include = {};

View File

@ -194,13 +194,13 @@ describe('relations', function() {
}).catch(done);
function verify(book) {
return book.chapters.getAsync()
return book.chapters.find()
.then(function(ch) {
should.exist(ch);
ch.should.have.lengthOf(3);
var chapters = book.chapters();
chapters.should.eql(ch);
return book.chapters.getAsync()
return book.chapters.find()
.then(function(c) {
should.exist(c);
ch.should.have.lengthOf(3);
@ -214,7 +214,7 @@ describe('relations', function() {
}
});
it('should fetch all scoped instances with getAsync with callback and condition', function(done) {
it('should fetch all scoped instances with find() with callback and condition', function(done) {
Book.create(function(err, book) {
book.chapters.create({name: 'a'}, function() {
book.chapters.create({name: 'z'}, function() {
@ -232,7 +232,7 @@ describe('relations', function() {
var chapters = book.chapters();
chapters.should.eql(ch);
book.chapters.getAsync(function(e, c) {
book.chapters.find(function(e, c) {
should.not.exist(e);
should.exist(c);
ch.should.have.lengthOf(3);
@ -246,7 +246,7 @@ describe('relations', function() {
}
});
it('should fetch all scoped instances with getAsync with callback and no condition', function(done) {
it('should fetch all scoped instances with find() with callback and no condition', function(done) {
Book.create(function(err, book) {
book.chapters.create({name: 'a'}, function() {
book.chapters.create({name: 'z'}, function() {
@ -265,7 +265,7 @@ describe('relations', function() {
var chapters = book.chapters();
chapters.should.eql(ch);
book.chapters.getAsync(function(e, c) {
book.chapters.find(function(e, c) {
should.not.exist(e);
should.exist(c);
should.exist(c.length);
@ -711,7 +711,7 @@ describe('relations', function() {
});
}).catch(done);
function verify(physician) {
return physician.patients.getAsync()
return physician.patients.find()
.then(function(ch) {
var patients = physician.patients();
should.equal(patients, ch);
@ -1012,7 +1012,7 @@ describe('relations', function() {
}).catch(done);
function verify(physician, addressId) {
return physician.patients.getAsync({include: 'address'})
return physician.patients.find({include: 'address'})
.then(function(ch) {
should.exist(ch);
ch.should.have.lengthOf(1);
@ -1646,7 +1646,7 @@ describe('relations', function() {
it('should find records on scope with promises', function(done) {
Category.findOne()
.then(function(c) {
return c.jobs.getAsync();
return c.jobs.find();
})
.then(function(jobs) {
jobs.should.have.length(2);
@ -1670,7 +1670,7 @@ describe('relations', function() {
it('should find record on scope with promises - filtered', function(done) {
Category.findOne()
.then(function(c) {
return c.jobs.getAsync({where: {type: 'book'}});
return c.jobs.find({where: {type: 'book'}});
})
.then(function(jobs) {
jobs.should.have.length(1);
@ -2051,7 +2051,7 @@ describe('relations', function() {
it('should find polymorphic relation with promises - employee', function(done) {
Employee.findOne()
.then(function(employee) {
return employee.mugshot.getAsync()
return employee.mugshot.get()
.then(function(pic) {
pic.name.should.equal('Mugshot');
pic.imageableId.toString().should.eql(employee.id.toString());
@ -3140,7 +3140,7 @@ describe('relations', function() {
});
});
it('can be used to query data with getAsync with callback', function(done) {
it('can be used to query data with get() with callback', function(done) {
List.hasMany('todos', {model: Item});
db.automigrate(['List', 'Item', 'Fear', 'Find'], function() {
List.create({name: 'List 1'}, function(e, list) {
@ -3149,7 +3149,7 @@ describe('relations', function() {
should.exist(list);
list.todos.create({name: 'Item 1'}, function(err, todo) {
itemId = todo.id;
todo.list.getAsync(function(e, l) {
todo.list.get(function(e, l) {
should.not.exist(e);
should.exist(l);
l.should.be.an.instanceOf(List);
@ -3173,7 +3173,7 @@ describe('relations', function() {
})
.then(function(todo) {
itemId = todo.id;
return todo.list.getAsync()
return todo.list.get()
.then(function(l) {
should.exist(l);
l.should.be.an.instanceOf(List);
@ -3349,7 +3349,7 @@ describe('relations', function() {
// the first row returned may or may not be the same
p.personId.should.eql(personCreated.id);
}
return p.person.getAsync();
return p.person.get();
})
.then(function(person) {
person.name.should.equal('Fred');
@ -3467,14 +3467,14 @@ describe('relations', function() {
});
});
it('can be used to query data with getAsync with callback', function(done) {
it('can be used to query data with get() with callback', function(done) {
db.automigrate(['Supplier', 'Account'], function() {
Supplier.create({name: 'Supplier 1'}, function(e, supplier) {
supplierId = supplier.id;
should.not.exist(e);
should.exist(supplier);
supplier.account.create({accountNo: 'a01'}, function(err, account) {
supplier.account.getAsync(function(e, act) {
supplier.account.get(function(e, act) {
accountId = act.id;
should.not.exist(e);
should.exist(act);
@ -3496,7 +3496,7 @@ describe('relations', function() {
should.exist(supplier);
return supplier.account.create({accountNo: 'a01'})
.then(function(account) {
return supplier.account.getAsync();
return supplier.account.get();
})
.then(function(act) {
accountId = act.id;
@ -3575,7 +3575,7 @@ describe('relations', function() {
Supplier.findById(supplierId)
.then(function(supplier) {
should.exist(supplier);
return supplier.account.getAsync();
return supplier.account.get();
})
.then(function(act) {
should.exist(act);
@ -3627,7 +3627,7 @@ describe('relations', function() {
Supplier.findById(supplierId)
.then(function(supplier) {
should.exist(supplier);
return supplier.account.getAsync();
return supplier.account.get();
})
.then(function(act) {
should.not.exist(act);
@ -3723,7 +3723,7 @@ describe('relations', function() {
should.exist(supplier);
return supplier.account.create({accountNo: 'a01', block: false})
.then(function(account) {
return supplier.account.getAsync();
return supplier.account.get();
})
.then(function(act) {
accountId = act.id;
@ -3747,7 +3747,7 @@ describe('relations', function() {
return Supplier.findById(supplierId);
})
.then(function(supplier) {
return supplier.account.getAsync();
return supplier.account.get();
})
.then(function(account) {
should.not.exist(account);
@ -3963,7 +3963,7 @@ describe('relations', function() {
return Employee.create({name: 'a01', companyId: COMPANY_ID})
.then(function(employee) {
should.exist(employee);
return boss.employees.getAsync();
return boss.employees.find();
}).then(function(employees) {
should.exists(employees);
employees.length.should.equal(1);
@ -4000,7 +4000,7 @@ describe('relations', function() {
})
.then(function(employee) {
should.exists(employee);
return employee.boss.getAsync();
return employee.boss.get();
})
.then(function(boss) {
should.exists(boss);
@ -4101,7 +4101,7 @@ describe('relations', function() {
it('should allow to fetch scoped instances with promises', function(done) {
Article.findOne()
.then(function(article) {
return article.tagNames.getAsync()
return article.tagNames.find()
.then(function(tags) {
should.exist(tags);
article.tagNames().should.eql(tags);
@ -4132,13 +4132,13 @@ describe('relations', function() {
'should allow to remove connection with instance with promises', function(done) {
Article.findOne()
.then(function(article) {
return article.tagNames.getAsync()
return article.tagNames.find()
.then(function(tags) {
var len = tags.length;
tags.should.not.be.empty;
return article.tagNames.remove(tags[0])
.then(function() {
return article.tagNames.getAsync();
return article.tagNames.find();
})
.then(function(tags) {
tags.should.have.lengthOf(len - 1);
@ -5930,7 +5930,7 @@ describe('relations', function() {
Category.findOne()
.then(function(cat) {
cat.jobIds.should.eql([job2.id]);
return cat.jobs.getAsync();
return cat.jobs.find();
})
.then(function(jobs) {
var p = jobs[0];
@ -5948,7 +5948,7 @@ describe('relations', function() {
Category.findOne()
.then(function(cat) {
cat.jobIds[0].should.be.oneOf(theExpectedIds);
return cat.jobs.getAsync();
return cat.jobs.find();
})
.then(function(jobs) {
var p = jobs[0];
@ -6062,7 +6062,7 @@ describe('relations', function() {
Category.findOne()
.then(function(cat) {
var filter = {where: {name: 'Job 1'}};
return cat.jobs.getAsync(filter);
return cat.jobs.find(filter);
})
.then(function(jobs) {
jobs.should.have.length(1);
@ -6095,7 +6095,7 @@ describe('relations', function() {
var expected = [job2.id, job3.id];
cat.jobIds.should.have.lengthOf(expected.length);
cat.jobIds.should.containDeep(expected);
return cat.jobs.getAsync();
return cat.jobs.find();
})
.then(function(jobs) {
jobs.should.have.length(2);
@ -6111,7 +6111,7 @@ describe('relations', function() {
Category.find()
.then(function(categories) {
categories.should.have.length(1);
return categories[0].jobs.getAsync({order: 'name DESC'});
return categories[0].jobs.find({order: 'name DESC'});
})
.then(function(jobs) {
jobs.should.have.length(2);
@ -6180,7 +6180,7 @@ describe('relations', function() {
var expected = [job3.id];
cat.jobIds.should.have.lengthOf(expected.length);
cat.jobIds.should.containDeep(expected);
return cat.jobs.getAsync();
return cat.jobs.find();
})
.then(function(jobs) {
jobs.should.have.length(1);