Merge branch 'release/2.3.1' into production

This commit is contained in:
Raymond Feng 2014-08-08 15:54:23 -07:00
commit a848628db8
4 changed files with 22 additions and 8 deletions

View File

@ -1235,8 +1235,12 @@ var defineScope = require('./scope.js').defineScope;
* @param {ModelClass} [targetClass] The model class for the query, default to * @param {ModelClass} [targetClass] The model class for the query, default to
* the declaring model * the declaring model
*/ */
DataAccessObject.scope = function (name, query, targetClass) { DataAccessObject.scope = function (name, query, targetClass, methods, options) {
defineScope(this, targetClass || this, name, query); var cls = this;
if (options && options.isStatic === false) {
cls = cls.prototype;
}
defineScope(cls, targetClass || cls, name, query, methods, options);
}; };
/* /*

View File

@ -378,7 +378,7 @@ function isModelDataSourceAttached(model) {
DataSource.prototype.defineScopes = function (modelClass, scopes) { DataSource.prototype.defineScopes = function (modelClass, scopes) {
if(scopes) { if(scopes) {
for(var s in scopes) { for(var s in scopes) {
defineScope(modelClass, modelClass, s, scopes[s]); defineScope(modelClass, modelClass, s, scopes[s], {}, scopes[s].options);
} }
} }
}; };

View File

@ -8,8 +8,9 @@ exports.defineScope = defineScope;
exports.mergeQuery = mergeQuery; exports.mergeQuery = mergeQuery;
function ScopeDefinition(definition) { function ScopeDefinition(definition) {
this.modelFrom = definition.modelFrom || definition.sourceModel; this.isStatic = definition.isStatic;
this.modelTo = definition.modelTo || definition.targetModel; this.modelFrom = definition.modelFrom;
this.modelTo = definition.modelTo || definition.modelFrom;
this.name = definition.name; this.name = definition.name;
this.params = definition.params; this.params = definition.params;
this.methods = definition.methods; this.methods = definition.methods;
@ -80,7 +81,11 @@ function defineScope(cls, targetClass, name, params, methods, options) {
} }
} }
options = options || {};
// Check if the cls is the class itself or its prototype
var isStatic = (typeof cls === 'function') || options.isStatic || false;
var definition = new ScopeDefinition({ var definition = new ScopeDefinition({
isStatic: isStatic,
modelFrom: cls, modelFrom: cls,
modelTo: targetClass, modelTo: targetClass,
name: name, name: name,
@ -89,8 +94,13 @@ function defineScope(cls, targetClass, name, params, methods, options) {
options: options || {} options: options || {}
}); });
if(isStatic) {
cls.scopes = cls.scopes || {}; cls.scopes = cls.scopes || {};
cls.scopes[name] = definition; cls.scopes[name] = definition;
} else {
cls.constructor.scopes = cls.constructor.scopes || {};
cls.constructor.scopes[name] = definition;
}
// Define a property for the scope // Define a property for the scope
Object.defineProperty(cls, name, { Object.defineProperty(cls, name, {

View File

@ -1,6 +1,6 @@
{ {
"name": "loopback-datasource-juggler", "name": "loopback-datasource-juggler",
"version": "2.3.0", "version": "2.3.1",
"description": "LoopBack DataSoure Juggler", "description": "LoopBack DataSoure Juggler",
"keywords": [ "keywords": [
"StrongLoop", "StrongLoop",