SHIMODA Hiroshi
null+****@clear*****
Wed Aug 15 12:49:37 JST 2012
SHIMODA Hiroshi 2012-08-15 12:49:37 +0900 (Wed, 15 Aug 2012) New Revision: f13d33b930d0210069cc52a8f369aba607bf5a0c https://github.com/groonga/gcs/commit/f13d33b930d0210069cc52a8f369aba607bf5a0c Log: Add support for DescribeSynonymOptions action Modified files: lib/api/2011-02-01/configuration.js test/api-configuration.test.js Modified: lib/api/2011-02-01/configuration.js (+36 -0) =================================================================== --- lib/api/2011-02-01/configuration.js 2012-08-15 12:43:40 +0900 (55b06dc) +++ lib/api/2011-02-01/configuration.js 2012-08-15 12:49:37 +0900 (d36481a) @@ -461,6 +461,42 @@ handlers.UpdateSynonymOptions = function(context, request, response) { } }; +function createDescribeSynonymOptionsResponse(options) { + var doc = xmlbuilder.create(); + doc.begin('DescribeSynonymOptionsResponse', { version: '1.0' }) + .attribute('xmlns', XMLNS) + .element('DescribeSynonymOptionsResult') + .importXMLBuilder(createSynonymOptionsStatus(options)) + .up() + .element('ResponseMetadata') + .element('RequestId').text(options.requestId || '').up() + .up(); + return doc.toString(); +} + +handlers.DescribeSynonymOptions = function(context, request, response) { + var domain = new Domain(request.query.DomainName, context); + try { + var synonyms = domain.getSynonymsSync(); + var synonymOptions = { synonyms: synonyms }; + + var updatedAt = new Date(); + + domain.updateSynonymsSync(synonymOptions.synonyms); + + response.send(createUpdateSynonymOptionsResponse({ + synonymOptions: JSON.stringify(synonymOptions), + updatedAt: updatedAt, + createdAt: updatedAt + })); + } catch (error) { + var body = createCommonErrorResponse('InternalFailure', + (error.message || error).toString()); + response.contentType('application/xml'); + response.send(body, 400); + } +}; + function createDefaultSearchFieldStatus(options) { var defaultSearchFieldStatus = xmlbuilder.create(); defaultSearchFieldStatus.begin('DefaultSearchField', { version: '1.0' }) Modified: test/api-configuration.test.js (+76 -4) =================================================================== --- test/api-configuration.test.js 2012-08-15 12:43:40 +0900 (87242bc) +++ test/api-configuration.test.js 2012-08-15 12:49:37 +0900 (702d34e) @@ -183,14 +183,26 @@ function PATTERN_IndexDocumentsResponse(members) { }; } +var PATTERN_SynonymOptionsStatus = { + Options: '', + Status: PATTERN_OptionStatus + }; + var PATTERN_UpdateSynonymOptionsResponse = { UpdateSynonymOptionsResponse: { '@': { xmlns: '' }, UpdateSynonymOptionsResult: { - Synonyms: { - Options: '', - Status: PATTERN_OptionStatus - }, + Synonyms: PATTERN_SynonymOptionsStatus, + }, + ResponseMetadata: PATTERN_ResponseMetadata + } + }; + +var PATTERN_DescribeSynonymOptionsResponse = { + DescribeSynonymOptionsResponse: { + '@': { xmlns: '' }, + DescribeSynonymOptionsResult: { + Synonyms: PATTERN_SynonymOptionsStatus, }, ResponseMetadata: PATTERN_ResponseMetadata } @@ -932,6 +944,66 @@ suite('Configuration API', function() { }); }); + test('Get, Action=DescribeSynonymOptions', function(done) { + var domain; + var synonymsObject = { + synonyms: { + tokio: ["tokyo"], + dekkaido: "hokkaido" + } + }; + var json = JSON.stringify(synonymsObject); + var synonyms = encodeURIComponent(json); + utils + .get('/?DomainName=companies&Action=CreateDomain&Version=2011-02-01', { + 'Host': 'cloudsearch.localhost' + }) + .get('/?Version=2011-02-01&Action=DescribeSynonymOptions&' + + 'DomainName=companies') + .next(function() { + response = toParsedResponse(response); + assert.deepEqual(response.pattern, + { statusCode: 200, + body: PATTERN_DescribeSynonymOptionsResponse }); + + var synonymOptions = response.body.DescribeSynonymOptionsResponse + .DescribeSynonymOptionsResult + .Synonyms.Options; + synonymOptions = JSON.parse(synonymOptions); + var expectedSynonymOptions = { + synonyms: {} + }; + assert.deepEqual(expectedSynonymOptions, synonymOptions); + }) + .get('/?Version=2011-02-01&Action=UpdateSynonymOptions&' + + 'DomainName=companies&Synonyms='+synonyms) + .get('/?Version=2011-02-01&Action=DescribeSynonymOptions&' + + 'DomainName=companies') + .next(function(response) { + response = toParsedResponse(response); + assert.deepEqual(response.pattern, + { statusCode: 200, + body: PATTERN_DescribeSynonymOptionsResponse }); + + var synonymOptions = response.body.DescribeSynonymOptionsResponse + .DescribeSynonymOptionsResult + .Synonyms.Options; + synonymOptions = JSON.parse(synonymOptions); + var expectedSynonymOptions = { + synonyms: { + tokio: ['tokyo'], + dekkaido: 'hokkaido' + } + }; + assert.deepEqual(expectedSynonymOptions, synonymOptions); + + done(); + }) + .error(function(error) { + done(error); + }); + }); + test('Get, Action=UpdateDefaultSearchField', function(done) { var domain; utils -------------- next part -------------- HTML����������������������������...Download