YUKI Hiroshi
null+****@clear*****
Mon Nov 26 19:07:32 JST 2012
YUKI Hiroshi 2012-11-26 19:07:32 +0900 (Mon, 26 Nov 2012) New Revision: 759fd6bb4ae42a4331a563d7418feb93fa4a81a9 https://github.com/groonga/gcs/commit/759fd6bb4ae42a4331a563d7418feb93fa4a81a9 Log: Report both validation errors of domain and index field for Define/DeleteIndexField Modified files: lib/api/2011-02-01/configuration.js lib/database/domain.js lib/database/index-field.js lib/errors.js Modified: lib/api/2011-02-01/configuration.js (+67 -18) =================================================================== --- lib/api/2011-02-01/configuration.js 2012-11-26 18:55:01 +0900 (13cf32d) +++ lib/api/2011-02-01/configuration.js 2012-11-26 19:07:32 +0900 (0ba29a7) @@ -313,18 +313,42 @@ function createIndexFieldStatus(options) { } handlers.DefineIndexField = function(context, request, response, config) { + var validationErrors = []; + var domainName = request.query.DomainName || ''; - var domain = handleDomanValidationError(function() { - return new Domain(domainName, context).validate(); - }); - if (!domain || !domain.exists()) - throw new errors.ResourceNotFoundError('Domain not found: ' + domainName); + var domain; + try { + handleDomanValidationError(function() { + domain = new Domain(domainName, context); + domain.validate(); + }); + } catch(error) { + if (error.isMultiplexed) + validationErrors = validationErrors.concat(error.messages); + else + throw error; + } var fieldName = request.query['IndexField.IndexFieldName'] || ''; var fieldType = request.query['IndexField.IndexFieldType'] || ''; - var field = handleIndexFieldValidationError(function() { - return domain.getIndexField(fieldName).setType(fieldType).validate(); - }); + var field; + try { + handleIndexFieldValidationError(function() { + field = domain.getIndexField(fieldName).setType(fieldType); + field.validate(); + }); + } catch(error) { + if (error.isMultiplexed) + validationErrors = validationErrors.concat(error.messages); + else + throw error; + } + + if (!domain || !domain.exists()) + throw new errors.ResourceNotFoundError('Domain not found: ' + domainName); + + if (validationErrors.length) + throw new errors.MultiplexedValidationError(validationErrors); var textOptions = Object.keys(request.query).filter(function(name) { return name.indexOf('IndexField.TextOptions.') == 0; @@ -363,18 +387,43 @@ handlers.DefineIndexField = function(context, request, response, config) { }; handlers.DeleteIndexField = function(context, request, response, config) { - var domain = handleDomanValidationError(function() { - return new Domain(request.query.DomainName || '', context).validate(); - }); - if (!domain || !domain.exists()) - throw new errors.ResourceNotFoundError('Domain not found: ' + request.query.DomainName); + var validationErrors = []; + + var domainName = request.query.DomainName || ''; + var domain; + try { + handleDomanValidationError(function() { + domain = new Domain(domainName, context); + domain.validate(); + }); + } catch(error) { + if (error.isMultiplexed) + validationErrors = validationErrors.concat(error.messages); + else + throw error; + } var fieldName = request.query['IndexFieldName'] || ''; - var field = handleIndexFieldValidationError(function() { - return domain.getIndexField(fieldName).validateName(); - }, { - NAME_FIELD: 'indexFieldName' - }); + var field; + try { + handleIndexFieldValidationError(function() { + field = domain.getIndexField(fieldName); + field.validateName(); + }, { + NAME_FIELD: 'indexFieldName' + }); + } catch(error) { + if (error.isMultiplexed) + validationErrors = validationErrors.concat(error.messages); + else + throw error; + } + + if (!domain || !domain.exists()) + throw new errors.ResourceNotFoundError('Domain not found: ' + domainName); + + if (validationErrors.length) + throw new errors.MultiplexedValidationError(validationErrors); var result = null; if (field.exists()) { Modified: lib/database/domain.js (+2 -6) =================================================================== --- lib/database/domain.js 2012-11-26 18:55:01 +0900 (3717495) +++ lib/database/domain.js 2012-11-26 19:07:32 +0900 (0cec73c) @@ -88,12 +88,8 @@ function assertValidDomainName(domain) { errors.push(commonPrefix + 'Member must have length less ' + 'than or equal to ' + MAXIMUM_NAME_LENGTH); - if (errors.length) { - var prefix = errors.length > 1 ? - errors.length + ' validation errors detected: ' : - '1 validation error detected: '; - throw new ValidationError(prefix + errors.join('; ')); - } + if (errors.length) + throw new MultiplexedValidationError(errors); } Modified: lib/database/index-field.js (+4 -12) =================================================================== --- lib/database/index-field.js 2012-11-26 18:55:01 +0900 (8f9f6e4) +++ lib/database/index-field.js 2012-11-26 19:07:32 +0900 (fdc21a4) @@ -158,12 +158,8 @@ IndexField.prototype = { var errors = collectTypeValidationErrors(this._type) .concat(collectNameValidationErrors(this.name)); - if (errors.length) { - var prefix = errors.length > 1 ? - errors.length + ' validation errors detected: ' : - '1 validation error detected: '; - throw new ValidationError(prefix + errors.join('; ')); - } + if (errors.length) + throw new MultiplexedValidationError(errors); this.validateOptions(); @@ -175,12 +171,8 @@ IndexField.prototype = { throw new ValidationError('field name must be a string'); var errors = collectNameValidationErrors(this.name); - if (errors.length) { - var prefix = errors.length > 1 ? - errors.length + ' validation errors detected: ' : - '1 validation error detected: '; - throw new ValidationError(prefix + errors.join('; ')); - } + if (errors.length) + throw new MultiplexedValidationError(errors); return this; }, Modified: lib/errors.js (+15 -0) =================================================================== --- lib/errors.js 2012-11-26 18:55:01 +0900 (d5be889) +++ lib/errors.js 2012-11-26 19:07:32 +0900 (e5b93b2) @@ -8,6 +8,21 @@ function ValidationError(message) { } exports.ValidationError = ValidationError; +function MultiplexedValidationError(messages) { + var prefix = messages.length > 1 ? + messages.length + ' validation errors detected: ' : + '1 validation error detected: '; + var error = new Error(prefix + messages.join('; ')); + error.isValidationError = true; + error.isSenderError = true; + error.isMultiplexed = true; + error.code = 'ValidationError'; + error.type = 'ValidationError'; + error.messages = messages; + return error; +} +exports.MultiplexedValidationError = MultiplexedValidationError; + function FieldOptionConflictError(message) { var error = new Error(message); error.isValidationError = true; -------------- next part -------------- HTML����������������������������... Télécharger