[Groonga-commit] groonga/gcs [master] Refactor generating process of XML responses based on importXMLBuilder()

Back to archive index

null+****@clear***** null+****@clear*****
2012年 7月 26日 (木) 16:35:22 JST


SHIMODA Hiroshi	2012-07-26 16:35:22 +0900 (Thu, 26 Jul 2012)

  New Revision: a405a771c54b8e6e1194707e7edce238b1dd6182
  https://github.com/groonga/gcs/commit/a405a771c54b8e6e1194707e7edce238b1dd6182

  Log:
    Refactor generating process of XML responses based on importXMLBuilder()

  Modified files:
    lib/api/2011-02-01/configuration.js
    lib/xmlbuilder.js

  Modified: lib/api/2011-02-01/configuration.js (+32 -31)
===================================================================
--- lib/api/2011-02-01/configuration.js    2012-07-26 16:30:50 +0900 (08ed81d)
+++ lib/api/2011-02-01/configuration.js    2012-07-26 16:35:22 +0900 (fe63927)
@@ -30,8 +30,8 @@ function getBaseDomain(domain) {
 }
 
 function createDomainStatus(options) {
-  var domainStatus = new xmlbuilder.XMLFragment(null, 'DomainStatus');
-  domainStatus
+  var domainStatus = xmlbuilder.create();
+  domainStatus.begin('DomainStatus', { version: '1.0' })
     .element('Created').text(options.created || 'false').up()
     .element('Deleted').text(options.deleted || 'false').up()
     .element('DocService')
@@ -64,7 +64,7 @@ function createCreateDomainResponse(options) {
   doc.begin('CreateDomainResponse', { version: '1.0' })
     .attribute('xmlns', XMLNS)
     .element('CreateDomainResult')
-      .fragment(createDomainStatus(options))
+      .importXMLBuilder(createDomainStatus(options))
     .up()
     .element('ResponseMetadata')
       .element('RequestId').text(options.requestId || '').up()
@@ -102,7 +102,7 @@ function createDeleteDomainResponse(options) {
   doc.begin('DeleteDomainResponse', { version: '1.0' })
     .attribute('xmlns', XMLNS)
     .element('DeleteDomainResult')
-      .fragment(createDomainStatus(options))
+      .importXMLBuilder(createDomainStatus(options))
     .up()
     .element('ResponseMetadata')
       .element('RequestId').text(options.requestId || '').up()
@@ -138,35 +138,35 @@ handlers.DeleteDomain = function(context, request, response) {
 function createIndexFieldOptionStatus(options) {
   switch (options.fieldType) {
     case 'text':
-      var textOptions = new xmlbuilder.XMLFragment(null, 'TextOptions');
-      textOptions
+      var textOptions = xmlbuilder.create();
+      textOptions.begin('TextOptions', { version: '1.0' })
         .element('DefaultValue').up()
         .element('FacetEnabled').text(options.facetEnabled || 'false').up()
-        .element('ResultEnabled').text(options.resultEnabled || 'false').up();
+        .element('ResultEnabled').text(options.resultEnabled || 'false');
       return textOptions;
     case 'uint':
-      var uintOptions = new xmlbuilder.XMLFragment(null, 'UIntOptions');
-      uintOptions
-        .element('DefaultValue').up();
+      var uintOptions = xmlbuilder.create();
+      uintOptions.begin('UIntOptions', { version: '1.0' })
+        .element('DefaultValue');
       return uintOptions;
     case 'literal':
-      var literalOptions = new xmlbuilder.XMLFragment(null, 'LiteralOptions');
-      literalOptions
+      var literalOptions = xmlbuilder.create();
+      literalOptions.begin('LiteralOptions', { version: '1.0' })
         .element('DefaultValue').up()
         .element('FacetEnabled').text(options.facetEnabled || 'false').up()
         .element('ResultEnabled').text(options.resultEnabled || 'false').up()
-        .element('SearchEnabled').text(options.searchEnabled || 'false').up();
+        .element('SearchEnabled').text(options.searchEnabled || 'false');
       return literalOptions;
   }
 }
 
 function createIndexFieldStatus(options) {
-  var indexFieldStatus = new xmlbuilder.XMLFragment(null, 'IndexField');
-  indexFieldStatus
+  var indexFieldStatus = xmlbuilder.create();
+  indexFieldStatus.begin('IndexField', { version: '1.0' })
     .element('Options')
       .element('IndexFieldName').text(options.fieldName).up()
       .element('IndexFieldType').text(options.fieldType).up()
-      .fragment(createIndexFieldOptionStatus(options))
+      .importXMLBuilder(createIndexFieldOptionStatus(options))
     .up()
     .element('Status')
       .element('CreationDate').text(dateFormat(options.createdAt,
@@ -184,7 +184,7 @@ function createDefineIndexFieldResponse(options) {
   doc.begin('DefineIndexFieldResponse', { version: '1.0' })
     .attribute('xmlns', XMLNS)
     .element('DefineIndexFieldResult')
-      .fragment(createIndexFieldStatus(options))
+      .importXMLBuilder(createIndexFieldStatus(options))
     .up()
     .element('ResponseMetadata')
       .element('RequestId').text(options.requestId || '').up()
@@ -250,20 +250,21 @@ handlers.DeleteIndexField = function(context, request, response) {
 
 function createIndexDocumentsResponse(options) {
   var doc = xmlbuilder.create();
-  doc.begin('IndexDocumentsResponse', {version: '1.0'})
-    .attribute('xmlns', XMLNS)
-    .element('IndexDocumentsResult')
-      .element('FieldNames')
-        .fragment(options.fieldNames.map(function(fieldName) {
-          var member = new xmlbuilder.XMLFragment(null, 'member');
-          member.text(fieldName);
-          return member;
-        }))
-      .up()
-    .up()
-    .element('ResponseMetadata')
-      .element('RequestId').text(options.requestId || '').up()
-    .up();
+  var root = doc.begin('IndexDocumentsResponse', {version: '1.0'})
+                .attribute('xmlns', XMLNS);
+
+  var fieldNames = root.element('IndexDocumentsResult')
+                       .element('FieldNames');
+  options.fieldNames.forEach(function(fieldName) {
+    var member = xmlbuilder.create();
+    member.begin('member', { version: '1.0' })
+      .text(fieldName);
+    fieldNames.importXMLBuilder(member);
+  });
+
+  root.element('ResponseMetadata')
+      .element('RequestId').text(options.requestId || '');
+
   return doc.toString();
 }
 

  Modified: lib/xmlbuilder.js (+22 -2)
===================================================================
--- lib/xmlbuilder.js    2012-07-26 16:30:50 +0900 (1682cf7)
+++ lib/xmlbuilder.js    2012-07-26 16:35:22 +0900 (0425e98)
@@ -1,7 +1,8 @@
 module.exports = require('xmlbuilder');
-module.exports.XMLFragment = require('xmlbuilder/lib/XMLFragment');
+var XMLFragment = require('xmlbuilder/lib/XMLFragment');
+module.exports.XMLFragment = XMLFragment;
 
-module.exports.XMLFragment.prototype.fragment = function(fragments) {
+XMLFragment.prototype.fragment = function(fragments) {
   if (fragments) {
     if (!Array.isArray(fragments))
       fragments = [fragments];
@@ -12,3 +13,22 @@ module.exports.XMLFragment.prototype.fragment = function(fragments) {
   }
   return this;
 };
+
+XMLFragment.prototype.importXMLBuilder = function(xmlbuilder) {
+  var fragment = xmlbuilder.clone(true).root;
+  fragment.parent = this;
+  this.children.push(fragment);
+  return this;
+};
+
+XMLFragment.prototype.clone = function(deep) {
+  var fragment = new XMLFragment(this.parent, this.name, this.attributes, this.value);
+  if (deep) {
+    this.children.forEach(function(child) {
+      var clonedChild = child.clone(deep);
+      clonedChild.parent = fragment;
+      fragment.children.push(clonedChild);
+    }, this);
+  }
+  return this;
+};
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
Download 



Groonga-commit メーリングリストの案内
Back to archive index