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._));