From 9db8a7a25fb62af81d0f3446b34babb669e0890d Mon Sep 17 00:00:00 2001 From: Ritchie Martori Date: Tue, 19 Nov 2013 12:23:02 -0800 Subject: [PATCH] Auto attach all models created --- lib/application.js | 3 +++ lib/loopback.js | 29 +++++++++++++++++++++-------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/lib/application.js b/lib/application.js index 590b83ab..a702913b 100644 --- a/lib/application.js +++ b/lib/application.js @@ -218,6 +218,9 @@ app.boot = function(options) { app.model(key, obj); }); + // attach models to dataSources by type + loopback.autoAttach(); + // require directories var requiredModels = requireDir(path.join(appRootDir, 'models')); } diff --git a/lib/loopback.js b/lib/loopback.js index 44892820..5204ec21 100644 --- a/lib/loopback.js +++ b/lib/loopback.js @@ -96,6 +96,11 @@ loopback.createDataSource = function (name, options) { ModelCtor.attachTo(ds); return ModelCtor; }; + + if(options && options.defaultForType) { + loopback.setDefaultDataSourceForType(options.defaultForType, ds); + } + return ds; }; @@ -110,6 +115,9 @@ loopback.createDataSource = function (name, options) { loopback.createModel = function (name, properties, options) { var model = loopback.Model.extend(name, properties, options); + // try to attach + loopback.autoAttachModel(model); + return model; } @@ -206,22 +214,27 @@ loopback.getDefaultDataSourceForType = function(type) { loopback.autoAttach = function() { var models = this.Model.modelBuilder.models; assert.equal(typeof models, 'object', 'Cannot autoAttach without a models object'); - var lb = this; Object.keys(models).forEach(function(modelName) { var ModelCtor = models[modelName]; - if(ModelCtor.autoAttach) { - var ds = lb.getDefaultDataSourceForType(ModelCtor.autoAttach); - - assert(ds instanceof DataSource, 'cannot autoAttach model "' + modelName - + '". No dataSource found of type ' + ModelCtor.attachTo); - - ModelCtor.attachTo(ds); + if(ModelCtor) { + loopback.autoAttachModel(ModelCtor); } }); } +loopback.autoAttachModel = function(ModelCtor) { + if(ModelCtor.autoAttach) { + var ds = loopback.getDefaultDataSourceForType(ModelCtor.autoAttach); + + assert(ds instanceof DataSource, 'cannot autoAttach model "' + ModelCtor.modelName + + '". No dataSource found of type ' + ModelCtor.attachTo); + + ModelCtor.attachTo(ds); + } +} + /* * Built in models / services */