Source: format/index.js

/**
 * API to work with formatters that can be used to format result of {@link module:seeq.search search}.
 * <br>
 * Each formatter is a function that should return string representing result of search.
 * The following parameters are passed to the format function:
   <ul>
   <li>object that is result of {@link module:seeq.search search}
   <li>object that represents format settings; the following settings can be used (name - type - description):
       <ul>
       <li><code>queryList</code> - <code>Array</code> - list of names/strings that were checked/searched
       <li><code>verbose</code> - <code>boolean</code> - whether basic or detailed result should be returned
       </ul>
   </ul>
 * 
 * @module format
 */


"use strict";

var formatMap = {};


/**
 * Format result of search by using specified formatter.
 * 
 * @param {Object} data
 *      Result of {@link module:seeq.search search}.
 * @param {String} name
 *      Name of formatter that should be used.
 * @param {Object} [settings]
 *      Format settings. Default values for settings are the following:
        <ul>
        <li><code>queryList</code> - extracted from <code>data</code> parameter
        <li><code>verbose</code> - <code>false</code>
        </ul>
 * @return {String}
 *      Result returned by specified formatter or empty string if no one of formatters has the specified name.
 * @alias module:format.format
 */
function format(data, name, settings) {
    var fmt = formatMap[name];
    if (! settings) {
        settings = {};
    }
    if (! settings.queryList) {
        settings.queryList = Object.keys(data);
    }
    else if (! Array.isArray(settings.queryList)) {
        settings.queryList = [settings.queryList];
    }
    if (! ("verbose" in settings)) {
        settings.verbose = false;
    }
    return fmt ? fmt(data, settings) : "";
}

/**
 * Return formatter with specified name.
 * 
 * @param {String} name
 *      Name of formatter that should be returned.
 * @return {Function | null}
 *      Function that represents formatter
 *      or <code>null</code> if no one of formatters has the specified name.
 * @alias module:format.get
 */
function get(name) {
    return formatMap[name] || null;
}

/**
 * Check whether formatter with specified name exists.
 * 
 * @param {String} name
 *      Name that should be checked.
 * @return {Boolean}
 *      <code>true</code> if there is a formatter with the specified name,
 *      <code>false</code> if no one of formatters has the specified name.
 * @alias module:format.exists
 * @see {@link module:format.get get}
 */
function exists(name) {
    return get(name) !== null;
}

/**
 * Return object that represents all available formatters.
 * 
 * @return {Object}
 *      Object that represents all available formatters.
 *      Fields are names of formatters, values are corresponding formatters.
 * @alias module:format.getMap
 */
function getMap() {
    return formatMap;
}

/**
 * Return list containing names of all available formatters.
 * 
 * @return {Array}
 *      List containing names of all available formatters.
 * @alias module:format.getNameList
 */
function getNameList() {
    var result = [],
        sName;
    for (sName in formatMap) {
        result.push(sName);
    }
    return result;
}

/**
 * Set formatter with specified name.
 * 
 * @param {String} name
 *      Name of formatter.
 * @param {Function | null} format
 *      Function that represents formatter.
 * @return {Object}
 *      Object that represents module <code>exports</code>.
 * @throws Will throw an error if format is not a function.
 * @alias module:format.set
 */
function set(name, format) {
    /*jshint newcap:false*/
    if (typeof format !== "function") {
        throw Error("Format should be a function");
    }
    formatMap[name] = format;
    return exports;
}

/**
 * Remove formatter with specified name.
 * 
 * @param {String} name
 *      Name of formatter.
 * @return {Function | null}
 *      Function that represents formatter
 *      or <code>null</code> if no one of formatters has the specified name.
 * @alias module:format.remove
 */
function remove(name) {
    var format = formatMap[name] || null;
    if (format) {
        delete formatMap[name];
    }
    return format;
}

// Set predefined formatters
set("text", require("./text"));
set("json", require("./json"));
set("markdown", require("./markdown"));
set("raw", require("./raw"));

//Exports

exports.format = format;
exports.get = get;
exports.exists = exists;
exports.getMap = getMap;
exports.getNameList = getNameList;
exports.set = set;
exports.remove = remove;
Copyright (c) 2014 Denis Sikuler
Documentation generated by JSDoc 3.2.2 on Sun Jul 13 2014 23:52:09 GMT+0400 (MSK) using the DocStrap template.