swagger-tools
Advanced tools
Comparing version 0.9.16 to 0.10.0
@@ -165,1 +165,136 @@ /* | ||
}; | ||
var convertValue = module.exports.convertValue = function (value, schema, type) { | ||
var original = value; | ||
// Default to {} | ||
if (_.isUndefined(schema)) { | ||
schema = {}; | ||
} | ||
// Try to find the type or default to 'object' | ||
if (_.isUndefined(type)) { | ||
type = getParameterType(schema); | ||
} | ||
// If there is no value, do not convert it | ||
if (_.isUndefined(value)) { | ||
return value; | ||
} | ||
// If there is an empty value and allowEmptyValue is true, return it | ||
if (schema.allowEmptyValue && value === '') { | ||
return value; | ||
} | ||
switch (type) { | ||
case 'array': | ||
if (_.isString(value)) { | ||
switch (schema.collectionFormat) { | ||
case 'csv': | ||
case undefined: | ||
try { | ||
value = JSON.parse(value); | ||
} catch (err) { | ||
value = original; | ||
} | ||
if (_.isString(value)) { | ||
value = value.split(','); | ||
} | ||
break; | ||
case 'multi': | ||
value = [value]; | ||
break; | ||
case 'pipes': | ||
value = value.split('|'); | ||
break; | ||
case 'ssv': | ||
value = value.split(' '); | ||
break; | ||
case 'tsv': | ||
value = value.split('\t'); | ||
break; | ||
} | ||
} | ||
// Handle situation where the expected type is array but only one value was provided | ||
if (!_.isArray(value)) { | ||
value = [value]; | ||
} | ||
value = _.map(value, function (item, index) { | ||
var iSchema = _.isArray(schema.items) ? schema.items[index] : schema.items; | ||
return convertValue(item, iSchema, iSchema ? iSchema.type : undefined); | ||
}); | ||
break; | ||
case 'boolean': | ||
if (!_.isBoolean(value)) { | ||
if (['false', 'true'].indexOf(value) === -1) { | ||
value = original; | ||
} else { | ||
value = value === 'true' || value === true ? true : false; | ||
} | ||
} | ||
break; | ||
case 'integer': | ||
if (!_.isNumber(value)) { | ||
if (_.isString(value) && _.trim(value).length === 0) { | ||
value = NaN; | ||
} | ||
value = Number(value); | ||
if (isNaN(value)) { | ||
value = original; | ||
} | ||
} | ||
break; | ||
case 'number': | ||
if (!_.isNumber(value)) { | ||
if (_.isString(value) && _.trim(value).length === 0) { | ||
value = NaN; | ||
} | ||
value = Number(value); | ||
if (isNaN(value)) { | ||
value = original; | ||
} | ||
} | ||
break; | ||
case 'object': | ||
if (_.isString(value)) { | ||
try { | ||
value = JSON.parse(value); | ||
} catch (err) { | ||
value = original; | ||
} | ||
} | ||
break; | ||
case 'string': | ||
if (['date', 'date-time'].indexOf(schema.format) > -1 && !_.isDate(value)) { | ||
value = new Date(value); | ||
if (!_.isDate(value) || value.toString() === 'Invalid Date') { | ||
value = original; | ||
} | ||
} | ||
break; | ||
} | ||
return value; | ||
}; |
@@ -113,111 +113,2 @@ /* | ||
var convertValue = function (value, schema, type) { | ||
var original = value; | ||
// Default to {} | ||
if (_.isUndefined(schema)) { | ||
schema = {}; | ||
} | ||
// Try to find the type or default to 'object' | ||
if (_.isUndefined(type)) { | ||
type = mHelpers.getParameterType(schema); | ||
} | ||
// If there is no value, do not convert it | ||
if (_.isUndefined(value)) { | ||
return value; | ||
} | ||
// If there is an empty value and allowEmptyValue is true, return it | ||
if (schema.allowEmptyValue && value === '') { | ||
return value; | ||
} | ||
switch (type) { | ||
case 'array': | ||
if (_.isString(value)) { | ||
switch (schema.collectionFormat) { | ||
case 'csv': | ||
case undefined: | ||
value = value.split(','); | ||
break; | ||
case 'multi': | ||
value = [value]; | ||
break; | ||
case 'pipes': | ||
value = value.split('|'); | ||
break; | ||
case 'ssv': | ||
value = value.split(' '); | ||
break; | ||
case 'tsv': | ||
value = value.split('\t'); | ||
break; | ||
} | ||
} | ||
value = _.map(value, function (item, index) { | ||
return convertValue(item, _.isArray(schema.items) ? schema.items[index] : schema.items); | ||
}); | ||
break; | ||
case 'boolean': | ||
if (!_.isBoolean(value)) { | ||
if (['false', 'true'].indexOf(value) === -1) { | ||
value = original; | ||
} else { | ||
value = value === 'true' || value === true ? true : false; | ||
} | ||
} | ||
break; | ||
case 'integer': | ||
if (!_.isNumber(value)) { | ||
if (_.isString(value) && _.trim(value).length === 0) { | ||
value = NaN; | ||
} | ||
value = Number(value); | ||
if (isNaN(value)) { | ||
value = original; | ||
} | ||
} | ||
break; | ||
case 'number': | ||
if (!_.isNumber(value)) { | ||
if (_.isString(value) && _.trim(value).length === 0) { | ||
value = NaN; | ||
} | ||
value = Number(value); | ||
if (isNaN(value)) { | ||
value = original; | ||
} | ||
} | ||
break; | ||
case 'string': | ||
if (['date', 'date-time'].indexOf(schema.format) > -1 && !_.isDate(value)) { | ||
value = new Date(value); | ||
if (!_.isDate(value) || value.toString() === 'Invalid Date') { | ||
value = original; | ||
} | ||
} | ||
break; | ||
} | ||
return value; | ||
}; | ||
var processOperationParameters = function (swaggerMetadata, pathKeys, pathMatch, req, res, next) { | ||
@@ -320,3 +211,3 @@ var version = swaggerMetadata.swaggerVersion; | ||
oVal = mHelpers.getParameterValue(version, parameter, pathKeys, pathMatch, req, debug); | ||
value = convertValue(oVal, _.isUndefined(parameter.schema) ? parameter : parameter.schema, pType); | ||
value = mHelpers.convertValue(oVal, _.isUndefined(parameter.schema) ? parameter : parameter.schema, pType); | ||
@@ -323,0 +214,0 @@ debug(' Value: %s', value); |
@@ -116,2 +116,4 @@ /* | ||
val = mHelpers.convertValue(val, schema, mHelpers.getParameterType(schema)); | ||
try { | ||
@@ -118,0 +120,0 @@ validators.validateSchemaConstraints(version, schema, path, val); |
{ | ||
"name": "swagger-tools", | ||
"version": "0.9.16", | ||
"version": "0.10.0", | ||
"description": "Various tools for using and integrating with Swagger.", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
3664096
42255