SHIMODA Hiroshi
null+****@clear*****
Wed Aug 15 11:54:53 JST 2012
SHIMODA Hiroshi 2012-08-15 11:54:53 +0900 (Wed, 15 Aug 2012) New Revision: 228fb00182a88c55664a08eebd431853e1874dc0 https://github.com/groonga/gcs/commit/228fb00182a88c55664a08eebd431853e1874dc0 Log: Add support for UpdateDefaultSearchField action Modified files: lib/api/2011-02-01/configuration.js test/api-configuration.test.js Modified: lib/api/2011-02-01/configuration.js (+61 -16) =================================================================== --- lib/api/2011-02-01/configuration.js 2012-08-15 12:16:45 +0900 (c8daef9) +++ lib/api/2011-02-01/configuration.js 2012-08-15 11:54:53 +0900 (fee287c) @@ -197,6 +197,18 @@ function createIndexFieldOptionStatus(options) { } } +function createOptionStatus(options) { + var optionStatus = xmlbuilder.create(); + optionStatus.begin(options.element || 'Status', { version: '1.0' }) + .element('CreationDate').text(dateFormat(options.createdAt, + 'isoUtcDateTime')).up() + .element('State').text(options.state || 'RequiresIndexDocuments').up() + .element('UpdateDate').text(dateFormat(options.updatedAt, + 'isoUtcDateTime')).up() + .element('UpdateVersion').text(options.updateVersion || '0'); + return optionStatus; +} + function createIndexFieldStatus(options) { var indexFieldStatus = xmlbuilder.create(); indexFieldStatus.begin(options.element || 'IndexField', { version: '1.0' }) @@ -205,14 +217,11 @@ function createIndexFieldStatus(options) { .element('IndexFieldType').text(options.field.type).up() .importXMLBuilder(createIndexFieldOptionStatus(options)) .up() - .element('Status') - .element('CreationDate').text(dateFormat(options.createdAt, - 'isoUtcDateTime')).up() - .element('State').text(options.field.state).up() - .element('UpdateDate').text(dateFormat(options.updatedAt, - 'isoUtcDateTime')).up() - .element('UpdateVersion').text(options.updateVersion || '0').up() - .up(); + .importXMLBuilder(createOptionStatus({ createdAt: options.createdAt, + state: options.field.state, + updatedAt: options.updatedAt, + updateVersion: options.updateVersion, + element: 'Status' })); return indexFieldStatus; } @@ -408,17 +417,14 @@ function createUpdateSynonymOptionsResponse(options) { .attribute('xmlns', XMLNS) .element('UpdateSynonymOptionsResult') .element('Synonyms') - .element('Status') - .element('CreationDate').text(dateFormat(options.createdAt, - 'isoUtcDateTime')).up() - .element('UpdateVersion').text(options.updateVersion || '0').up() - .element('State').text(options.state || 'RequiresIndexDocuments').up() - .element('UpdateDate').text(dateFormat(options.updatedAt, - 'isoUtcDateTime')).up() - .up() .element('Options') .text(options.synonymOptions || '{}') .up() + .importXMLBuilder(createOptionStatus({ createdAt: options.createdAt, + state: options.state, + updatedAt: options.updatedAt, + updateVersion: options.updateVersion, + element: 'Status' })) .up() .up() .element('ResponseMetadata') @@ -449,6 +455,45 @@ handlers.UpdateSynonymOptions = function(context, request, response) { } }; +function createUpdateDefaultSearchFieldResponse(options) { + var doc = xmlbuilder.create(); + doc.begin('UpdateDefaultSearchFieldResponse', { version: '1.0' }) + .attribute('xmlns', XMLNS) + .element('UpdateDefaultSearchFieldResult') + .element('DefaultSearchField') + .element('Options').text(options.fieldName).up() + .importXMLBuilder(createOptionStatus({ createdAt: options.createdAt, + state: options.state, + updatedAt: options.updatedAt, + updateVersion: options.updateVersion, + element: 'Status' })) + .up() + .up() + .element('ResponseMetadata') + .element('RequestId').text(options.requestId || '').up() + .up(); + return doc.toString(); +} + +handlers.UpdateDefaultSearchField = function(context, request, response) { + var domain = new Domain(request.query.DomainName, context); + try { + var fieldName = request.query.DefaultSearchField; + domain.defaultSearchField = fieldName; + var updatedAt = new Date(); + response.send(createUpdateDefaultSearchFieldResponse({ + fieldName: fieldName, + updatedAt: updatedAt, + createdAt: updatedAt + })); + } catch (error) { + var body = createCommonErrorResponse('InternalFailure', + (error.message || error).toString()); + response.contentType('application/xml'); + response.send(body, 400); + } +}; + function getClientIp(request) { var forwardedIps = request.header('x-forwarded-for'); if (forwardedIps) { Modified: test/api-configuration.test.js (+66 -7) =================================================================== --- test/api-configuration.test.js 2012-08-15 12:16:45 +0900 (9bf2709) +++ test/api-configuration.test.js 2012-08-15 11:54:53 +0900 (abeba63) @@ -188,13 +188,8 @@ var PATTERN_UpdateSynonymOptionsResponse = { '@': { xmlns: '' }, UpdateSynonymOptionsResult: { Synonyms: { - Status: { - CreationDate: '', - UpdateVersion: '', - State: '', - UpdateDate: '' - }, - Options: '' + Options: '', + Status: PATTERN_OptionStatus }, }, ResponseMetadata: PATTERN_ResponseMetadata @@ -213,6 +208,19 @@ var PATTERN_COMMON_ERROR_RESPONSE = { } }; +var PATTERN_UpdateDefaultSearchField = { + UpdateDefaultSearchFieldResponse: { + '@': { xmlns: '' }, + UpdateDefaultSearchFieldResult: { + DefaultSearchField: { + Options: '', + Status: PATTERN_OptionStatus + }, + }, + ResponseMetadata: PATTERN_ResponseMetadata + } + }; + function toXMLPattern(fragment) { switch (typeof fragment) { default: @@ -887,6 +895,57 @@ suite('Configuration API', function() { }); }); + test('Get, Action=UpdateDefaultSearchField', function(done) { + var domain; + utils + .get('/?DomainName=companies&Action=CreateDomain&Version=2011-02-01', { + 'Host': 'cloudsearch.localhost' + }) + .get('/?DomainName=companies&IndexField.IndexFieldName=name&' + + 'Action=DefineIndexField&Version=2011-02-01') + .next(function() { + domain = new Domain('companies', context); + assert.isTrue(domain.defaultSearchField === null, + domain.defaultSearchField); + }) + .get('/?Version=2011-02-01&Action=UpdateDefaultSearchField&' + + 'DomainName=companies&DefaultSearchField=name') + .next(function(response) { + assert.equal(domain.defaultSearchField, domain.getField('name')); + + response = toParsedResponse(response); + assert.deepEqual(response.pattern, + { statusCode: 200, + body: PATTERN_UpdateDefaultSearchField }); + + var fieldName = response.body.UpdateDefaultSearchFieldResponse + .UpdateDefaultSearchFieldResult + .DefaultSearchField.Options; + assert.deepEqual(fieldName, 'name'); + }) + .get('/?Version=2011-02-01&Action=UpdateDefaultSearchField&' + + 'DomainName=companies&DefaultSearchField=') + .next(function(response) { + assert.isTrue(domain.defaultSearchField === null, + domain.defaultSearchField); + + response = toParsedResponse(response); + assert.deepEqual(response.pattern, + { statusCode: 200, + body: PATTERN_UpdateDefaultSearchField }); + + var fieldName = response.body.UpdateDefaultSearchFieldResponse + .UpdateDefaultSearchFieldResult + .DefaultSearchField.Options; + assert.deepEqual(fieldName, ''); + + done(); + }) + .error(function(error) { + done(error); + }); + }); + test('Get, no version', function(done) { utils .get('/?Action=unknown', { -------------- next part -------------- HTML����������������������������... Download