[fix test] Update to respected .sources
option correctly
This commit is contained in:
parent
bbcb2712f1
commit
f4f1fdf464
4 changed files with 68 additions and 21 deletions
|
@ -15,8 +15,6 @@ var async = require('async'),
|
||||||
// for exposing the pluggable storage features of `nconf`.
|
// for exposing the pluggable storage features of `nconf`.
|
||||||
//
|
//
|
||||||
var Provider = exports.Provider = function (options) {
|
var Provider = exports.Provider = function (options) {
|
||||||
var self = this;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Setup default options for working with `stores`,
|
// Setup default options for working with `stores`,
|
||||||
// `overrides`, `process.env` and `process.argv`.
|
// `overrides`, `process.env` and `process.argv`.
|
||||||
|
@ -132,7 +130,15 @@ Provider.prototype.create = function (type, options) {
|
||||||
return new (require('../nconf')[common.capitalize(type.toLowerCase())])(options);
|
return new (require('../nconf')[common.capitalize(type.toLowerCase())])(options);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// ### function init (options)
|
||||||
|
// #### @options {Object} Options to initialize this instance with.
|
||||||
|
// Initializes this instance with additional `stores` or `sources` in the
|
||||||
|
// `options` supplied.
|
||||||
|
//
|
||||||
Provider.prototype.init = function (options) {
|
Provider.prototype.init = function (options) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Add any stores passed in through the options
|
// Add any stores passed in through the options
|
||||||
// to this instance.
|
// to this instance.
|
||||||
|
@ -281,8 +287,13 @@ Provider.prototype.merge = function () {
|
||||||
// Responds with an Object representing all keys associated in this instance.
|
// Responds with an Object representing all keys associated in this instance.
|
||||||
//
|
//
|
||||||
Provider.prototype.load = function (callback) {
|
Provider.prototype.load = function (callback) {
|
||||||
var self = this,
|
var self = this;
|
||||||
stores = Object.keys(this.stores).map(function (name) { return self.stores[name] });
|
|
||||||
|
function getStores () {
|
||||||
|
return Object.keys(self.stores).map(function (name) {
|
||||||
|
return self.stores[name];
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function loadStoreSync(store) {
|
function loadStoreSync(store) {
|
||||||
if (!store.loadSync) {
|
if (!store.loadSync) {
|
||||||
|
@ -318,8 +329,9 @@ Provider.prototype.load = function (callback) {
|
||||||
// the system store.
|
// the system store.
|
||||||
//
|
//
|
||||||
if (data && typeof data === 'object') {
|
if (data && typeof data === 'object') {
|
||||||
Object.keys(data).forEach(function (key) {
|
self.use('sources', {
|
||||||
self.system.merge(key, data[key]);
|
type: 'literal',
|
||||||
|
store: data
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -332,7 +344,7 @@ Provider.prototype.load = function (callback) {
|
||||||
//
|
//
|
||||||
if (!callback) {
|
if (!callback) {
|
||||||
mergeSources(loadBatch(self.sources));
|
mergeSources(loadBatch(self.sources));
|
||||||
return loadBatch(stores);
|
return loadBatch(getStores());
|
||||||
}
|
}
|
||||||
|
|
||||||
loadBatch(self.sources, function (err, data) {
|
loadBatch(self.sources, function (err, data) {
|
||||||
|
@ -341,13 +353,13 @@ Provider.prototype.load = function (callback) {
|
||||||
}
|
}
|
||||||
|
|
||||||
mergeSources(data);
|
mergeSources(data);
|
||||||
return loadBatch(stores, callback);
|
return loadBatch(getStores(), callback);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
return self.sources.length
|
return self.sources.length
|
||||||
? loadSources()
|
? loadSources()
|
||||||
: loadBatch(stores, callback);
|
: loadBatch(getStores(), callback);
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -369,18 +381,24 @@ Provider.prototype.save = function (value, callback) {
|
||||||
function saveStoreSync(name) {
|
function saveStoreSync(name) {
|
||||||
var store = self.stores[name];
|
var store = self.stores[name];
|
||||||
|
|
||||||
if (!store.saveSync) {
|
//
|
||||||
throw new Error('nconf store ' + store.type + ' has no saveSync() method');
|
// If the `store` doesn't have a `saveSync` method,
|
||||||
}
|
// just ignore it and continue.
|
||||||
|
//
|
||||||
return store.saveSync();
|
return store.saveSync
|
||||||
|
? store.saveSync()
|
||||||
|
: null;
|
||||||
}
|
}
|
||||||
|
|
||||||
function saveStore(name, next) {
|
function saveStore(name, next) {
|
||||||
var store = self.stores[name];
|
var store = self.stores[name];
|
||||||
|
|
||||||
|
//
|
||||||
|
// If the `store` doesn't have a `save` or saveSync`
|
||||||
|
// method(s), just ignore it and continue.
|
||||||
|
//
|
||||||
if (!store.save && !store.saveSync) {
|
if (!store.save && !store.saveSync) {
|
||||||
return next(new Error('nconf store ' + store.type + ' has no save() method'));
|
return next();
|
||||||
}
|
}
|
||||||
|
|
||||||
return store.saveSync
|
return store.saveSync
|
||||||
|
|
|
@ -8,13 +8,22 @@
|
||||||
var util = require('util'),
|
var util = require('util'),
|
||||||
Memory = require('./memory').Memory
|
Memory = require('./memory').Memory
|
||||||
|
|
||||||
var Literal = exports.Literal = function Literal (store) {
|
var Literal = exports.Literal = function Literal (options) {
|
||||||
Memory.call(this);
|
Memory.call(this, options);
|
||||||
|
|
||||||
|
options = options || {}
|
||||||
this.type = 'literal';
|
this.type = 'literal';
|
||||||
this.readOnly = true;
|
this.readOnly = true;
|
||||||
this.store = store || {};
|
this.store = options.store || {};
|
||||||
};
|
};
|
||||||
|
|
||||||
// Inherit from Memory store.
|
// Inherit from Memory store.
|
||||||
util.inherits(Literal, Memory);
|
util.inherits(Literal, Memory);
|
||||||
|
|
||||||
|
//
|
||||||
|
// ### function loadSync (callback)
|
||||||
|
// Returns the data stored in `this.store` synchronously.
|
||||||
|
//
|
||||||
|
Literal.prototype.loadSync = function () {
|
||||||
|
return this.store;
|
||||||
|
};
|
|
@ -73,6 +73,23 @@ vows.describe('nconf/provider').addBatch({
|
||||||
provider.merge(override);
|
provider.merge(override);
|
||||||
helpers.assertMerged(null, provider.stores.file.store);
|
helpers.assertMerged(null, provider.stores.file.store);
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"when sources are passed in": {
|
||||||
|
topic: new nconf.Provider({
|
||||||
|
sources: {
|
||||||
|
user: {
|
||||||
|
type: 'file',
|
||||||
|
file: files[0]
|
||||||
|
},
|
||||||
|
global: {
|
||||||
|
type: 'file',
|
||||||
|
file: files[1]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
"should have the result merged in": function (provider) {
|
||||||
|
helpers.assertMerged(null, provider.load());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,14 +13,17 @@ var vows = require('vows'),
|
||||||
vows.describe('nconf/stores/literal').addBatch({
|
vows.describe('nconf/stores/literal').addBatch({
|
||||||
"An instance of nconf.Literal": {
|
"An instance of nconf.Literal": {
|
||||||
topic: new nconf.Literal({
|
topic: new nconf.Literal({
|
||||||
|
store: {
|
||||||
foo: 'bar',
|
foo: 'bar',
|
||||||
one: 2
|
one: 2
|
||||||
|
}
|
||||||
}),
|
}),
|
||||||
"should have the correct methods defined": function (literal) {
|
"should have the correct methods defined": function (literal) {
|
||||||
assert.equal(literal.type, 'literal');
|
assert.equal(literal.type, 'literal');
|
||||||
assert.isFunction(literal.get);
|
assert.isFunction(literal.get);
|
||||||
assert.isFunction(literal.set);
|
assert.isFunction(literal.set);
|
||||||
assert.isFunction(literal.merge);
|
assert.isFunction(literal.merge);
|
||||||
|
assert.isFunction(literal.loadSync);
|
||||||
},
|
},
|
||||||
"should have the correct values in the store": function (literal) {
|
"should have the correct values in the store": function (literal) {
|
||||||
assert.equal(literal.store.foo, 'bar');
|
assert.equal(literal.store.foo, 'bar');
|
||||||
|
|
Loading…
Reference in a new issue