Source: resource/module/jam.js

/**
 * Module that provides means to check/search in {@link http://jamjs.org Jam}.
 * 
 * @module jam
 */


"use strict";

require("jamjs");

var repository = require("jamjs/lib/repository"),
    repositoryUrl = require("jamjs/lib/jamrc").DEFAULTS.repositories[0],
    mixing = require("mixing"),
    util = require("../util");

/**
 * Check whether package with the specified name is existent, or make search for the specified string.
 * 
 * Data about found packages will be passed into callback as array.
 * If no package is found, empty array will be passed into callback.
 * 
 * @param {String} name
 *      Name of the package to check or string to search for.
 * @param {Function} callback
 *      Function that should be called to process operation's result.
 * @param {Object} [settings]
 *      Operation settings.
 *      The following settings are supported (name - type - description):
        <ul>
        <li><code>caseSensitive</code> - <code>Boolean</code> - Whether case-sensitive check/search should be used
        <li><code>partialMatch</code> - <code>Integer</code> - Allow partial matching when checking name: 
            0 - disallow (by default), 1 - allow at the beginning of matching strings, 2 - allow substring matching
        <li><code>search</code> - <code>Boolean</code> - Whether search should be made instead of check
        <li><code>limit</code> - <code>Integer</code> - Limit of quantity of results
        </ul>
 */
exports.detect = function(name, callback, settings) {
    
    function resultCallback(err, data) {
        var result = [],
            bRealSearch, nI, nL, pkg, version;
        if (data) {
            bRealSearch = util.isRealSearchSet(settings);
            if (bSearch) {
                data = data.rows;
            }
            else {
                data = [data];
            }
            for (nI = 0, nL = data.length; nI < nL; nI++) {
                pkg = data[nI];
                if (bSearch) {
                    pkg = pkg.doc;
                }
                if ( bRealSearch || util.isStringMatch(pkg.name, name, settings) ) {
                    result.push(pkg);
                    if (pkg.tags && (version = pkg.tags.latest) && (version = pkg.versions[version])) {
                        mixing(pkg, version);
                    }
                    if (pkg.homepage && ! pkg.url) {
                        pkg.url = pkg.homepage;
                    }
                    if (result.length === nLimit) {
                        break;
                    }
                }
            }
        }
        callback(err, result);
    }
    
    var bSearch = util.isSearchSet(settings),
        nLimit = util.getLimit(settings, 100);
    if (bSearch) {
        repository.search(repositoryUrl, name, nLimit < 50 ? 100 : nLimit * 2, resultCallback);
    }
    else {
        repository.get(repositoryUrl, name, resultCallback);
    }
};
Copyright (c) 2014 Denis Sikuler
Documentation generated by JSDoc 3.2.2 on Thu Aug 21 2014 23:46:51 GMT+0400 (MSK) using the DocStrap template.