From b5e0f14249ffff79ac2e6036149e26386395131b Mon Sep 17 00:00:00 2001 From: Raymond Feng Date: Fri, 15 Nov 2013 11:12:33 -0800 Subject: [PATCH] Separate the modelBuilder ref from dataSource --- lib/datasource.js | 4 ++-- lib/model-builder.js | 37 ++++++++++++++++++------------------- 2 files changed, 20 insertions(+), 21 deletions(-) diff --git a/lib/datasource.js b/lib/datasource.js index 9854e36c..1e53dbeb 100644 --- a/lib/datasource.js +++ b/lib/datasource.js @@ -551,7 +551,7 @@ DataSource.prototype.attach = function (modelClass) { return; } var className = modelClass.modelName; - var modelDef = modelClass.dataSource.getModelDefinition(className); + var modelDef = modelClass.modelBuilder.getModelDefinition(className); var properties = modelDef.properties; var settings = modelDef.settings; @@ -1444,7 +1444,7 @@ DataSource.prototype.disconnect = function disconnect(cb) { DataSource.prototype.copyModel = function copyModel(Master) { var dataSource = this; var className = Master.modelName; - var md = Master.dataSource.getModelDefinition(className); + var md = Master.modelBuilder.getModelDefinition(className); var Slave = function SlaveModel() { Master.apply(this, [].slice.call(arguments)); }; diff --git a/lib/model-builder.js b/lib/model-builder.js index 07d7c838..0d49dd7a 100644 --- a/lib/model-builder.js +++ b/lib/model-builder.js @@ -76,7 +76,7 @@ ModelBuilder.prototype.getModelDefinition = function(name) { * * @example simple case * ``` - * var User = dataSource.define('User', { + * var User = modelBuilder.define('User', { * email: String, * password: String, * birthDate: Date, @@ -85,7 +85,7 @@ ModelBuilder.prototype.getModelDefinition = function(name) { * ``` * @example more advanced case * ``` - * var User = dataSource.define('User', { + * var User = modelBuilder.define('User', { * email: { type: String, limit: 150, index: true }, * password: { type: String, limit: 50 }, * birthDate: Date, @@ -95,7 +95,7 @@ ModelBuilder.prototype.getModelDefinition = function(name) { * ``` */ ModelBuilder.prototype.define = function defineClass(className, properties, settings, parent) { - var dataSource = this; + var modelBuilder = this; var args = slice.call(arguments); var pluralName = settings && settings.plural; @@ -140,7 +140,7 @@ ModelBuilder.prototype.define = function defineClass(className, properties, sett // every class can receive hash of data as optional param ModelClass = function ModelConstructor(data, dataSource) { if(!(this instanceof ModelConstructor)) { - return new ModelConstructor(data, dataSource); + return new ModelConstructor(data, modelBuilder); } if(ModelClass.settings.unresolved) { throw new Error('Model ' + ModelClass.modelName + ' is not defined.'); @@ -171,8 +171,7 @@ ModelBuilder.prototype.define = function defineClass(className, properties, sett } // Add metadata to the ModelClass - hiddenProperty(ModelClass, 'dataSource', dataSource); - hiddenProperty(ModelClass, 'schema', dataSource); // For backward compatibility + hiddenProperty(ModelClass, 'modelBuilder', modelBuilder); hiddenProperty(ModelClass, 'pluralModelName', pluralName || inflection.pluralize(className)); hiddenProperty(ModelClass, 'relations', {}); @@ -290,7 +289,7 @@ ModelBuilder.prototype.define = function defineClass(className, properties, sett }); // Define the subclass - var subClass = dataSource.define(className, subclassProperties, subclassSettings, ModelClass); + var subClass = modelBuilder.define(className, subclassProperties, subclassSettings, ModelClass); // Calling the setup function if(typeof subClass.setup === 'function') { @@ -319,7 +318,7 @@ ModelBuilder.prototype.define = function defineClass(className, properties, sett return new OrigDate(arg); }; } else if(typeof DataType === 'string') { - DataType = dataSource.resolveType(DataType); + DataType = modelBuilder.resolveType(DataType); } if(prop.required) { @@ -420,7 +419,7 @@ ModelBuilder.prototype.defineProperty = function (model, propertyName, propertyD * db.defineProperty('Content', 'expiryDate', { type: Date, index: true }); * db.defineProperty('Content', 'isExpired', { type: Boolean, index: true }); * - * // dataSource.extend allows to + * // modelBuilder.extend allows to * // extend the content model with competition attributes * db.extendModel('Content', { * competitionType: String, @@ -438,9 +437,9 @@ ModelBuilder.prototype.extendModel = function (model, props) { ModelBuilder.prototype.copyModel = function copyModel(Master) { - var dataSource = this; + var modelBuilder = this; var className = Master.modelName; - var md = Master.dataSource.definitions[className]; + var md = Master.modelBuilder.definitions[className]; var Slave = function SlaveModel() { Master.apply(this, [].slice.call(arguments)); }; @@ -449,15 +448,15 @@ ModelBuilder.prototype.copyModel = function copyModel(Master) { Slave.__proto__ = Master; - hiddenProperty(Slave, 'dataSource', dataSource); + hiddenProperty(Slave, 'modelBuilder', modelBuilder); hiddenProperty(Slave, 'modelName', className); hiddenProperty(Slave, 'relations', Master.relations); - if (!(className in dataSource.models)) { + if (!(className in modelBuilder.models)) { // store class in model pool - dataSource.models[className] = Slave; - dataSource.definitions[className] = { + modelBuilder.models[className] = Slave; + modelBuilder.definitions[className] = { properties: md.properties, settings: md.settings }; @@ -537,12 +536,12 @@ ModelBuilder.prototype.resolveType = function(type) { }; /** - * Build models from dataSource definitions + * Build models from schema definitions * * `schemas` can be one of the following: * - * 1. An array of named dataSource definition JSON objects - * 2. A dataSource definition JSON object + * 1. An array of named schema definition JSON objects + * 2. A schema definition JSON object * 3. A list of property definitions (anonymous) * * @param {*} schemas The schemas @@ -557,7 +556,7 @@ ModelBuilder.prototype.buildModels = function (schemas) { // Only one item schemas = [schemas]; } else { - // Anonymous dataSource + // Anonymous schema schemas = [ { name: this.getSchemaName(),