assert-types
Version:
A small JavaScript library for arguments assertion
13 lines • 3.61 kB
JavaScript
/*
* -------------------------------------------------------
* Project: assert-types.js
* Version: 0.2.0
*
* Author: Alexander Suevalov
* Site: http://suevalov.com
* Contact: suevalov.me@gmail.com
*
* Copyright (c) 2014 Alexander Suevalov
* -------------------------------------------------------
*/
!function(a,b){if("function"==typeof define&&define.amd)define(["underscore","exports"],function(c,d){a.assertTypes=b(a,d,c)});else if("undefined"!=typeof exports){var c=require("underscore");b(a,exports,c)}else a.assertTypes=b(a,{},a._)}(this,function(a,b,c){"use strict";function d(a,b,c){var d=typeof c,e=c;if("undefined"!==d){if("function"===d&&(e=c(b)),"boolean"!=typeof e)throw"Assert condition should return boolean value";if(!e)return}a()}var e=function(a,b,e,f){d(function(){if(!a(e))throw new Error(c.template(b,{value:JSON.stringify(e)}))},e,f)};return b.number=function(a,b){e(function(a){return c.isNumber(a)},"Expect <%= value %> to be a number",a,b)},b.numberPositive=function(a,b){e(function(a){return c.isNumber(a)&&a>0},"Expect <%= value %> to be a positive number",a,b)},b.numberNegative=function(a,b){e(function(a){return c.isNumber(a)&&0>a},"Expect <%= value %> to be a negative number",a,b)},b.numberOdd=function(a,b){e(function(a){return c.isNumber(a)&&a%2===1},"Expect <%= value %> to be a odd number",a,b)},b.numberEven=function(a,b){e(function(a){return c.isNumber(a)&&a%2===0},"Expect <%= value %> to be a even number",a,b)},b.numberInt=function(a,b){e(function(a){return c.isNumber(a)&&a%1===0},"Expect <%= value %> to be a int number",a,b)},b.numberFloat=function(a,b){e(function(a){return c.isNumber(a)&&a%1!==0},"Expect <%= value %> to be a float number",a,b)},b.numberRange=function(a,b,e,f){d(function(){if(!(c.isNumber(a)&&a>b&&e>a))throw new Error(c.template("Expect <%= value %> to be in a [<%= minValue %>, <%= maxValue %>] range",{value:JSON.stringify(a),minValue:JSON.stringify(b),maxValue:JSON.stringify(e)}))},a,f)},b.equal=function(a,b,e){d(function(){if(!c.isEqual(a,b))throw new Error(c.template("Expect <%= value %> to equal <%= expectedValue %>",{value:JSON.stringify(a),expectedValue:JSON.stringify(b)}))},a,e)},b.bool=function(a,b){e(function(a){return c.isBoolean(a)},"Expect <%= value %> to be boolean",a,b)},b.boolTrue=function(a,b){e(function(a){return a===!0},"Expect <%= value %> to be true",a,b)},b.boolFalse=function(a,b){e(function(a){return a===!1},"Expect <%= value %> to be false",a,b)},b.object=function(a,b){e(function(a){return c.isObject(a)?c.keys(a).length>0?!0:c.isEqual(a,{}):!1},"Expect <%= value %> to be an object",a,b)},b.fn=function(a,b){e(function(a){return c.isFunction(a)},"Expect <%= value %> to be a function",a,b)},b.array=function(a,b){e(function(a){return c.isArray(a)},"Expect <%= value %> to be an array",a,b)},b.string=function(a,b){e(function(a){return c.isString(a)},"Expect <%= value %> to be a string",a,b)},b.stringNotEmpty=function(a,b){e(function(a){return c.isString(a)&&""!==a},"Expect <%= value %> to be non-empty a string",a,b)},b.instance=function(a,b,e){d(function(){if(!(a instanceof b))throw new Error(c.template("Expect <%= value %> to be an instance of <%= instance %>",{value:a,instance:b}))},a,e)},b.nulled=function(a,b){e(function(a){return null===a},"Expect <%= value %> to equal 'null'",a,b)},b.defined=function(a,b){e(function(a){return void 0!==a},"Expect <%= value %> to be defined",a,b)},b.date=function(a,b){e(function(a){return c.isDate(a)},"Expect <%= value %> to be a date object",a,b)},b.conditionIfDefined=function(a){return null!==a&&"undefined"!=typeof a},b.VERSION="0.2.0",b});