, _getAdapterConfig = function (dbConfig, adapterName) { var info; for (var p in dbConfig) { // Return the first alias key recognized whose // canonical name is the same info = model.getAdapterInfo(p); if (info && info.name == adapterName) { return dbConfig[p]; } } };
this.loadAdapterForModel = function (modelItem, cb) { var builtinAdaptersPath = path.join(__dirname, '../../node_modules/model/lib/adapters') , cwd = process.cwd() , modelDir = path.join('app/models') , appAdaptersPath = path.join(cwd, modelDir, 'adapters') , adapterInfo , adapterPath , adapterName , adapterCtor , adapter , config , name = modelItem.modelName , done; adapterName = modelItem.adapter; // Is there a specific adapter defined for this model item? if (adapterName) { // See if it's a custom in-app adapter adapterPath = _getAdapterPath(appAdaptersPath, adapterName); // Try again, see if there's a built-in adapter if (!adapterPath) { adapterInfo = model.getAdapterInfo(adapterName); if (adapterInfo) { adapterName = adapterInfo.name; adapterPath = _getAdapterPath(builtinAdaptersPath, adapterInfo.path); } } } else { // Look for a default adapter adapterName = model.defaultAdapter; if (adapterName) { adapterInfo = model.getAdapterInfo(adapterName); if (adapterInfo) { adapterName = adapterInfo.name; // Get canonical name adapterPath = _getAdapterPath(builtinAdaptersPath, adapterInfo.path); } } } // No adapter, log an error if (!adapterPath) { geddy.log.info('Model adapter not found for ' + name + '. Set .adapter for this model, or set model.defaultAdapter.'); } else { adapter = model.adapters[adapterName]; done = function (adapter) { model.loadedAdapters[name] = adapter; // Backward compat, remove after 0.9 model[name].adapter = adapter; // e.g. model.FooBar.adapter model.adapters[adapterName] = adapter; // e.g., model.adpaters.postgres cb(); }; if (!adapter) { config = _getAdapterConfig(geddy.config.db, adapterName); adapterCtor = require(adapterPath).Adapter; adapter = new adapterCtor(config); if (typeof adapter.connect == 'function') { adapter.connect(function () { return done(adapter); }); } else { return done(adapter); } } else { return done(adapter); } } };
models.forEach(function (m) { var name = m.ctorName , filePath = m.filePath , adapterInfo , adapterPath , adapterName , adapterCtor , adapter , config; require(filePath); // If the model doesn't exist, something is f****d up if (!model[name]) { throw new Error('Model ' + name + ' did not get registered properly.'); } adapterName = model[name].adapter; // Is there a specific adapter defined for this model item? if (adapterName) { // See if it's a custom in-app adapter adapterPath = _getAdapterPath(appAdaptersPath, adapterName); // Try again, see if there's a built-in adapter if (!adapterPath) { adapterInfo = model.getAdapterInfo(adapterName); if (adapterInfo) { adapterName = adapterInfo.name; adapterPath = _getAdapterPath(builtinAdaptersPath, adapterInfo.filePath); } } } else { // Look for a default adapter adapterName = model.defaultAdapter; if (adapterName) { adapterInfo = model.getAdapterInfo(adapterName); if (adapterInfo) { adapterName = adapterInfo.name; adapterPath = _getAdapterPath(builtinAdaptersPath, adapterInfo.filePath); } } } // No adapter, log an error if (!adapterPath) { geddy.log.info('Model adapter not found for ' + name + '. Set .adapter for this model, or set model.defaultAdapter.'); } else { adapter = model.loadedAdapters[adapterName]; if (!adapter) { config = _getAdapterConfig(geddy.config.db, adapterName); adapterCtor = require(adapterPath).Adapter; adapter = new adapterCtor(config); if (typeof adapter.connect == 'function') { adapter.connect(); } model.loadedAdapters[name] = adapter; } model.adapters[name] = adapter; } });