Skip to content
This repository was archived by the owner on Mar 12, 2022. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 39 additions & 0 deletions lib/expose.js
Original file line number Diff line number Diff line change
@@ -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;
39 changes: 19 additions & 20 deletions lib/singleton.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,17 @@
"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
db.models = {}; // Expose models

db.discover = ["/model"]; // Set the default discovery paths
db.matcher = null; // Set matcher to null
Expand All @@ -22,15 +22,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) {
Expand All @@ -40,26 +41,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");

Expand Down