hybridgroup/cylon

View on GitHub
lib/api.js

Summary

Maintainability
A
1 hr
Test Coverage
"use strict";

var MCP = require("./mcp"),
    Logger = require("./logger"),
    _ = require("./utils/helpers");

var api = module.exports = {};

api.instances = [];

/**
 * Creates a new API instance
 *
 * @param {String} [Server] which API plugin to use (e.g. "http" loads
 * cylon-api-http)
 * @param {Object} opts options for the new API instance
 * @return {void}
 */
api.create = function create(Server, opts) {
  // if only passed options (or nothing), assume HTTP server
  if (Server == null || _.isObject(Server) && !_.isFunction(Server)) {
    opts = Server;
    Server = "http";
  }

  opts = opts || {};

  if (_.isString(Server)) {
    var req = "cylon-api-" + Server;

    try {
      Server = require(req);
    } catch (e) {
      if (e.code !== "MODULE_NOT_FOUND") {
        throw e;
      }

      [
        "Cannot find the " + req + " API module.",
        "You may be able to install it: `npm install " + req + "`"
      ].forEach(Logger.log);

      throw new Error("Missing API plugin - cannot proceed");
    }
  }

  opts.mcp = MCP;

  var instance = new Server(opts);
  api.instances.push(instance);
  instance.start();
};