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;
}
};