[Groonga-commit] groonga/gcs [master] Add support for UpdateDefaultSearchField action

Back to archive index

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 



More information about the Groonga-commit mailing list
Back to archive index