API Docs for:
Show:

File: lib\DesignByContract.js

var util = require('util');

var _ = require('underscore');
/**
 * 契约式设计。
 * 
 * @static
 * @class DesignByContract
 */
var DesignByContract = module.exports = {

    /**
     * 指定名称的变量必须已经定义,否则抛出异常。
     *
     * @static
     * @method mustBeDefined
     * @param {String} variableName 变量名
     * @param {String} variableValue 值
     * @return {DesignByContract}
     * @example
        readAll: function (callback) {
            var me = this;
            dbc.mustBeDefined('callback', callback);

            return readAll(me.getOptions(), callback);
        }
     */
    mustBeDefined: function (variableName, variableValue) {
        if (_.isUndefined(variableValue)) {
            var message = util.format('变量 (%s) 必须已经定义', variableName);

            throw new Error(message);
        }

        return this;
    },

    /**
     * 指定名称的变量必须是函数类型,否则抛出异常。
     *
     * @static
     * @method mustBeAFunction
     * @param {String} variableName 变量名
     * @param {Function} variableValue 值
     * @return {DesignByContract}
     * @example
        readAll: function (callback) {
            var me = this;
            dbc.mustBeDefined('callback', callback);
            dbc.mustBeAFunction('callback', callback);

            return readAll(me.getOptions(), callback);
        }
     */
    mustBeAFunction: function (variableName, variableValue) {
        var me = this;

        if (!_.isFunction(variableValue)) {
            var message = util.format('变量 (%s) 必须是函数类型', fnVariableName);

            throw new Error(message);
        }

        return this;
    }
};