apigeek-architect
Version:
Executable English for Software Teams
104 lines (84 loc) • 3.49 kB
JavaScript
var pkg = require("../../package");
var assert = require("assert");
var ApiGeek = require("meta4qa"), _ = ApiGeek._, cli = ApiGeek.cli, Dialect = ApiGeek.Dialect, Runtime = ApiGeek.Runtime, Engine = ApiGeek.Engine, helps = ApiGeek.helpers;
var util = require("util");
var helper = require("./helper");
// local (runtime) logging
var debug = require("debug")("apigeek:daemon:audit");
module.exports = function(apigeek, transforms) {
assert(apigeek, "Missing ApiGeek");
assert(apigeek.dialect, "Missing ApiGeek Dialect");
assert(apigeek.config, "Missing ApiGeek Config");
assert(apigeek.logger, "Missing ApiGeek Logger");
var logger = apigeek.logger;
var controller = {};
transforms = _.extend({
defaults: function(v,k,l) {
return v;
},
exhibit: function(v,k,l) {
v.label = v.title;
v.type = "feature";
delete v.title;
return v;
},
knows2ace: function(v,k,l) {
return { name: v, value: v, score: 10, meta: "dialect-phrase"}
}
},transforms);
controller.parser = function(type, path, options) {
assert(type, "Missing type");
assert(path, "Missing path: "+path);
var transformer = transforms[type]
assert(transformer, "Missing transformer: "+type);
return function(req, res, next) {
assert(req.params, "Missing Request Parameters");
var config = _.extend({}, apigeek.config, options, { reporter: "simple" });
// execution-specific config
var featureName = req.params[0] || "";
var featuresFile = path+"/"+featureName;
debug("%s API: %s", type, featuresFile);
// allow query parameters to over-ride defaults
_.each(req.query, function(v,k) {
helps.vars.set(config, k, v);
});
// run the features
try {
var audit = apigeek.dialect.audit(featuresFile);
_.map(audit, transformer);
res.json( { items: audit });
} catch (e) {
helper.handleError(e, res, "AUDIT", logger);
}
}
}
controller.knows_ace = function() {
return function(req, res, next) {
debug("knows params: %j", req.query);
var prefix = req.query.prefix || "";
var regex = new RegExp(prefix+"*", "i");
try {
debug("knows_ace");
var knows = apigeek.dialect.knows();
debug("knows: %j", _.keys(knows) );
var auto_complete = [];
_.each(knows.given, function(phrase) {
if (regex.test(phrase))
auto_complete.push({ name: phrase, value: phrase, score: 10, meta: "given" });
})
_.each(knows.when, function(phrase) {
if (regex.test(phrase))
auto_complete.push({ name: phrase, value: phrase, score: 10, meta: "when" });
})
_.each(knows.then, function(phrase) {
if (regex.test(phrase))
auto_complete.push({ name: phrase, value: phrase, score: 10, meta: "then" });
})
res.json( auto_complete );
} catch (e) {
helper.handleError(e, res, "KNOWS", logger);
}
}
}
return controller;
}