objectInterface.js
function objectInterface(config) {
    return function(obj) {
        var result = {};

        for (var i = 0; i < config.length; i++) {
            var OR, NEXT, REAL;

            if ((OR = config[i].split('/')) && OR[1]) {
                result[OR[0]] = obj[OR[0]] || Function('return ' + OR[1])();
            }
            else if ((NEXT = config[i].split('|')) && NEXT[1]) {
                result[NEXT[0]] = Function('return ' + NEXT[1]).call(obj);
            }
            else if ((REAL = config[i].split(':')) && REAL[1]) {
                result[REAL[0]] = Function('return ' + REAL[1])();
            }
            else {
                result[config[i]] = obj[config[i]];
            }
        }

        return result;
    }
}
function objectInterface(config) {
    return function(obj) {
        var result = {};

        for (var i = 0; i < config.length; i++) {
            var OR, NEXT, REAL;

            if ((OR = config[i].split('/')) && OR[1]) {
                result[OR[0]] = obj[OR[0]] || Function('return ' + OR[1])();
            }
            else if ((NEXT = config[i].split('|')) && NEXT[1]) {
                result[NEXT[0]] = Function('return ' + NEXT[1]).call(obj);
            }
            else if ((REAL = config[i].split(':')) && REAL[1]) {
                result[REAL[0]] = Function('return ' + REAL[1])();
            }
            else {
                result[config[i]] = obj[config[i]];
            }
        }

        return result;
    }
}
Interface for building an object by configuration

@customNeeds - have an interface for building an object based on configuration

@since 2.1.0
@category Object

@param {Array} config - Keys with configuration
[
'key/value' - "OR" if no value, set value after "/",
'key|this.firstName + " " + this.lastName' - set value from the expression after "|" which is bind to the passed object,
'key:new Date()' - set value from the expression after ":"
]

@returns {Function}

@example

var email = objectInterface(['body', 'count/1', 'sender|this.firstName + " " + this.lastName', 'isRead: false', 'created: new Date()'])
// => function

email({body: 'Hello world!', count: '', firstName: 'Vasyl', lastName: 'Stokolosa', another: ''})
// => {body: "Hello world!", count: 1, created: Mon Jul 09 2018 10:31:08, isRead: false, sender: "Vasyl Stokolosa"}