Simple Flag-Builder
by plus5keen
JavaScript
(function (global, _) {
'use strict';
function _buildFlags(result, names) {
if (!names) { return result; }
if (_.isArray(names) || _.isArguments(names)) {
return _.reduce(names, function (memo, name) {
return _buildFlags(memo, name);
}, result);
}
result[names] = true;
return result;
}
global.buildFlags = function (flags) {
return _buildFlags({}, flags);
};
}(this, this._));
(function (buildFlags, _) {
function doStuff(value) {
var flags = buildFlags(_.rest(arguments));
if (flags.log) {
console.log(value);
}
if (flags.ret) {
return value;
}
}
doStuff('lost forever');
doStuff('first logged', 'log');
doStuff('second', 'log');
console.log(doStuff('third logged; logged after return', 'ret'));
console.log(doStuff('fourth and fifth; logged before and after return', ['ret', 'log']));
console.log(doStuff('sixth and seventh; logged before and after return', ['ret', 'log']));
console.log(doStuff('eighth and ninth; logged before and after return', 'ret', [['log']]));
}(this.buildFlags, this._));