Merge branch 'release/2.12.1' into production
This commit is contained in:
commit
c899536002
25
CHANGES.md
25
CHANGES.md
|
@ -1,3 +1,9 @@
|
||||||
|
2015-02-03, Version 2.12.1
|
||||||
|
==========================
|
||||||
|
|
||||||
|
* Map not found to 404 for hasOne (Raymond Feng)
|
||||||
|
|
||||||
|
|
||||||
2015-02-03, Version 2.12.0
|
2015-02-03, Version 2.12.0
|
||||||
==========================
|
==========================
|
||||||
|
|
||||||
|
@ -1372,14 +1378,6 @@
|
||||||
|
|
||||||
* 2.0.0-beta1 (Ritchie Martori)
|
* 2.0.0-beta1 (Ritchie Martori)
|
||||||
|
|
||||||
* Bump version (Raymond Feng)
|
|
||||||
|
|
||||||
* Add postgresql to the keywords (Raymond Feng)
|
|
||||||
|
|
||||||
* updated package.json with SOAP and framework keywords (altsang)
|
|
||||||
|
|
||||||
* updated package.json with keywords and updated description (Raymond Feng)
|
|
||||||
|
|
||||||
* Make app.datasources unique per app instance (Miroslav Bajtoš)
|
* Make app.datasources unique per app instance (Miroslav Bajtoš)
|
||||||
|
|
||||||
* Add RC version (Ritchie Martori)
|
* Add RC version (Ritchie Martori)
|
||||||
|
@ -1445,11 +1443,6 @@
|
||||||
* Add Change model (Ritchie Martori)
|
* Add Change model (Ritchie Martori)
|
||||||
|
|
||||||
|
|
||||||
2014-05-27, Version 1.8.4
|
|
||||||
=========================
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
2014-05-27, Version 1.8.5
|
2014-05-27, Version 1.8.5
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
|
@ -1461,8 +1454,14 @@
|
||||||
|
|
||||||
* updated package.json with keywords and updated description (Raymond Feng)
|
* updated package.json with keywords and updated description (Raymond Feng)
|
||||||
|
|
||||||
|
|
||||||
|
2014-05-27, Version 1.8.4
|
||||||
|
=========================
|
||||||
|
|
||||||
* Add more keywords (Raymond Feng)
|
* Add more keywords (Raymond Feng)
|
||||||
|
|
||||||
|
* Bump version (Raymond Feng)
|
||||||
|
|
||||||
* app: flatten model config (Miroslav Bajtoš)
|
* app: flatten model config (Miroslav Bajtoš)
|
||||||
|
|
||||||
* Fix the test for mocha 1.19.0 (Raymond Feng)
|
* Fix the test for mocha 1.19.0 (Raymond Feng)
|
||||||
|
|
28
lib/model.js
28
lib/model.js
|
@ -431,6 +431,17 @@ Model.belongsToRemoting = function(relationName, relation, define) {
|
||||||
}, fn);
|
}, fn);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
function convertNullToNotFoundError(toModelName, ctx, cb) {
|
||||||
|
if (ctx.result !== null) return cb();
|
||||||
|
|
||||||
|
var fk = ctx.getArgByName('fk');
|
||||||
|
var msg = 'Unknown "' + toModelName + '" id "' + fk + '".';
|
||||||
|
var error = new Error(msg);
|
||||||
|
error.statusCode = error.status = 404;
|
||||||
|
error.code = 'MODEL_NOT_FOUND';
|
||||||
|
cb(error);
|
||||||
|
}
|
||||||
|
|
||||||
Model.hasOneRemoting = function(relationName, relation, define) {
|
Model.hasOneRemoting = function(relationName, relation, define) {
|
||||||
var pathName = (relation.options.http && relation.options.http.path) || relationName;
|
var pathName = (relation.options.http && relation.options.http.path) || relationName;
|
||||||
var toModelName = relation.modelTo.modelName;
|
var toModelName = relation.modelTo.modelName;
|
||||||
|
@ -441,7 +452,8 @@ Model.hasOneRemoting = function(relationName, relation, define) {
|
||||||
accepts: {arg: 'refresh', type: 'boolean', http: {source: 'query'}},
|
accepts: {arg: 'refresh', type: 'boolean', http: {source: 'query'}},
|
||||||
description: 'Fetches hasOne relation ' + relationName,
|
description: 'Fetches hasOne relation ' + relationName,
|
||||||
accessType: 'READ',
|
accessType: 'READ',
|
||||||
returns: {arg: relationName, type: relation.modelTo.modelName, root: true}
|
returns: {arg: relationName, type: relation.modelTo.modelName, root: true},
|
||||||
|
rest: {after: convertNullToNotFoundError.bind(null, toModelName)}
|
||||||
});
|
});
|
||||||
|
|
||||||
define('__create__' + relationName, {
|
define('__create__' + relationName, {
|
||||||
|
@ -468,24 +480,12 @@ Model.hasOneRemoting = function(relationName, relation, define) {
|
||||||
description: 'Deletes ' + relationName + ' of this model.',
|
description: 'Deletes ' + relationName + ' of this model.',
|
||||||
accessType: 'WRITE'
|
accessType: 'WRITE'
|
||||||
});
|
});
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
Model.hasManyRemoting = function(relationName, relation, define) {
|
Model.hasManyRemoting = function(relationName, relation, define) {
|
||||||
var pathName = (relation.options.http && relation.options.http.path) || relationName;
|
var pathName = (relation.options.http && relation.options.http.path) || relationName;
|
||||||
var toModelName = relation.modelTo.modelName;
|
var toModelName = relation.modelTo.modelName;
|
||||||
|
|
||||||
function convertNullToNotFoundError(ctx, cb) {
|
|
||||||
if (ctx.result !== null) return cb();
|
|
||||||
|
|
||||||
var fk = ctx.getArgByName('fk');
|
|
||||||
var msg = 'Unknown "' + toModelName + '" id "' + fk + '".';
|
|
||||||
var error = new Error(msg);
|
|
||||||
error.statusCode = error.status = 404;
|
|
||||||
error.code = 'MODEL_NOT_FOUND';
|
|
||||||
cb(error);
|
|
||||||
}
|
|
||||||
|
|
||||||
var findByIdFunc = this.prototype['__findById__' + relationName];
|
var findByIdFunc = this.prototype['__findById__' + relationName];
|
||||||
define('__findById__' + relationName, {
|
define('__findById__' + relationName, {
|
||||||
isStatic: false,
|
isStatic: false,
|
||||||
|
@ -496,7 +496,7 @@ Model.hasManyRemoting = function(relationName, relation, define) {
|
||||||
description: 'Find a related item by id for ' + relationName,
|
description: 'Find a related item by id for ' + relationName,
|
||||||
accessType: 'READ',
|
accessType: 'READ',
|
||||||
returns: {arg: 'result', type: toModelName, root: true},
|
returns: {arg: 'result', type: toModelName, root: true},
|
||||||
rest: {after: convertNullToNotFoundError}
|
rest: {after: convertNullToNotFoundError.bind(null, toModelName)}
|
||||||
}, findByIdFunc);
|
}, findByIdFunc);
|
||||||
|
|
||||||
var destroyByIdFunc = this.prototype['__destroyById__' + relationName];
|
var destroyByIdFunc = this.prototype['__destroyById__' + relationName];
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
{
|
{
|
||||||
"name": "loopback",
|
"name": "loopback",
|
||||||
"version": "2.12.0",
|
"version": "2.12.1",
|
||||||
"description": "LoopBack: Open Source Framework for Node.js",
|
"description": "LoopBack: Open Source Framework for Node.js",
|
||||||
"homepage": "http://loopback.io",
|
"homepage": "http://loopback.io",
|
||||||
"keywords": [
|
"keywords": [
|
||||||
|
@ -102,6 +102,6 @@
|
||||||
"url": "https://github.com/strongloop/loopback/blob/master/LICENSE"
|
"url": "https://github.com/strongloop/loopback/blob/master/LICENSE"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"sl-blip": "http://blip.strongloop.com/loopback@2.12.0"
|
"sl-blip": "http://blip.strongloop.com/loopback@2.12.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue