UNPKG

@yawetse/pkgcloud

Version:

An infrastructure-as-a-service agnostic cloud library for node.js

103 lines (93 loc) 2.92 kB
/* * database.js: Database methods for working with databases from MongoHQ * * (C) 2012 Charlie Robbins, Ken Perkins, Ross Kukulinski & the Contributors. * */ var errs = require('errs'), url = require('url'); // Function formatResponse // This function parse the response from the provider and return an object // with the correct keys and values. // ### @response {Object} The body response from the provider api function formatResponse(response) { var info, user, dbname, database, auth; info = url.parse(response.config.MONGOHQ_URL); auth = encodeURIComponent(info.auth); user = auth.replace(/%3A/i, ':').split(':'); dbname = info.pathname.replace('/', ''), database = { id: response.id, port: Number(info.port), host: info.hostname, uri: 'mongodb://' + info.auth + '@' + info.host, username: decodeURIComponent(user[0]), password: decodeURIComponent(user[1]), dbname: dbname }; return database; } // Create a new Database at mongohq // Need Name and select a plan. // ### @options {Object} pair of name an plan values. // ##### @options['name'] {String} Name of the new database.(required) // ##### @options['plan'] {String} Name of the plan selected for database.(required) exports.create = function create(options, callback) { // Check for options if (!options || typeof options === 'function') { return errs.handle(errs.create({ message: 'Options required for create a database.' }), Array.prototype.slice.call(arguments).pop()); } // Check for name if (!options['name']) { return errs.handle(errs.create({ message: 'options. Name are required arguments' }), Array.prototype.slice.call(arguments).pop()); } // Check for plan if (!options['plan']) { options['plan'] = 'free'; } var createOptions = { path : 'resources', method : 'POST', body : 'app_id=' + options.name + '&plan=' + options.plan }; this._request(createOptions, function (err, b) { if (err) { return callback(err); } var body; if (typeof b !== 'object') { try { body = JSON.parse(b); } catch (e) { return errs.handle(errs.create({ messages: 'Bad response from server.' }), callback); } } else { body = b; } return callback(null, formatResponse(body)); }); }; // // Removes one mongo instance by id // ### @id {String} ID of the instance to remove. exports.remove = function remove(id, callback) { // Check for id if (!id || typeof id === 'function') { return errs.handle(errs.create({ message: 'ID is a required argument' }), Array.prototype.slice.call(arguments).pop()); } var deleteOptions = { path : 'resources/' + id, method : 'DELETE' }; this._request(deleteOptions, function (err) { return err ? callback(err) : callback(null, 'deleted'); }); };