12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- var cJSON = require('circular-json')
- , _ = require('lodash') // Don't require Utils here, as it creates a circular dependency
- var ParameterValidator = module.exports = {
- check: function(value, expectation, options) {
- options = _.extend({
- throwError: true,
- deprecated: false,
- deprecationWarning: generateDeprecationWarning(value, expectation, options),
- onDeprecated: function(s) { console.log('DEPRECATION WARNING:', s) },
- index: null,
- method: null,
- optional: false
- }, options || {})
- if (options.optional && ((value === undefined) || (value === null)) ) {
- return true
- }
- if (value === undefined) {
- throw new Error('No value has been passed.')
- }
- if (expectation === undefined) {
- throw new Error('No expectation has been passed.')
- }
- return false
- || validateDeprication(value, expectation, options)
- || validate(value, expectation, options)
- }
- }
- var generateDeprecationWarning = function(value, expectation, options) {
- options = options || {}
- if (options.method && options.index) {
- return [
- 'The',
- {1:'first',2:'second',3:'third',4:'fourth',5:'fifth'}[options.index],
- 'parameter of',
- options.method,
- 'should be a',
- extractClassName(expectation) + '!'
- ].join(" ")
- } else {
- return ["Expected", cJSON.stringify(value), "to be", extractClassName(expectation) + '!'].join(" ")
- }
- }
- var matchesExpectation = function(value, expectation) {
- if (typeof expectation === 'string') {
- return (typeof value === expectation.toString())
- } else {
- return (value instanceof expectation)
- }
- }
- var validateDeprication = function(value, expectation, options) {
- if (options.deprecated) {
- if (matchesExpectation(value, options.deprecated)) {
- options.onDeprecated(options.deprecationWarning)
- return true
- }
- }
- }
- var validate = function(value, expectation, options) {
- var result = matchesExpectation(value, expectation)
- if (result) {
- return result
- } else if (!options.throwError) {
- return false
- } else {
- var _value = (value === null) ? 'null' : value.toString()
- , _expectation = extractClassName(expectation)
- throw new Error('The parameter (value: ' + _value + ') is no ' + _expectation + '.')
- }
- }
- var extractClassName = function(o) {
- if (typeof o === 'string') {
- return o
- } else if (!!o) {
- return o.toString().match(/function ([^\(]+)/)[1]
- } else {
- return 'undefined'
- }
- }
|