Beau/requestList.js

52 lines
1.2 KiB
JavaScript

const Request = require('./request');
const RequestCache = require('./requestCache');
const httpVerbs = require('./shared').httpVerbs;
class RequestList {
constructor(doc = {}, config = {}) {
this.config = config;
this.list = this.loadRequests(doc);
this.cache = new RequestCache();
}
execByAlias(alias) {
let request = this.list.find(r => r.ALIAS === alias);
if (typeof request === 'undefined') {
return Promise.reject(`${alias} not found among the requests.`);
}
return request
.exec()
.catch(reason => {
return Promise
.reject(`Request: ${request.VERB} ${request.ENDPOINT} FAILED. \n${reason}`);
});
}
fetchDependencies(dependencies) {
dependencies = dependencies.map(d => this.execByAlias(d));
return Promise.all(dependencies).then(() => this.cache);
}
loadRequests(doc) {
let requestKeys = Object.keys(doc)
.filter(key => {
let verb = key.split(' ')[0].toUpperCase();
return httpVerbs.indexOf(verb) > -1;
});
return requestKeys.map(key => {
doc[key] = doc[key] || {};
doc[key].HOST = this.config.HOST;
doc[key].request = key;
return new Request(doc[key], this);
});
}
}
module.exports = RequestList;