moddle-xml
Advanced tools
Comparing version 0.1.0 to 0.2.0
'use strict'; | ||
var Reader = require('./lib/Reader'), | ||
Writer = require('./lib/Writer'); | ||
module.exports.Reader = Reader; | ||
module.exports.Writer = Writer; | ||
module.exports.Reader = require('./lib/Reader'); | ||
module.exports.Writer = require('./lib/Writer'); |
'use strict'; | ||
function capitalize(string) { | ||
return string.charAt(0).toUpperCase() + string.slice(1); | ||
} | ||
function lower(string) { | ||
return string.charAt(0).toLowerCase() + string.slice(1); | ||
} | ||
function hasLowerCaseAlias(pkg) { | ||
@@ -8,7 +16,4 @@ return pkg.xml && pkg.xml.alias === 'lowerCase'; | ||
function capitalize(string) { | ||
return string.charAt(0).toUpperCase() + string.slice(1); | ||
} | ||
function aliasToName(alias, pkg) { | ||
module.exports.aliasToName = function(alias, pkg) { | ||
if (hasLowerCaseAlias(pkg)) { | ||
@@ -19,10 +24,5 @@ return capitalize(alias); | ||
} | ||
} | ||
}; | ||
function lower(string) { | ||
return string.charAt(0).toLowerCase() + string.slice(1); | ||
} | ||
function nameToAlias(name, pkg) { | ||
module.exports.nameToAlias = function(name, pkg) { | ||
if (hasLowerCaseAlias(pkg)) { | ||
@@ -33,14 +33,6 @@ return lower(name); | ||
} | ||
} | ||
}; | ||
module.exports.aliasToName = aliasToName; | ||
module.exports.nameToAlias = nameToAlias; | ||
var DEFAULT_NS_MAP = { | ||
module.exports.DEFAULT_NS_MAP = { | ||
'xsi': 'http://www.w3.org/2001/XMLSchema-instance' | ||
}; | ||
module.exports.DEFAULT_NS_MAP = DEFAULT_NS_MAP; | ||
}; |
@@ -7,10 +7,5 @@ 'use strict'; | ||
var common = require('./common'), | ||
util = require('moddle/lib/util'), | ||
Types = require('moddle').types, | ||
Stack = require('tiny-stack'), | ||
logger = util.logger, | ||
parseNameNs = util.parseNameNs, | ||
coerceType = util.coerceType, | ||
isSimpleType = util.isSimpleType, | ||
parseNameNs = require('moddle').ns.parseName, | ||
aliasToName = common.aliasToName; | ||
@@ -96,3 +91,2 @@ | ||
this.addWarning = function (w) { | ||
logger.debug('[warning]', w.message, w); | ||
warnings.push(w); | ||
@@ -169,3 +163,3 @@ }; | ||
value = coerceType(propertyDesc.type, value); | ||
value = Types.coerceType(propertyDesc.type, value); | ||
@@ -180,6 +174,4 @@ if (propertyDesc.isMany) { | ||
function BaseElementHandler(model, type, context) { | ||
function BaseElementHandler() {} | ||
} | ||
BaseElementHandler.prototype = Object.create(BodyHandler.prototype); | ||
@@ -228,3 +220,3 @@ | ||
if (bodyProperty && value !== undefined) { | ||
value = coerceType(bodyProperty.type, value); | ||
value = Types.coerceType(bodyProperty.type, value); | ||
element.set(bodyProperty.name, value); | ||
@@ -258,3 +250,3 @@ } | ||
if (prop) { | ||
value = coerceType(prop.type, value); | ||
value = Types.coerceType(prop.type, value); | ||
} | ||
@@ -295,3 +287,3 @@ | ||
property = _.find(descriptor.properties, function(p) { | ||
return !p.isVirtual && !p.isReference && !p.isAttribute && elementType.isA(p.type); | ||
return !p.isVirtual && !p.isReference && !p.isAttribute && elementType.hasType(p.type); | ||
}); | ||
@@ -344,10 +336,11 @@ | ||
var propertyDesc, type, childHandler; | ||
var propertyDesc, type, element, childHandler; | ||
propertyDesc = this.getPropertyForElement(nameNs); | ||
element = this.element; | ||
type = propertyDesc.effectiveType || propertyDesc.type; | ||
if (isSimpleType(propertyDesc.type)) { | ||
return this.valueHandler(propertyDesc, this.element); | ||
if (Types.isSimple(propertyDesc.type)) { | ||
return this.valueHandler(propertyDesc, element); | ||
} | ||
@@ -364,9 +357,9 @@ | ||
// child handles may decide to skip elements | ||
// by not returning anythign | ||
// by not returning anything | ||
if (newElement !== undefined) { | ||
if (propertyDesc.isMany) { | ||
this.element.get(propertyDesc.name).push(newElement); | ||
element.get(propertyDesc.name).push(newElement); | ||
} else { | ||
this.element.set(propertyDesc.name, newElement); | ||
element.set(propertyDesc.name, newElement); | ||
} | ||
@@ -376,6 +369,9 @@ | ||
_.extend(newElement, { | ||
element: this.element | ||
element: element | ||
}); | ||
this.context.addReference(newElement); | ||
} else { | ||
// establish child -> parent relationship | ||
newElement.$parent = element; | ||
} | ||
@@ -407,14 +403,14 @@ } | ||
var handler = new GenericElementHandler(this.model, 'Element', this.context).handleNode(node); | ||
var handler = new GenericElementHandler(this.model, 'Element', this.context).handleNode(node), | ||
element = this.element; | ||
var child = handler.getElement(); | ||
var newElement = handler.getElement(), | ||
children; | ||
if (child !== undefined) { | ||
if (newElement !== undefined) { | ||
children = element.$children = element.$children || []; | ||
children.push(newElement); | ||
var children = this.element.$children; | ||
if (!children) { | ||
children = this.element.$children = []; | ||
} | ||
children.push(child); | ||
// establish child -> parent relationship | ||
newElement.$parent = element; | ||
} | ||
@@ -421,0 +417,0 @@ |
@@ -5,7 +5,5 @@ 'use strict'; | ||
var util = require('moddle').util, | ||
var Types = require('moddle').types, | ||
common = require('./common'), | ||
parseNameNs = util.parseNameNs, | ||
isSimpleType = util.isSimpleType, | ||
parseNameNs = require('moddle').ns.parseName, | ||
nameToAlias = common.nameToAlias; | ||
@@ -308,3 +306,3 @@ | ||
} else | ||
if (isSimpleType(p.type)) { | ||
if (Types.isSimple(p.type)) { | ||
_.forEach(value, function(v) { | ||
@@ -311,0 +309,0 @@ body.push(new ValueSerializer(ns).build(p, v)); |
{ | ||
"name": "moddle-xml", | ||
"version": "0.1.0", | ||
"version": "0.2.0", | ||
"description": "XML import/export for documents described with moddle", | ||
@@ -52,3 +52,3 @@ "directories": { | ||
"dependencies": { | ||
"moddle": "~0.1.0", | ||
"moddle": "~0.2.0", | ||
"lodash": "~2.4.0", | ||
@@ -55,0 +55,0 @@ "sax": "~0.6.0", |
@@ -0,1 +1,3 @@ | ||
'use strict'; | ||
var fs = require('fs'); | ||
@@ -6,4 +8,3 @@ var util = require('util'); | ||
var logger = require('moddle').util.Logger; | ||
var Model = require('moddle'); | ||
var Moddle = require('moddle'); | ||
@@ -45,3 +46,3 @@ var jsondiffpatch = require('jsondiffpatch').create({ | ||
if (!result.pass) { | ||
logger.error('[to-deep-equal] elements do not equal. diff: ', util.inspect(jsondiffpatch.diff(actualClone, expectedClone), false, 4)); | ||
console.warn('[to-deep-equal] elements do not equal. diff: ', util.inspect(jsondiffpatch.diff(actualClone, expectedClone), false, 4)); | ||
} | ||
@@ -60,5 +61,5 @@ | ||
if (!base) { | ||
throw new Error("[test-util] must specify a base directory"); | ||
throw new Error('[test-util] must specify a base directory'); | ||
} | ||
function createModel(packageNames) { | ||
@@ -81,3 +82,3 @@ | ||
return new Model(packages); | ||
return new Moddle(packages); | ||
} | ||
@@ -88,15 +89,2 @@ | ||
/** log during execution of a test callback */ | ||
function log(level, fn) { | ||
logger.setLevel(level); | ||
return function(done) { | ||
fn(function() { | ||
logger.setLevel(null); | ||
done(); | ||
}); | ||
}; | ||
} | ||
module.exports.log = log; | ||
module.exports.readFile = readFile; | ||
@@ -103,0 +91,0 @@ module.exports.ensureDirExists = ensureDirExists; |
@@ -0,10 +1,9 @@ | ||
'use strict'; | ||
var _ = require('lodash'); | ||
var Reader = require('../../lib/Reader'), | ||
logger = require('moddle').util.Logger; | ||
var Helper = require('./Helper'), | ||
Helper = require('./Helper'), | ||
readFile = Helper.readFile, | ||
createModelBuilder = Helper.createModelBuilder, | ||
log = Helper.log; | ||
createModelBuilder = Helper.createModelBuilder; | ||
@@ -1026,2 +1025,115 @@ | ||
describe('parent -> child relationship', function() { | ||
var model = createModel([ 'properties' ]); | ||
var extensionModel = createModel([ 'extensions' ]); | ||
it('should expose $parent on model elements', function(done) { | ||
// given | ||
var reader = new Reader(model); | ||
var rootHandler = reader.handler('props:ComplexAttrs'); | ||
// when | ||
reader.fromXML('<props:complexAttrs xmlns:props="http://properties" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><props:attrs xsi:type="props:Attributes" integerValue="10" /></props:complexAttrs>', rootHandler, function(err, result) { | ||
if (err) { | ||
return done(err); | ||
} | ||
// then | ||
expect(result.$parent).not.toBeDefined(); | ||
expect(result.attrs.$parent).toBe(result); | ||
done(); | ||
}); | ||
}); | ||
it('should expose $parent on references', function(done) { | ||
// given | ||
var reader = new Reader(extendedModel); | ||
var rootHandler = reader.handler('props:Root'); | ||
var xml = | ||
'<props:root xmlns:props="http://properties">' + | ||
'<props:containedCollection id="C_5">' + | ||
'<props:complex id="C_1" />' + | ||
'<props:complex id="C_2" />' + | ||
'</props:containedCollection>' + | ||
'<props:referencingSingle id="C_4" referencedComplex="C_1" />' + | ||
'</props:root>'; | ||
// when | ||
reader.fromXML(xml, rootHandler, function(err, result) { | ||
if (err) { | ||
return done(err); | ||
} | ||
var containedCollection = result.any[0]; | ||
var referencedComplex = result.any[1].referencedComplex; | ||
// then | ||
expect(referencedComplex.$parent).toBe(containedCollection); | ||
done(); | ||
}); | ||
}); | ||
it('should expose $parent on extension elements', function(done) { | ||
// given | ||
var reader = new Reader(extensionModel); | ||
var rootHandler = reader.handler('e:Root'); | ||
var xml = | ||
'<e:root xmlns:e="http://extensions" xmlns:other="http://other">' + | ||
'<e:id>FOO</e:id>' + | ||
'<other:nestedMeta>' + | ||
'<other:meta key="k1" value="v1" />' + | ||
'<other:meta key="k2" value="v2" />' + | ||
'<other:additionalNote>' + | ||
'this is some text' + | ||
'</other:additionalNote>' + | ||
'</other:nestedMeta>' + | ||
'</e:root>'; | ||
// when | ||
reader.fromXML(xml, rootHandler, function(err, result) { | ||
if (err) { | ||
return done(err); | ||
} | ||
var child = result.extensions[0]; | ||
var nested = child.$children[0]; | ||
expect(child.$parent).toBe(result); | ||
expect(nested.$parent).toBe(child); | ||
expect(result).toDeepEqual({ | ||
$type: 'e:Root', | ||
id: 'FOO', | ||
extensions: [ | ||
{ | ||
$type: 'other:nestedMeta', | ||
$children: [ | ||
{ $type: 'other:meta', key: 'k1', value: 'v1' }, | ||
{ $type: 'other:meta', key: 'k2', value: 'v2' }, | ||
{ $type: 'other:additionalNote', $body: 'this is some text' } | ||
] | ||
} | ||
] | ||
}); | ||
done(); | ||
}); | ||
}) | ||
}); | ||
}); |
@@ -0,10 +1,9 @@ | ||
'use strict'; | ||
var _ = require('lodash'); | ||
var Writer = require('../../lib/Writer'), | ||
logger = require('moddle').util.Logger; | ||
Helper = require('./Helper'); | ||
var Helper = require('./Helper'), | ||
log = Helper.log; | ||
describe('Writer', function() { | ||
@@ -50,3 +49,3 @@ | ||
it('via xsi:type', function() { | ||
// given | ||
@@ -61,3 +60,3 @@ var writer = createWriter(datatypesModel); | ||
var xml = writer.toXML(root); | ||
// then | ||
@@ -111,3 +110,3 @@ expect(xml).toEqual('<dt:root xmlns:dt="http://datatypes"><dt:bounds y="100" /></dt:root>'); | ||
}); | ||
}); | ||
@@ -117,5 +116,5 @@ | ||
describe('simple properties', function() { | ||
it('attribute', function() { | ||
// given | ||
@@ -185,8 +184,8 @@ var writer = createWriter(model); | ||
}); | ||
describe('embedded properties', function() { | ||
it('single', function() { | ||
// given | ||
@@ -207,3 +206,3 @@ var writer = createWriter(model); | ||
it('collection', function() { | ||
// given | ||
@@ -219,3 +218,3 @@ var writer = createWriter(model); | ||
var any = root.get('any'); | ||
any.push(attributes); | ||
@@ -234,3 +233,3 @@ any.push(simpleBody); | ||
it('collection / different ns', function() { | ||
// given | ||
@@ -246,3 +245,3 @@ var writer = createWriter(extendedModel); | ||
var any = root.get('any'); | ||
any.push(attributes1); | ||
@@ -445,3 +444,3 @@ any.push(attributes2); | ||
it('single', function() { | ||
// given | ||
@@ -462,3 +461,3 @@ var writer = createWriter(model); | ||
it('collection', function() { | ||
// given | ||
@@ -493,3 +492,3 @@ var writer = createWriter(model); | ||
describe('attributes', function() { | ||
it('should write xsi:schemaLocation', function() { | ||
@@ -513,3 +512,3 @@ | ||
it('should write extension attributes', function() { | ||
// given | ||
@@ -543,3 +542,3 @@ var writer = createWriter(extensionModel); | ||
// then | ||
// then | ||
expect(xml).toEqual('<e:root xmlns:e="http://extensions" />'); | ||
@@ -587,3 +586,3 @@ }); | ||
it('should write extension element body', function() { | ||
// given | ||
@@ -590,0 +589,0 @@ var writer = createWriter(extensionModel); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
91538
2486
+ Addedmoddle@0.2.0(transitive)
- Removedmoddle@0.1.0(transitive)
Updatedmoddle@~0.2.0