diff --git a/lib/index.js b/lib/index.js index 01258f0..39877bb 100644 --- a/lib/index.js +++ b/lib/index.js @@ -184,9 +184,18 @@ var processRef = function (property, objectName, props, key, required) { var refRegExp = /^#\/definitions\/(\w*)$/; var refString = property['$ref'] ? property['$ref'] : property['items']['$ref']; var propType = refString.match(refRegExp)[1]; + // NOT circular reference if (propType !== objectName) { - // NOT circular reference - props[key] = [getSchema(propType, definitions[propType]['properties'] ? definitions[propType]['properties'] : definitions[propType])]; + var object = definitions[propType]; + if (~['array', 'object'].indexOf(object.type)) { + var schema = getSchema(propType, object['properties'] ? object['properties'] : object); + props[key] = property['items'] || object.type === 'array' ? [schema] : schema; + } else { + var clone = _.extend({}, object); + delete clone[getMongooseProperty()]; + var schemaProp = getSchemaProperty(clone, key)[key]; + props[key] = property['items'] ? [schemaProp] : schemaProp; + } } else { // circular reference if (propType) { @@ -200,8 +209,6 @@ var processRef = function (property, objectName, props, key, required) { }; var getSchema = function (objectName, fullObject) { - - var props = {}; var required = fullObject.required || []; var object = fullObject['properties'] ? fullObject['properties'] : fullObject; @@ -298,7 +305,7 @@ module.exports.compile = function (spec, _extraDefinitions) { var schemas = {}; _.forEach(definitions, function (definition, key) { - var object = null; + var object; var options = xSwaggerMongoose.schemaOptions; var excludedSchema = xSwaggerMongoose.excludeSchema; var documentIndex = xSwaggerMongoose.documentIndex[key];