[minor] Dont allow .set()
calls to change values in readOnly stores: argv, env, and literal
This commit is contained in:
parent
1aa2f1f315
commit
78ce55602f
4 changed files with 27 additions and 9 deletions
|
@ -62,7 +62,7 @@ var Provider = exports.Provider = function (options) {
|
||||||
['defaults', 'overrides'].forEach(function (type) {
|
['defaults', 'overrides'].forEach(function (type) {
|
||||||
Provider.prototype[type] = function (options) {
|
Provider.prototype[type] = function (options) {
|
||||||
return this.add('literal', options);
|
return this.add('literal', options);
|
||||||
}
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
//
|
//
|
||||||
|
@ -399,19 +399,24 @@ Provider.prototype.save = function (value, callback) {
|
||||||
Provider.prototype._execute = function (action, syncLength /* [arguments] */) {
|
Provider.prototype._execute = function (action, syncLength /* [arguments] */) {
|
||||||
var args = Array.prototype.slice.call(arguments, 2),
|
var args = Array.prototype.slice.call(arguments, 2),
|
||||||
callback = typeof args[args.length - 1] === 'function' && args.pop(),
|
callback = typeof args[args.length - 1] === 'function' && args.pop(),
|
||||||
|
destructive = ['set', 'clear', 'merge'].indexOf(action) !== -1,
|
||||||
self = this,
|
self = this,
|
||||||
response;
|
response;
|
||||||
|
|
||||||
function runAction (name, next) {
|
function runAction (name, next) {
|
||||||
var store = self.sources[name];
|
var store = self.sources[name];
|
||||||
|
|
||||||
|
if (destructive && store.readOnly) {
|
||||||
|
return next();
|
||||||
|
}
|
||||||
|
|
||||||
return store[action].length > syncLength
|
return store[action].length > syncLength
|
||||||
? store[action].apply(store, args.concat(next))
|
? store[action].apply(store, args.concat(next))
|
||||||
: next(null, store[action].apply(store, args));
|
: next(null, store[action].apply(store, args));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (callback) {
|
if (callback) {
|
||||||
return async.forEach(Object.keys(self.sources), runAction, function (err) {
|
return async.forEach(Object.keys(this.sources), runAction, function (err) {
|
||||||
return err ? callback(err) : callback();
|
return err ? callback(err) : callback();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -420,6 +425,11 @@ Provider.prototype._execute = function (action, syncLength /* [arguments] */) {
|
||||||
Object.keys(this.sources).forEach(function (name) {
|
Object.keys(this.sources).forEach(function (name) {
|
||||||
if (typeof response === 'undefined') {
|
if (typeof response === 'undefined') {
|
||||||
var store = self.sources[name];
|
var store = self.sources[name];
|
||||||
|
|
||||||
|
if (destructive && store.readOnly) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
response = store[action].apply(store, args);
|
response = store[action].apply(store, args);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -18,8 +18,9 @@ var util = require('util'),
|
||||||
var Argv = exports.Argv = function (options) {
|
var Argv = exports.Argv = function (options) {
|
||||||
Memory.call(this, options);
|
Memory.call(this, options);
|
||||||
|
|
||||||
this.type = 'argv';
|
this.type = 'argv';
|
||||||
this.options = options || false;
|
this.readOnly = true;
|
||||||
|
this.options = options || false;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Inherit from the Memory store
|
// Inherit from the Memory store
|
||||||
|
@ -51,9 +52,11 @@ Argv.prototype.loadArgv = function () {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
this.readOnly = false;
|
||||||
Object.keys(argv).forEach(function (key) {
|
Object.keys(argv).forEach(function (key) {
|
||||||
self.set(key, argv[key]);
|
self.set(key, argv[key]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.readOnly = true;
|
||||||
return this.store;
|
return this.store;
|
||||||
};
|
};
|
|
@ -17,8 +17,9 @@ var util = require('util'),
|
||||||
var Env = exports.Env = function (options) {
|
var Env = exports.Env = function (options) {
|
||||||
Memory.call(this, options);
|
Memory.call(this, options);
|
||||||
|
|
||||||
this.type = 'env';
|
this.type = 'env';
|
||||||
this.options = options || [];
|
this.readOnly = true;
|
||||||
|
this.options = options || [];
|
||||||
};
|
};
|
||||||
|
|
||||||
// Inherit from the Memory store
|
// Inherit from the Memory store
|
||||||
|
@ -40,12 +41,14 @@ Env.prototype.loadSync = function () {
|
||||||
Env.prototype.loadEnv = function () {
|
Env.prototype.loadEnv = function () {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
this.readOnly = false;
|
||||||
Object.keys(process.env).filter(function (key) {
|
Object.keys(process.env).filter(function (key) {
|
||||||
return !self.options.length || self.options.indexOf(key) !== -1;
|
return !self.options.length || self.options.indexOf(key) !== -1;
|
||||||
}).forEach(function (key) {
|
}).forEach(function (key) {
|
||||||
self.set(key, process.env[key]);
|
self.set(key, process.env[key]);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
this.readOnly = true;
|
||||||
return this.store;
|
return this.store;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,10 @@ var util = require('util'),
|
||||||
|
|
||||||
var Literal = exports.Literal = function Literal (store) {
|
var Literal = exports.Literal = function Literal (store) {
|
||||||
Memory.call(this);
|
Memory.call(this);
|
||||||
this.type = 'literal'
|
|
||||||
this.store = store || {};
|
this.type = 'literal';
|
||||||
|
this.readOnly = true;
|
||||||
|
this.store = store || {};
|
||||||
};
|
};
|
||||||
|
|
||||||
// Inherit from Memory store.
|
// Inherit from Memory store.
|
||||||
|
|
Loading…
Reference in a new issue