Code coverage report for lib/soapHelpers.js

Statements: 100% (32 / 32)      Branches: 100% (27 / 27)      Functions: 100% (5 / 5)      Lines: 100% (29 / 29)      Ignored: none     

All files » lib/ » soapHelpers.js
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63        1         1 875 574 5   569     870 328 328 773 76   697     328   542 523 426 274       1 45       1118 1118 1118 979   139         45 1   44 1         44      
/**
 * Created by Andrew D.Laptev<a.d.laptev@gmail.com> on 1/20/15.
 */
 
var xml2js = require('xml2js')
	, numberRE = /^-?([1-9]\d*|0)(\.\d*)?$/
	, prefixMatch = /(?!xmlns)^.*:/
	;
 
var _linerase = exports._linerase = function(xml) {
	if (Array.isArray(xml)) {
		if (xml.length > 1) {
			return xml.map(_linerase);
		} else {
			xml = xml[0];
		}
	}
	if (typeof xml === 'object') {
		var obj = {};
		Object.keys(xml).forEach(function(key) {
			if (key === '$') {
				obj.$ = _linerase(xml.$);
			} else {
				obj[key] = _linerase(xml[key]);
			}
		});
		return obj;
	} else {
		if (xml === 'true') { return true; }
		if (xml === 'false') { return false; }
		if (numberRE.test(xml)) { return parseFloat(xml); }
		return xml;
	}
};
 
exports.parseSOAPString = function(xml, callback) {
	xml2js.parseString(
		xml
		, {
			tagNameProcessors: [function (str) {
				str = str.replace(prefixMatch, '');
				var secondLetter = str.charAt(1);
				if (secondLetter && secondLetter.toUpperCase() !== secondLetter) {
					return str.charAt(0).toLowerCase() + str.slice(1);
				} else {
					return str;
				}
			}]
		}
		, function(err, result) {
			if (!result || !result['envelope'] || !result['envelope']['body']) {
				callback(new Error('Wrong ONVIF SOAP response'), null, xml);
			} else {
				if (!err && result['envelope']['body'][0]['fault']) {
					err = new Error(
						'ONVIF SOAP Fault: ' +
						result['envelope']['body'][0]['fault'][0]['reason'][0]['text'][0]._
					);
				}
				callback(err, result['envelope']['body'], xml);
			}
		});
};