Bring back settingsdb.js

config.js is now meant for instance level data ie data for specific
cloudron instance. The sqlite database is meant for data that is
needed across restores.
This commit is contained in:
Girish Ramakrishnan
2014-10-22 08:02:30 -07:00
parent 18b2389315
commit ac8341cb2d
2 changed files with 92 additions and 0 deletions
+53
View File
@@ -0,0 +1,53 @@
/* jslint node:true */
'use strict';
var DatabaseError = require('./databaseerror'),
debug = require('debug')('box:settingsdb'),
assert = require('assert'),
database = require('./database.js');
exports = module.exports = {
get: get,
getAll: getAll,
set: set,
NAKED_DOMAIN_KEY: 'naked_domain'
};
function get(key, callback) {
assert(typeof key === 'string');
assert(typeof callback === 'function');
database.get('SELECT * FROM settings WHERE key = ?', [ key ], function (error, result) {
if (error) return callback(new DatabaseError(error, DatabaseError.INTERNAL_ERROR));
if (typeof result === 'undefined') return callback(new DatabaseError(null, DatabaseError.NOT_FOUND));
callback(null, result.value);
});
}
function getAll(callback) {
database.all('SELECT * FROM settings', function (error, result) {
if (error) return callback(new DatabaseError(error, DatabaseError.INTERNAL_ERROR));
if (typeof result === 'undefined') result = [ ];
callback(null, result);
});
}
function set(key, value, callback) {
assert(typeof key === 'string');
assert(value === null || typeof value === 'string');
assert(typeof callback === 'function');
// sqlite does not have upsert
database.run('INSERT OR REPLACE INTO settings (key, value) VALUES (?, ?)', [ key, value ], function (error) {
if (error || this.changes !== 1) return callback(new DatabaseError(error, DatabaseError.INTERNAL_ERROR));
callback(null);
});
}
+39
View File
@@ -11,6 +11,7 @@ var database = require('../database'),
tokendb = require('../tokendb.js'),
clientdb = require('../clientdb.js'),
authcodedb = require('../authcodedb.js'),
settingsdb = require('../settingsdb.js'),
appdb = require('../appdb.js'),
expect = require('expect.js'),
mkdirp = require('mkdirp'),
@@ -598,5 +599,43 @@ describe('database', function () {
});
});
});
describe('settings', function () {
it('can set value', function (done) {
settingsdb.set('somekey', 'somevalue', function (error) {
expect(error).to.be(null);
done();
});
});
it('can get the set value', function (done) {
settingsdb.get('somekey', function (error, value) {
expect(error).to.be(null);
expect(value).to.be('somevalue');
done();
});
});
it('can get all values', function (done) {
settingsdb.getAll(function (error, result) {
expect(error).to.be(null);
expect(result).to.be.an(Array);
expect(result[0]).to.eql({ key: 'somekey', value: 'somevalue' });
done();
});
});
it('can update a value', function (done) {
settingsdb.set('somekey', 'someothervalue', function (error) {
expect(error).to.be(null);
done();
});
});
it('can get updated value', function (done) {
settingsdb.get('somekey', function (error, value) {
expect(error).to.be(null);
expect(value).to.be('someothervalue');
done();
});
});
});
});