dfcreative/define-state

View on GitHub
index.js

Summary

Maintainability
A
25 mins
Test Coverage
/**
 * Define stateful property on an object
 */
module.exports = defineState;

var State = require('st8');
    State.ENTER = 'before'
    State.EXIT = 'after'

/**
 * Define stateful property on a target
 *
 * @param {object} target Any object
 * @param {string} property Property name
 * @param {object} descriptor State descriptor
 *
 * @return {object} target
 */
function defineState (target, property, descriptor, isFn) {
    //define accessor on a target
    if (isFn) {
        target[property] = function () {
            if (arguments.length) {
                return state.set(arguments[0]);
            }
            else {
                return state.get();
            }
        };
    }

    //define setter/getter on a target
    else {
        Object.defineProperty(target, property, {
            set: function (value) {
                return state.set(value);
            },
            get: function () {
                return state.get();
            }
        });
    }

    //define state controller
    var state = new State(descriptor, target);

    return target;
}