From 74dcfece99ff75e36a4ea544885f7aab888a82cf Mon Sep 17 00:00:00 2001 From: Bob Pace Date: Mon, 30 Jun 2014 15:12:07 -0600 Subject: __set__ returns an 'undo' function that when invoked will restore the module to the values it had before it was called --- lib/__set__.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'lib/__set__.js') diff --git a/lib/__set__.js b/lib/__set__.js index 66e8c0a..0fa88ac 100644 --- a/lib/__set__.js +++ b/lib/__set__.js @@ -11,10 +11,12 @@ * @throws {ReferenceError} When the variable is unknown * @return {*} */ + function __set__() { arguments.varName = arguments[0]; arguments.varValue = arguments[1]; arguments.src = ""; + var snapshot = {}; if (typeof arguments[0] === "object" && arguments.length === 1) { arguments.env = arguments.varName; @@ -25,6 +27,7 @@ function __set__() { if (arguments.env.hasOwnProperty(arguments.varName)) { arguments.varValue = arguments.env[arguments.varName]; arguments.src += arguments.varName + " = arguments.env." + arguments.varName + "; "; + snapshot[arguments.varName] = eval(arguments.varName); } } } else if (typeof arguments.varName === "string" && arguments.length === 2) { @@ -32,11 +35,15 @@ function __set__() { throw new TypeError("__set__ expects a non-empty string as a variable name"); } arguments.src = arguments.varName + " = arguments.varValue;"; + snapshot[arguments.varName] = eval(arguments.varName); } else { throw new TypeError("__set__ expects an environment object or a non-empty string as a variable name"); } eval(arguments.src); + return function() { + __set__(snapshot); + }; } -module.exports = __set__; \ No newline at end of file +module.exports = __set__; -- cgit v1.2.3