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