From d77fd0ee656dcb741e6594738d2e38e66328abfc Mon Sep 17 00:00:00 2001 From: brianc Date: Wed, 10 Nov 2010 21:45:39 -0600 Subject: [PATCH] ability to init connection with url instead of config object --- lib/client.js | 14 ++++++++++++++ test/unit/client/connection-string-tests.js | 21 +++++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 test/unit/client/connection-string-tests.js diff --git a/lib/client.js b/lib/client.js index 935c8878..da229421 100644 --- a/lib/client.js +++ b/lib/client.js @@ -2,13 +2,27 @@ var sys = require('sys'); var net = require('net'); var crypto = require('crypto'); var EventEmitter = require('events').EventEmitter; +var url = require('url'); var Query = require(__dirname + '/query'); var utils = require(__dirname + '/utils'); var Connection = require(__dirname + '/connection'); +var parseConnectionString = function(str) { + var result = url.parse(str); + result.host = result.hostname; + result.database = result.pathname.slice(1); + var auth = (result.auth || ':').split(':'); + result.user = auth[0]; + result.password = auth[1]; + return result; +}; + var Client = function(config) { EventEmitter.call(this); + if(typeof config === 'string') { + config = parseConnectionString(config) + } config = config || {}; this.user = config.user; this.database = config.database; diff --git a/test/unit/client/connection-string-tests.js b/test/unit/client/connection-string-tests.js new file mode 100644 index 00000000..5c08a0fd --- /dev/null +++ b/test/unit/client/connection-string-tests.js @@ -0,0 +1,21 @@ +require(__dirname + '/test-helper'); + +test("using connection string in client constructor", function() { + var client = new Client("postgres://brian:pw@boom:381/lala"); + test("parses user", function() { + assert.equal(client.user,'brian'); + }) + test("parses password", function() { + assert.equal(client.password, 'pw'); + }) + test("parses host", function() { + assert.equal(client.host, 'boom'); + }) + test('parses port', function() { + assert.equal(client.port, 381) + }) + test('parses database', function() { + assert.equal(client.database, 'lala') + }) +}) +