updated github path
[oweals/finalsclub.git] / db.js
1 /* vim: set ts=2: */
2
3 var url         = require( 'url' );
4
5 var mongo       = require( 'mongodb' );
6
7 module.exports.open = function( uri, callback ) {
8         if( ! uri ) {
9                 throw new Error( 'No URI defined!' );
10         }
11
12         var parsed                      = url.parse( uri );
13         var path                                = parsed.pathname.split( '/' );
14
15         var port                                = parsed.port || 27017;
16         var host                                = parsed.hostname || 'localhost';
17
18         var db                                  = path[ 1 ];
19         var collection  = path[ 2 ];
20
21         if( parsed.auth ) {
22                 var auth = parsed.auth.split( ':' );
23
24                 var username = auth[ 0 ];
25                 var password = auth[ 1 ];
26         }
27
28         if( ! db ) {
29                 throw new Error( 'Unable to parse database name!' );
30         }
31
32         var server              = new mongo.Server( host, port, { auto_reconnect : true } );
33         var database    = new mongo.Db( db, server );
34
35         database.open( function( err, database ) {
36                 // XXX: add authentication
37
38                 if( err ) {
39                         callback( err );
40                 } else {
41                         // do we want to open a specific collection? otherwise just return DB
42                         if( ! collection ) {
43                                 callback( null, database );
44                         } else {
45                                 database.createCollection( collection, function( err, c ) {     
46                                         if( err ) {
47                                                 callback( err );
48                                         } else {
49                                                 callback( null, c );
50                                         }
51                                 });
52                         }
53                 }       
54         });
55 }