a-miyashita/gulp-custom-filter

View on GitHub
lib/basic-filters.js

Summary

Maintainability
C
1 day
Test Coverage
'use strict';

var Promise = Promise || require('promise');
var assertIsFunction = require('./assertions').isFunction;
var promisenize = require('./promisenize');

function not(fn) {
    assertIsFunction(fn, 'not', 'fn');
    return function(file, encode) {
        return promisenize(fn)(file, encode)
                .then(function(isTarget) {
                    return !isTarget;
                });
    };
}

function and() {
    var filters = Array.prototype.slice.call(arguments);
    return function(file, encode) {
        return Promise.all(filters.map(function(filter) {
            assertIsFunction(filter, 'and', 'filters');
            return promisenize(filter)(file, encode);
        }))
        .then(function(results) {
            return results.every(function(result) { return result; });
        });
    };
}

function or() {
    var filters = Array.prototype.slice.call(arguments);
    return function(file, encode) {
        return Promise.all(filters.map(function(filter) {
            assertIsFunction(filter, 'or', 'filters');
            return promisenize(filter)(file, encode);
        }))
        .then(function(results) {
            return results.some(function(result) { return result; });
        });
    };
}

function all() {
    return function() {
        return true;
    };
}

function none() {
    return function() {
        return false;
    };
}

module.exports = {
    not: not,
    and: and,
    or: or,
    all: all,
    none: none
};