all files / saguaro/lib/ is.js

100% Statements 37/37
100% Branches 24/24
100% Functions 4/4
100% Lines 37/37
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83        540×     538×             538× 538×   4179× 215×     4179× 215×     4179× 562× 562×         538×   560× 560×   560× 211× 211×     560×   560×     560×   560×     560×     538×           541× 540×           51×      
 
var checkers = require('./checkers'),
    utils = require('./utils');
 
function parseIs(data, filters) {
    
    if (typeof filters == 'function') {
        return filters(data) == true;
    }
    
    var 
        result = false,
        isNegate = false,
        filter,
        argsFilter,
        arrFilters = [];
    
    var lastPos = 0, nbOpenedBrackets = 0;
    for (var i = 0, strLength = filters.length; i < strLength; i++) {
 
        if (filters.charAt(i) === '(') {
            ++nbOpenedBrackets;
        }
        
        if (filters.charAt(i) === ')' && i > 1 && filters.charAt(i - 1) !== '\\') {
            --nbOpenedBrackets;
        }
 
        if ((filters.charAt(i + 1) === ',' && nbOpenedBrackets === 0) || i == strLength - 1) {
            arrFilters.push(filters.substring(lastPos, i + 1));
            lastPos = i + 2;
        }
 
    }
 
    arrFilters.some(function (v) {
 
        filter = v.trim().toLowerCase();
        argsFilter = [];
 
        if (v.indexOf('(') > -1) {
            filter = v.substring(0, v.indexOf('(')).trim();
            argsFilter = v.substring(v.indexOf('(') + 1, v.length - 1).trim().split(',');
        }
        
        isNegate = false;
        
        if (filter.charAt(0) === '!') {
            isNegate = true;
            filter = filter.substr(1);
        }
        
        result = typeof checkers[filter] != 'undefined' && checkers[filter].apply(this, [data, argsFilter]);
 
        if (isNegate) {
            result = !result;
        }
 
        return result === false;
    });
    
    return result;
};
 
 
 
function is(data, filters) {
 
    if (typeof filters != 'undefined') {
        return parseIs(data, filters);
    }
 
    return true;
}
    
is.prototype = checkers;
 
Object.keys(checkers).forEach(function (key) {
    is[key] = checkers[key];
});
 
module.exports = is;