From 96f271018750fe2ccbdd140a793f050220908fef Mon Sep 17 00:00:00 2001 From: Jacob Spizziri Date: Sat, 24 Oct 2015 09:59:28 -0500 Subject: [PATCH 1/2] multiple namespaced connections --- lib/expose.js | 39 +++++++++++++++++++++++++++++++++++++++ lib/singleton.js | 38 +++++++++++++++++++------------------- 2 files changed, 58 insertions(+), 19 deletions(-) create mode 100644 lib/expose.js diff --git a/lib/expose.js b/lib/expose.js new file mode 100644 index 0000000..ce7d0db --- /dev/null +++ b/lib/expose.js @@ -0,0 +1,39 @@ +var isNamedConnection = false + , expose = function(db, sequelize, models, options){ + // Expose the sequelize object + if(options.name) { + + if(isNamedConnection == false) { + isNamedConnection = true; + + // Namespace sequelize + if(db.sequelize) { + var namespace = { 'default': db.sequelize }; + db.sequelize = namespace; + } else { + db.sequelize = {}; + } + + // Namespace models + if(db.models) { + var namespace = { 'default' : db.models }; + db.models = namespace; + } + } + + // Add namespaced sequelize and models + db.sequelize[options.name] = sequelize; + db.models[options.name] = models; + } else if(isNammedConnection) { + throw "If any of your connections are named, then all of them must be"; + } else { + // Default to non-namespaced db + db.sequelize = sequelize; + db.models = models; + } + + return db; + }; + + +module.exports = expose; diff --git a/lib/singleton.js b/lib/singleton.js index 9261344..b12f699 100644 --- a/lib/singleton.js +++ b/lib/singleton.js @@ -1,13 +1,14 @@ "use strict"; -var path = require("path"); -var Sequelize = require("sequelize"); -var dive = require("./dive"); -var db = {}; -var log = function(log){ - if(typeof db.logger === 'function') - db.logger(log); -}; +var path = require("path") + , Sequelize = require("sequelize") + , dive = require("./dive") + , expose = require("./expose") + , db = {} + , log = function(log){ + if(typeof db.logger === 'function') + db.logger(log); + }; db.Sequelize = Sequelize; // Expose Sequelize @@ -22,15 +23,16 @@ db.logger = function(log){ }; // Expose the connection function -db.connect = function(database, username, password, options) { +db.connect = function(database, username, password, options, connectionOptions = {}) { log("Connecting to: " + database + " as: " + username); // Instantiate a new sequelize instance - var sequelize = new db.Sequelize(database, username, password, options); - + var sequelize = new db.Sequelize(database, username, password, options) + , discover = connectionOptions.discover || db.discover + , models = {}; - db.discover.forEach(function(location){ + discover.forEach(function(location){ // Recurse through the api directory and collect the models dive(location, function(err, path) { @@ -40,26 +42,24 @@ db.connect = function(database, username, password, options) { var model = sequelize["import"](path); if(model) - db.models[model.name] = model; + models[model.name] = model; }, db.matcher); }); // Execute the associate methods for each Model - Object.keys(db.models).forEach(function(modelName) { + Object.keys(models).forEach(function(modelName) { - if ("associate" in db.models[modelName]) { + if ("associate" in models[modelName]) { log("Associating Model: "+ modelName); - db.models[modelName].associate(db.models); + models[modelName].associate(models); } else { log("Nothing to associate for Model: "+ modelName); } }); - - // Expose the sequelize object - db.sequelize = sequelize; + expose(db, sequelize, models, connectionOptions); log("Finished Connecting"); From a0807eb3fc577b5e1d392366366d0d2f084dbe27 Mon Sep 17 00:00:00 2001 From: Jacob Spizziri Date: Sat, 24 Oct 2015 10:08:54 -0500 Subject: [PATCH 2/2] remove models exposure in singleton.js --- lib/singleton.js | 1 - 1 file changed, 1 deletion(-) diff --git a/lib/singleton.js b/lib/singleton.js index b12f699..996d049 100644 --- a/lib/singleton.js +++ b/lib/singleton.js @@ -12,7 +12,6 @@ var path = require("path") db.Sequelize = Sequelize; // Expose Sequelize -db.models = {}; // Expose models db.discover = ["/model"]; // Set the default discovery paths db.matcher = null; // Set matcher to null