all files / src/ ApiResponse.js

100% Statements 38/38
90% Branches 9/10
100% Functions 2/2
100% Lines 38/38
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        25× 25× 25× 25× 25× 25×   25× 22×   22×       22× 22× 22× 22×   22× 22× 22× 22× 22× 22× 22× 22×   22×     22× 22× 22× 12× 12× 12×        
'use strict';
 
var log = require('./Log.js').Logger('libZotero:ApiResponse');
 
//takes a superagent response
module.exports = function(response) {
	log.debug('Zotero.ApiResponse', 3);
	this.totalResults = 0;
	this.apiVersion = null;
	this.lastModifiedVersion = 0;
	this.linkHeader = '';
	this.links = {};
	
	if(response){
		this.isError = !response.ok;
		//this.data = response.json;
		this.parseResponse(response);
	}
};
 
module.exports.prototype.parseResponse = function(response){
	log.debug('parseResponse', 3);
	var apiResponse = this;
	apiResponse.rawResponse = response;
	apiResponse.status = response.status;
	//keep track of relevant headers
	apiResponse.lastModifiedVersion = response.headers.get('last-modified-version');
	apiResponse.apiVersion = response.headers.get('zotero-api-version');
	apiResponse.backoff = response.headers.get('backoff');
	apiResponse.retryAfter = response.headers.get('retry-after');
	apiResponse.contentType = response.headers.get('content-type');
	apiResponse.linkHeader = response.headers.get('link');
	apiResponse.totalResults = response.headers.get('total-results');
	if(apiResponse.backoff){
		apiResponse.backoff = parseInt(apiResponse.backoff, 10);
	}
	if(apiResponse.retryAfter){
		apiResponse.retryAfter = parseInt(apiResponse.retryAfter, 10);
	}
	//TODO: parse link header into individual links
	log.debug('parse link header', 4);
	log.debug(apiResponse.linkHeader, 4);
	if(apiResponse.linkHeader){
		var links = apiResponse.linkHeader.split(',');
		var parsedLinks = {};
		var linkRegex = /^<([^>]+)>; rel="([^\"]*)"$/;
		for(var i = 0; i < links.length; i++){
			var matches = linkRegex.exec(links[i].trim());
			Eif(matches[2]){
				parsedLinks[matches[2]] = matches[1];
			}
		}
		apiResponse.parsedLinks = parsedLinks;
	}
};