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",
|
"commander": "^2.9.0",
|
||||||
"eyes": "^0.1.8",
|
"eyes": "^0.1.8",
|
||||||
"js-yaml": "^3.7.0",
|
"js-yaml": "^3.7.0",
|
||||||
|
"requireg": "^0.1.6",
|
||||||
"unirest": "^0.5.1"
|
"unirest": "^0.5.1"
|
||||||
},
|
},
|
||||||
"repository": "git@github.com:Seich/Beau.git",
|
"repository": "git@github.com:Seich/Beau.git",
|
||||||
|
|
|
||||||
29
request.js
29
request.js
|
|
@ -5,8 +5,8 @@ const RequestCache = require('./requestCache');
|
||||||
|
|
||||||
class Request {
|
class Request {
|
||||||
constructor(req, list) {
|
constructor(req, list) {
|
||||||
|
|
||||||
let config = {};
|
let config = {};
|
||||||
|
this.originalRequest = req;
|
||||||
|
|
||||||
Object.keys(req).forEach(k => config[k.toUpperCase()] = req[k]);
|
Object.keys(req).forEach(k => config[k.toUpperCase()] = req[k]);
|
||||||
|
|
||||||
|
|
@ -53,16 +53,29 @@ class Request {
|
||||||
return set;
|
return set;
|
||||||
}
|
}
|
||||||
|
|
||||||
exec() {
|
exec(modifiers = []) {
|
||||||
let dependencies = Array.from(this.DEPENDENCIES);
|
let dependencies = Array.from(this.DEPENDENCIES);
|
||||||
|
|
||||||
return this.list.fetchDependencies(dependencies).then(cache => {
|
return this.list.fetchDependencies(dependencies).then(cache => {
|
||||||
let endpoint = cache.parse(this.ENDPOINT);
|
let settings = {
|
||||||
let request = unirest(this.VERB, endpoint);
|
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));
|
modifiers.forEach(mod => {
|
||||||
request.query(cache.parse(this.PARAMS));
|
if (typeof mod.preRequest !== 'undefined') {
|
||||||
request.send(cache.parse(this.PAYLOAD));
|
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) => {
|
return new Promise((resolve, reject) => {
|
||||||
request.end(res => {
|
request.end(res => {
|
||||||
|
|
@ -75,7 +88,7 @@ class Request {
|
||||||
request: {
|
request: {
|
||||||
headers: res.request.headers,
|
headers: res.request.headers,
|
||||||
body: res.request.body,
|
body: res.request.body,
|
||||||
endpoint: endpoint
|
endpoint: settings.endpoint
|
||||||
},
|
},
|
||||||
response: {
|
response: {
|
||||||
status: res.status,
|
status: res.status,
|
||||||
|
|
|
||||||
|
|
@ -1,10 +1,13 @@
|
||||||
const Request = require('./request');
|
const Request = require('./request');
|
||||||
const RequestCache = require('./requestCache');
|
const RequestCache = require('./requestCache');
|
||||||
const httpVerbs = require('./shared').httpVerbs;
|
const httpVerbs = require('./shared').httpVerbs;
|
||||||
|
const requireg = require('requireg');
|
||||||
|
|
||||||
class RequestList {
|
class RequestList {
|
||||||
constructor(doc = {}, config = {}) {
|
constructor(doc = {}, config = {}) {
|
||||||
this.config = config;
|
this.config = config;
|
||||||
|
|
||||||
|
this.modifiers = this.loadPlugins();
|
||||||
this.list = this.loadRequests(doc);
|
this.list = this.loadRequests(doc);
|
||||||
this.cache = new RequestCache();
|
this.cache = new RequestCache();
|
||||||
}
|
}
|
||||||
|
|
@ -17,7 +20,16 @@ class RequestList {
|
||||||
}
|
}
|
||||||
|
|
||||||
return request
|
return request
|
||||||
.exec()
|
.exec(this.modifiers)
|
||||||
|
.then(res => {
|
||||||
|
this.modifiers.forEach(mod => {
|
||||||
|
if (typeof mod.postResponse !== 'undefined') {
|
||||||
|
mod.postResponse(res);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return res;
|
||||||
|
})
|
||||||
.catch(reason => {
|
.catch(reason => {
|
||||||
return Promise
|
return Promise
|
||||||
.reject(`Request: ${request.VERB} ${request.ENDPOINT} FAILED. \n${reason}`);
|
.reject(`Request: ${request.VERB} ${request.ENDPOINT} FAILED. \n${reason}`);
|
||||||
|
|
@ -46,6 +58,20 @@ class RequestList {
|
||||||
return new Request(doc[key], this);
|
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;
|
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"
|
version "1.2.0"
|
||||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
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:
|
deep-is@~0.1.3:
|
||||||
version "0.1.3"
|
version "0.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34"
|
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"
|
version "2.0.3"
|
||||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
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:
|
invariant@^2.2.0:
|
||||||
version "2.2.2"
|
version "2.2.2"
|
||||||
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
|
resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.2.tgz#9e1f56ac0acdb6bf303306f338be3b204ae60360"
|
||||||
|
|
@ -1580,7 +1588,7 @@ minimatch@2.x:
|
||||||
dependencies:
|
dependencies:
|
||||||
brace-expansion "^1.0.0"
|
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"
|
version "0.0.8"
|
||||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
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"
|
is-number "^2.0.2"
|
||||||
kind-of "^3.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:
|
read-pkg-up@^1.0.1:
|
||||||
version "1.0.1"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02"
|
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"
|
version "1.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1"
|
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:
|
resolve@1.1.7, resolve@1.1.x, resolve@^1.1.6:
|
||||||
version "1.1.7"
|
version "1.1.7"
|
||||||
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b"
|
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:
|
right-align@^0.1.1:
|
||||||
version "0.1.3"
|
version "0.1.3"
|
||||||
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
|
resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef"
|
||||||
|
|
@ -2046,6 +2074,10 @@ strip-bom@^2.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-utf8 "^0.2.0"
|
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:
|
supports-color@^2.0.0:
|
||||||
version "2.0.0"
|
version "2.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue