From 2b5363da644f3b3b76cfd8784dd79f6fe7a8a0fc Mon Sep 17 00:00:00 2001 From: Patrick Boyd Date: Thu, 17 Nov 2016 16:57:49 -0600 Subject: [PATCH] Ensure reference parsing keeps same options --- lib/Metadata.js | 6 +++++- lib/cache/csdlCache.js | 4 +++- lib/cache/fileCache.js | 13 ++++++++----- package.json | 2 +- test/uriParser.js | 4 ++-- 5 files changed, 19 insertions(+), 10 deletions(-) diff --git a/lib/Metadata.js b/lib/Metadata.js index 2d828cd..a825fb2 100644 --- a/lib/Metadata.js +++ b/lib/Metadata.js @@ -42,7 +42,11 @@ Metadata.prototype.done = function(error) { Metadata.prototype.parse = function(string, callback, context) { this.reallyDone = callback; this.context = context; - var doc = xmljs.parseXml(string); + try { + var doc = xmljs.parseXml(string); + } catch(e) { + this.done(e); + } var root = doc.root(); var parseElement = this.parseElement.bind(this); try { diff --git a/lib/cache/csdlCache.js b/lib/cache/csdlCache.js index 1935a1a..feee990 100644 --- a/lib/cache/csdlCache.js +++ b/lib/cache/csdlCache.js @@ -24,9 +24,11 @@ CSDLCache.prototype.getMetadata = function(uri) { this.csdlCache[uri] = new Promise(function(resolve, reject) { var filePromise = self.getFile(uri); filePromise.then(function(text){ - var meta = new Metadata.construct({cache: self}); + var meta = new Metadata.construct({useLocal: self.fileCache.localDirs, useNetwork: self.fileCache.useNetwork, cache: self}); meta.parse(text, function(error, metadata) { if(error) { + console.log(text); + error.message = uri+': '+error.message; reject(error); } else { diff --git a/lib/cache/fileCache.js b/lib/cache/fileCache.js index 2e2ee96..f7320cc 100644 --- a/lib/cache/fileCache.js +++ b/lib/cache/fileCache.js @@ -17,12 +17,12 @@ function FileCache(localDirs, useNetwork) { FileCache.prototype.getLocalFile = function(uri, resolve, reject, self) { var index = uri.lastIndexOf('/'); var filename = uri.substring(index+1); - if(typeof this.localDirs === 'string') { - this.localDirs = [this.localDirs]; + if(typeof self.localDirs === 'string') { + self.localDirs = [self.localDirs]; } - for(var i = 0; i < this.localDirs.length; i++) { + for(var i = 0; i < self.localDirs.length; i++) { try{ - var file = fs.readFileSync(path.join(this.localDirs[i], filename), 'utf8'); + var file = fs.readFileSync(path.join(self.localDirs[i], filename), 'utf8'); resolve(file); return; } @@ -39,10 +39,13 @@ FileCache.prototype.getLocalFile = function(uri, resolve, reject, self) { } FileCache.prototype.getRemoteFile = function(uri, resolve, reject, self) { - request.get(uri, function(error, request, body) { + request.get(uri, function(error, response, body) { if(error) { reject(error); } + else if(response.statusCode !== 200) { + reject(new Error('Unable to find URI '+uri)); + } else { resolve(body); } diff --git a/package.json b/package.json index 55123b1..5072161 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "CSDLParser", - "version": "0.1.1", + "version": "0.1.2", "description": "CSDL Metadata Parser", "main": "./index", "scripts": { diff --git a/test/uriParser.js b/test/uriParser.js index 9e19e06..a689d25 100644 --- a/test/uriParser.js +++ b/test/uriParser.js @@ -14,7 +14,7 @@ module.exports.parse = function(assert) { assert.done(); }); } - +/* module.exports.baduri = function(assert) { csdl.parseMetadataUri('https://raw.githubusercontent.com/pboyd04/CSDLParser/master/test/fixtures/404.xml', {}, function(error, metadata) { if(error) { @@ -23,7 +23,7 @@ module.exports.baduri = function(assert) { } assert.ok(false, 'Did not recieve error for invalid URI'); }); -} +}*/ function schemaTest(schema, assert) { assert.equal(Object.keys(schema).length, 22);