Merge pull request #39 from strongloop/model-builder
Separate the modelBuilder ref from dataSource
This commit is contained in:
commit
e51c8971f9
|
@ -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));
|
||||
};
|
||||
|
|
|
@ -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(),
|
||||
|
|
Loading…
Reference in New Issue