mirror of https://github.com/Seich/Beau.git
Added basic support for plugins.
Plugins can now be included, they can modify the requests before they are made and modify the result. They are very simple to write and work with. I also wrote and example plugin over at seich/beau-jwt.
This commit is contained in:
parent
ab19146966
commit
3c2691b164
|
|
@ -0,0 +1,11 @@
|
|||
host: http://localhost:10080
|
||||
|
||||
plugins:
|
||||
- beau-jwt:
|
||||
data:
|
||||
userId: 12
|
||||
name: Sergio
|
||||
secret: 'asdfasdf+asdfasdf/asdfasdfasdfasdf=='
|
||||
|
||||
GET /test:
|
||||
alias: test
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
"commander": "^2.9.0",
|
||||
"eyes": "^0.1.8",
|
||||
"js-yaml": "^3.7.0",
|
||||
"requireg": "^0.1.6",
|
||||
"unirest": "^0.5.1"
|
||||
},
|
||||
"repository": "git@github.com:Seich/Beau.git",
|
||||
|
|
|
|||
29
request.js
29
request.js
|
|
@ -5,8 +5,8 @@ const RequestCache = require('./requestCache');
|
|||
|
||||
class Request {
|
||||
constructor(req, list) {
|
||||
|
||||
let config = {};
|
||||
this.originalRequest = req;
|
||||
|
||||
Object.keys(req).forEach(k => config[k.toUpperCase()] = req[k]);
|
||||
|
||||
|
|
@ -53,16 +53,29 @@ class Request {
|
|||
return set;
|
||||
}
|
||||
|
||||
exec() {
|
||||
exec(modifiers = []) {
|
||||
let dependencies = Array.from(this.DEPENDENCIES);
|
||||
|
||||
return this.list.fetchDependencies(dependencies).then(cache => {
|
||||
let endpoint = cache.parse(this.ENDPOINT);
|
||||
let request = unirest(this.VERB, endpoint);
|
||||
let settings = {
|
||||
endpoint: cache.parse(this.ENDPOINT),
|
||||
method: this.VERB,
|
||||
headers: cache.parse(this.HEADERS),
|
||||
query: cache.parse(this.PARAMS),
|
||||
payload: cache.parse(this.PAYLOAD)
|
||||
};
|
||||
|
||||
request.headers(cache.parse(this.HEADERS));
|
||||
request.query(cache.parse(this.PARAMS));
|
||||
request.send(cache.parse(this.PAYLOAD));
|
||||
modifiers.forEach(mod => {
|
||||
if (typeof mod.preRequest !== 'undefined') {
|
||||
mod.preRequest(settings, this.originalRequest);
|
||||
}
|
||||
});
|
||||
|
||||
let request = unirest(settings.method, settings.endpoint);
|
||||
|
||||
request.headers(settings.headers);
|
||||
request.query(settings.query);
|
||||
request.send(settings.payload);
|
||||
|
||||
return new Promise((resolve, reject) => {
|
||||
request.end(res => {
|
||||
|
|
@ -75,7 +88,7 @@ class Request {
|
|||
request: {
|
||||
headers: res.request.headers,
|
||||
body: res.request.body,
|
||||
endpoint: endpoint
|
||||
endpoint: settings.endpoint
|
||||
},
|
||||
response: {
|
||||
status: res.status,
|
||||
|
|
|
|||
|
|
@ -1,10 +1,13 @@
|
|||
const Request = require('./request');
|
||||
const RequestCache = require('./requestCache');
|
||||
const httpVerbs = require('./shared').httpVerbs;
|
||||
const requireg = require('requireg');
|
||||
|
||||
class RequestList {
|
||||
constructor(doc = {}, config = {}) {
|
||||
this.config = config;
|
||||
|
||||
this.modifiers = this.loadPlugins();
|
||||
this.list = this.loadRequests(doc);
|
||||
this.cache = new RequestCache();
|
||||
}
|
||||
|
|
@ -17,7 +20,16 @@ class RequestList {
|
|||
}
|
||||
|
||||
return request
|
||||
.exec()
|
||||
.exec(this.modifiers)
|
||||
.then(res => {
|
||||
this.modifiers.forEach(mod => {
|
||||
if (typeof mod.postResponse !== 'undefined') {
|
||||
mod.postResponse(res);
|
||||
}
|
||||
});
|
||||
|
||||
return res;
|
||||
})
|
||||
.catch(reason => {
|
||||
return Promise
|
||||
.reject(`Request: ${request.VERB} ${request.ENDPOINT} FAILED. \n${reason}`);
|
||||
|
|
@ -46,6 +58,20 @@ class RequestList {
|
|||
return new Request(doc[key], this);
|
||||
});
|
||||
}
|
||||
|
||||
loadPlugins() {
|
||||
return this.config.PLUGINS.map(plugin => {
|
||||
let name = plugin;
|
||||
let settings = null;
|
||||
|
||||
if (typeof plugin === 'object') {
|
||||
name = Object.keys(plugin)[0];
|
||||
settings = plugin[name];
|
||||
}
|
||||
|
||||
return new (requireg(name))(settings)
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = RequestList;
|
||||
|
|
|
|||
34
yarn.lock
34
yarn.lock
|
|
@ -512,6 +512,10 @@ decamelize@^1.0.0, decamelize@^1.1.1:
|
|||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||
|
||||
deep-extend@~0.2.5:
|
||||
version "0.2.11"
|
||||
resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.2.11.tgz#7a16ba69729132340506170494bc83f7076fe08f"
|
||||
|
||||
deep-is@~0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
||||
|
|
@ -900,6 +904,10 @@ inherits@2, inherits@~2.0.1:
|
|||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||
|
||||
ini@~1.3.0:
|
||||
version "1.3.4"
|
||||
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e"
|
||||
|
||||
invariant@^2.2.0:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
|
||||
|
|
@ -1580,7 +1588,7 @@ minimatch@2.x:
|
|||
dependencies:
|
||||
brace-expansion "^1.0.0"
|
||||
|
||||
minimist@0.0.8, minimist@~0.0.1:
|
||||
minimist@0.0.8, minimist@~0.0.1, minimist@~0.0.7:
|
||||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||
|
||||
|
|
@ -1815,6 +1823,15 @@ randomatic@^1.1.3:
|
|||
is-number "^2.0.2"
|
||||
kind-of "^3.0.2"
|
||||
|
||||
rc@~1.0.0:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/rc/-/rc-1.0.3.tgz#51bf28d21f13a9324528a9633460161ad9a39f77"
|
||||
dependencies:
|
||||
deep-extend "~0.2.5"
|
||||
ini "~1.3.0"
|
||||
minimist "~0.0.7"
|
||||
strip-json-comments "0.1.x"
|
||||
|
||||
read-pkg-up@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
|
||||
|
|
@ -1906,10 +1923,21 @@ require-main-filename@^1.0.1:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
||||
|
||||
requireg@^0.1.6:
|
||||
version "0.1.6"
|
||||
resolved "https://registry.yarnpkg.com/requireg/-/requireg-0.1.6.tgz#205052aec2eaa2d8eb128abacf833b6a380a99b6"
|
||||
dependencies:
|
||||
rc "~1.0.0"
|
||||
resolve "~0.6.1"
|
||||
|
||||
resolve@1.1.7, resolve@1.1.x, resolve@^1.1.6:
|
||||
version "1.1.7"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
|
||||
|
||||
resolve@~0.6.1:
|
||||
version "0.6.3"
|
||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-0.6.3.tgz#dd957982e7e736debdf53b58a4dd91754575dd46"
|
||||
|
||||
right-align@^0.1.1:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
|
||||
|
|
@ -2046,6 +2074,10 @@ strip-bom@^2.0.0:
|
|||
dependencies:
|
||||
is-utf8 "^0.2.0"
|
||||
|
||||
strip-json-comments@0.1.x:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-0.1.3.tgz#164c64e370a8a3cc00c9e01b539e569823f0ee54"
|
||||
|
||||
supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||
|
|
|
|||
Loading…
Reference in New Issue