From fb16f02a35658a262ee5c62be79cf018b0bc78d2 Mon Sep 17 00:00:00 2001 From: Torgny Bjers Date: Wed, 9 Oct 2013 21:52:46 -0400 Subject: [PATCH] Added progressive enhancement to adapters Will warn when an adapter is instantiated if its driver is not installed. --- lib/adapters/level/index.js | 13 ++++++++++++- lib/adapters/mongo/index.js | 13 ++++++++++++- lib/adapters/sql/postgres.js | 13 ++++++++++++- package.json | 5 +---- 4 files changed, 37 insertions(+), 7 deletions(-) diff --git a/lib/adapters/level/index.js b/lib/adapters/level/index.js index 116a9eb0..cc9d6f51 100644 --- a/lib/adapters/level/index.js +++ b/lib/adapters/level/index.js @@ -6,7 +6,7 @@ var model = require('../../index') , datatypes = require('../../datatypes') , request = utils.request , BaseAdapter = require('../base_adapter').BaseAdapter - , level = require('level') + , level = undefined , _baseConfig , _data = {} , delimiter = '!'; @@ -15,6 +15,11 @@ _baseConfig = { db: '/data/level' }; +// Progressive adapter enhancement +try { + level = require('level'); +} catch (err) {} + var Adapter = function (options) { var opts = options || {} , config; @@ -36,6 +41,12 @@ utils.mixin(Adapter.prototype, new (function () { this.init = function () { var config = this.config; + if (level === 'undefined') { + // Progressive enhancement failed, notify user + console.warn('The LevelDB driver is not installed.\nInstall it with `npm install level --save`'); + console.trace(); + process.exit(1); + } this.db = level(config.db, {keyEncoding: 'utf8', valueEncoding: 'json'}); }; diff --git a/lib/adapters/mongo/index.js b/lib/adapters/mongo/index.js index eec3a172..dd4d5f4c 100644 --- a/lib/adapters/mongo/index.js +++ b/lib/adapters/mongo/index.js @@ -1,6 +1,6 @@ var model = require('../../index') , file = require('utilities').file - , driver = require('mongodb-wrapper') + , driver = undefined , utils = require('utilities') , operation = require('../../query/operation') , comparison = require('../../query/comparison') @@ -12,6 +12,11 @@ var model = require('../../index') , _comparisonTypeMap , _collectionizeModelName; +// Progressive adapter enhancement +try { + driver = require('mongodb-wrapper'); +} catch (err) {} + _baseConfig = { username: null , dbname: null @@ -173,6 +178,12 @@ utils.mixin(Adapter.prototype, new (function () { this.init = function () { var config = this.config , args = []; + if (driver === undefined) { + // Progressive enhancement failed, notify user + console.warn('The MongoDB drivers are not installed.\nInstall them with `npm install mongodb mongodb-wrapper --save`'); + console.trace(); + process.exit(1); + } ['host', 'port', 'dbname', 'prefix', 'username', 'password'].forEach(function (c) { args.push(config[c]); diff --git a/lib/adapters/sql/postgres.js b/lib/adapters/sql/postgres.js index 0399d7b2..9e1e1c40 100644 --- a/lib/adapters/sql/postgres.js +++ b/lib/adapters/sql/postgres.js @@ -1,5 +1,5 @@ var file = require('utilities').file - , pg = require('pg') + , pg = undefined , generator = require('../../generators/sql') , utils = require('utilities') , model = require('../../index') @@ -8,6 +8,11 @@ var file = require('utilities').file , Adapter , _baseConfig; +// Progressive adapter enhancement +try { + pg = require('pg'); +} catch (err) {} + _baseConfig = { user: process.env.USER , database: process.env.USER @@ -159,6 +164,12 @@ utils.mixin(Adapter.prototype, new (function () { }; this.init = function () { + if (pg === undefined) { + // Progressive enhancement failed, notify user + console.warn('The PostgreSQL driver is not installed.\nInstall it with `npm install pg --save`'); + console.trace(); + process.exit(1); + } this.client = new pg.Client(this.config); }; diff --git a/package.json b/package.json index 68592d14..e2d4f979 100644 --- a/package.json +++ b/package.json @@ -25,10 +25,7 @@ "url": "git://github.com/mde/model.git" }, "dependencies": { - "utilities": "0.0.x", - "mongodb-wrapper": "0.4.x", - "pg": "0.9.x", - "level": "0.17.x" + "utilities": "0.0.x" }, "devDependencies": { "jake": "0.7.x"