apigeek-architect
Version:
Executable English for Software Teams
82 lines (60 loc) • 2.27 kB
JavaScript
var assert = require("assert");
var ApiGeek = require("meta4qa"), _ = ApiGeek._, cli = ApiGeek.cli, Dialect = ApiGeek.Dialect, Runtime = ApiGeek.Runtime, helps = ApiGeek.helpers;
var util = require("util");
var helper = require("./helper");
var marked = require("marked");
var express = require('express');
var debug = require("debug")("apigeek:asbuilt");
// remote (results) logging
module.exports = function(apigeek) {
assert(apigeek, "Missing ApiGeek");
assert(apigeek.dialect, "Missing ApiGeek Dialect");
assert(apigeek.config, "Missing ApiGeek Config");
assert(apigeek.logger, "Missing ApiGeek Logger");
var docs = apigeek.config.paths.docs;
var api = {};
var logger = apigeek.logger;
var to_html = {};
to_html.md = function (path, context) {
assert(path, "Missing path");
var md = helps.files.load(path);
var html = marked (md);
return html;
};
to_html.default = function(path, context) {
assert(path, "Missing path");
debug("load from: %s", path);
try {
var txt = helps.files.load(path);
return txt;
} catch(e) {
return false;
}
};
api.static = function (rootDir) {
debug("static from: %s",rootDir);
return express.static(rootDir);
};
api.render = function(rootDir, defaultExtn, view) {
assert(rootDir, "Missing render root folder");
view = view || "main";
debug("renders %s with %s", rootDir, view);
return function (req, res) {
assert(req.params, "Missing path param");
var file = req.params[0] || "index.html" ;
if (defaultExtn && file.indexOf(".")<0) file = file+"."+defaultExtn;
var extn = defaultExtn || helps.files.extension(file) || "default";
var renderer = to_html[extn] || to_html.default;
var path = helps.files.path(rootDir, file);
var context = {};
debug("rendered %s from: %s", extn, path);
var body = renderer(path, context);
if (body) {
res.render (view, {"body": body});
} else {
res.status(404);
}
}
};
return api;
};