added forFirst
This commit is contained in:
		
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@@ -2,6 +2,7 @@ node_modules/
 | 
				
			|||||||
.settings/
 | 
					.settings/
 | 
				
			||||||
.idea/
 | 
					.idea/
 | 
				
			||||||
coverage/
 | 
					coverage/
 | 
				
			||||||
 | 
					docs/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
ts/*.js
 | 
					ts/*.js
 | 
				
			||||||
ts/*.js.map
 | 
					ts/*.js.map
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -40,4 +40,4 @@ gulp.task('gulpTest',function() {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
> Note: The first argument of gulpFunction can also be an array of multiple functionnames.
 | 
					> Note: The first argument of gulpFunction can also be an array of multiple functionnames.
 | 
				
			||||||
Each function can return a promise. the pipe stop will finish when every promise is fullfilled.  
 | 
					Each function can return a promise. the pipe stop will finish when every promise is fullfilled.  
 | 
				
			||||||
> Note: the second argument can be empty (defaults to 'forEach') or 'atEnd'
 | 
					> Note: the second argument can be empty, "forEach" (default), "forFirst" or "atEnd";
 | 
				
			||||||
							
								
								
									
										67
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								dist/index.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										6
									
								
								index.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										6
									
								
								index.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +0,0 @@
 | 
				
			|||||||
/// <reference path="ts/typings/main.d.ts" />
 | 
					 | 
				
			||||||
declare var plugins: {
 | 
					 | 
				
			||||||
    beautylog: any;
 | 
					 | 
				
			||||||
    Q: any;
 | 
					 | 
				
			||||||
    through: any;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
							
								
								
									
										57
									
								
								index.js
									
									
									
									
									
								
							
							
						
						
									
										57
									
								
								index.js
									
									
									
									
									
								
							@@ -1,57 +0,0 @@
 | 
				
			|||||||
#!/usr/bin/env node
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
/// <reference path="typings/main.d.ts" />
 | 
					 | 
				
			||||||
var plugins = {
 | 
					 | 
				
			||||||
    beautylog: require("beautylog"),
 | 
					 | 
				
			||||||
    Q: require("q"),
 | 
					 | 
				
			||||||
    through: require("through2")
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
module.exports = function (functionsToExecuteArg, executionModeArg) {
 | 
					 | 
				
			||||||
    if (executionModeArg === void 0) { executionModeArg = 'forEach'; }
 | 
					 | 
				
			||||||
    //important vars
 | 
					 | 
				
			||||||
    var executionMode = executionModeArg; //can be forEach or atEnd
 | 
					 | 
				
			||||||
    var functionsToExecute = functionsToExecuteArg;
 | 
					 | 
				
			||||||
    var promiseArray = [];
 | 
					 | 
				
			||||||
    var runFunction = function (functionArg) {
 | 
					 | 
				
			||||||
        var returnValue = functionArg();
 | 
					 | 
				
			||||||
        if (typeof returnValue !== "undefined" && typeof returnValue.then !== "undefined") {
 | 
					 | 
				
			||||||
            promiseArray.push(returnValue);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    var checkAndRunFunction = function () {
 | 
					 | 
				
			||||||
        if (typeof functionsToExecute === "function") {
 | 
					 | 
				
			||||||
            runFunction(functionsToExecute);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else if (Array.isArray(functionsToExecute)) {
 | 
					 | 
				
			||||||
            for (var anyFunction in functionsToExecute) {
 | 
					 | 
				
			||||||
                runFunction(functionsToExecute[anyFunction]);
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            plugins.beautylog.error('gulp-callfunction: something is strange with the given arguments');
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        return plugins.Q.all(promiseArray);
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    var forEach = function (file, enc, cb) {
 | 
					 | 
				
			||||||
        if (executionMode === 'forEach') {
 | 
					 | 
				
			||||||
            checkAndRunFunction().then(function () {
 | 
					 | 
				
			||||||
                cb(null, file);
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            cb(null, file);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        //tell gulp that we are complete
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    var atEnd = function (cb) {
 | 
					 | 
				
			||||||
        if (executionMode === "atEnd") {
 | 
					 | 
				
			||||||
            checkAndRunFunction().then(function () {
 | 
					 | 
				
			||||||
                cb();
 | 
					 | 
				
			||||||
            });
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
        else {
 | 
					 | 
				
			||||||
            cb();
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    };
 | 
					 | 
				
			||||||
    return plugins.through.obj(forEach, atEnd);
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
@@ -2,7 +2,7 @@
 | 
				
			|||||||
  "name": "gulp-function",
 | 
					  "name": "gulp-function",
 | 
				
			||||||
  "version": "1.1.1",
 | 
					  "version": "1.1.1",
 | 
				
			||||||
  "description": "accepts a function call as parameter to execute in gulp pipeline",
 | 
					  "description": "accepts a function call as parameter to execute in gulp pipeline",
 | 
				
			||||||
  "main": "index.js",
 | 
					  "main": "dist/index.js",
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
    "test": "(npmts)",
 | 
					    "test": "(npmts)",
 | 
				
			||||||
    "reinstall": "(rm -r node_modules && npm install)",
 | 
					    "reinstall": "(rm -r node_modules && npm install)",
 | 
				
			||||||
@@ -18,19 +18,19 @@
 | 
				
			|||||||
    "gulp",
 | 
					    "gulp",
 | 
				
			||||||
    "function"
 | 
					    "function"
 | 
				
			||||||
  ],
 | 
					  ],
 | 
				
			||||||
  "author": "Smart Coordination GmbH <office@push.rocks> (https://push.rocks)",
 | 
					  "author": "Lossless GmbH <office@lossless.com> (https://lossless.com)",
 | 
				
			||||||
  "license": "MIT",
 | 
					  "license": "MIT",
 | 
				
			||||||
  "bugs": {
 | 
					  "bugs": {
 | 
				
			||||||
    "url": "https://github.com/pushrocks/gulp-function/issues"
 | 
					    "url": "https://github.com/pushrocks/gulp-function/issues"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "homepage": "https://github.com/pushrocks/gulp-function",
 | 
					  "homepage": "https://github.com/pushrocks/gulp-function",
 | 
				
			||||||
  "dependencies": {
 | 
					  "dependencies": {
 | 
				
			||||||
    "beautylog": "^2.1.1",
 | 
					    "beautylog": "^3.1.2",
 | 
				
			||||||
    "q": "^1.4.1",
 | 
					    "q": "^1.4.1",
 | 
				
			||||||
    "through2": "^2.0.1"
 | 
					    "through2": "^2.0.1"
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  "devDependencies": {
 | 
					  "devDependencies": {
 | 
				
			||||||
    "gulp": "^3.9.1",
 | 
					    "gulp": "^3.9.1",
 | 
				
			||||||
    "npmts": "^2.2.3"
 | 
					    "npmts": "^3.6.4"
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										8
									
								
								test/test.d.ts
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										8
									
								
								test/test.d.ts
									
									
									
									
										vendored
									
									
								
							@@ -1,8 +0,0 @@
 | 
				
			|||||||
/// <reference path="ts/typings/main.d.ts" />
 | 
					 | 
				
			||||||
declare var gulp: any;
 | 
					 | 
				
			||||||
declare var gulpFunction: any;
 | 
					 | 
				
			||||||
declare var beautylog: any;
 | 
					 | 
				
			||||||
declare var Q: any;
 | 
					 | 
				
			||||||
declare var myFunction: () => any;
 | 
					 | 
				
			||||||
declare var myFunction2: () => any;
 | 
					 | 
				
			||||||
declare var myFunction3: () => any;
 | 
					 | 
				
			||||||
							
								
								
									
										65
									
								
								test/test.js
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								test/test.js
									
									
									
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								test/test.js.map
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								test/test.js.map
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}
 | 
				
			||||||
							
								
								
									
										118
									
								
								test/test.ts
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										118
									
								
								test/test.ts
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,118 @@
 | 
				
			|||||||
 | 
					/// <reference path="../ts/typings/main.d.ts" />
 | 
				
			||||||
 | 
					var gulp = require("gulp");
 | 
				
			||||||
 | 
					var gulpFunction = require("../dist/index.js");
 | 
				
			||||||
 | 
					var beautylog = require("beautylog");
 | 
				
			||||||
 | 
					var Q = require("q");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var myFunction = function () {
 | 
				
			||||||
 | 
					    var done = Q.defer()
 | 
				
			||||||
 | 
					    beautylog.log("Function executed");
 | 
				
			||||||
 | 
					    done.resolve();
 | 
				
			||||||
 | 
					    return done.promise;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					var myFunction2 = function () {
 | 
				
			||||||
 | 
					    var done = Q.defer();
 | 
				
			||||||
 | 
					    beautylog.ok("Function2 executed");
 | 
				
			||||||
 | 
					    done.resolve();
 | 
				
			||||||
 | 
					    return done.promise;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					var myFunction3 = function () {
 | 
				
			||||||
 | 
					    var done = Q.defer();
 | 
				
			||||||
 | 
					    beautylog.success("Function3 executed");
 | 
				
			||||||
 | 
					    done.resolve();
 | 
				
			||||||
 | 
					    return done.promise;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var beforeFunction = function () {
 | 
				
			||||||
 | 
					    var done = Q.defer();
 | 
				
			||||||
 | 
					    beautylog.success("beforeFunction executed");
 | 
				
			||||||
 | 
					    done.resolve();
 | 
				
			||||||
 | 
					    return done.promise;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var middleFunctionRun = false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var middleFunction = function () {
 | 
				
			||||||
 | 
					    var done = Q.defer();
 | 
				
			||||||
 | 
					    beautylog.success("middleFunction executed");
 | 
				
			||||||
 | 
					    setTimeout(function(){
 | 
				
			||||||
 | 
					        beautylog.log("timeout fired");
 | 
				
			||||||
 | 
					        middleFunctionRun = true;
 | 
				
			||||||
 | 
					        done.resolve();
 | 
				
			||||||
 | 
					    }, 500);
 | 
				
			||||||
 | 
					    return done.promise;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					var afterFunction = function () {
 | 
				
			||||||
 | 
					    var done = Q.defer();
 | 
				
			||||||
 | 
					    beautylog.success("afterFunction executed");
 | 
				
			||||||
 | 
					    done.resolve();
 | 
				
			||||||
 | 
					    return done.promise;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					let timeoutFunction = function(){
 | 
				
			||||||
 | 
					    var done = Q.defer();
 | 
				
			||||||
 | 
					    setTimeout(function(){
 | 
				
			||||||
 | 
					        beautylog.log("largeTimeout fired");
 | 
				
			||||||
 | 
					        done.resolve();
 | 
				
			||||||
 | 
					    },2000);
 | 
				
			||||||
 | 
					    return done.promise;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					describe("gulpFunction",function(){
 | 
				
			||||||
 | 
					    it("should run through smoothly with " + "'forEach'".blue,function(done){
 | 
				
			||||||
 | 
					        gulp.src('./test/*.md')
 | 
				
			||||||
 | 
					            .pipe(gulpFunction(myFunction,'forEach'))
 | 
				
			||||||
 | 
					            .pipe(gulp.dest("./test/result/"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        gulp.src('./test/*.md')
 | 
				
			||||||
 | 
					            .pipe(gulpFunction([myFunction2,myFunction3],'forEach'))
 | 
				
			||||||
 | 
					            .pipe(gulp.dest("./test/result/"))
 | 
				
			||||||
 | 
					            .pipe(gulpFunction(done,"atEnd"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it("should run through smoothly with " + "'atEnd'".blue,function(done){
 | 
				
			||||||
 | 
					        gulp.src('./test/*.md')
 | 
				
			||||||
 | 
					            .pipe(gulpFunction(myFunction,'atEnd'))
 | 
				
			||||||
 | 
					            .pipe(gulp.dest("./test/result/"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        gulp.src('./test/*.md')
 | 
				
			||||||
 | 
					            .pipe(gulpFunction([myFunction2,myFunction3],'atEnd'))
 | 
				
			||||||
 | 
					            .pipe(gulp.dest("./test/result/"))
 | 
				
			||||||
 | 
					            .pipe(gulpFunction(done,"atEnd"));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it("should run through smoothly once with " + "'atFirst'".blue,function(done){
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        gulp.src('./test/*.md')
 | 
				
			||||||
 | 
					            .pipe(gulpFunction([myFunction2,myFunction3],'forFirst'))
 | 
				
			||||||
 | 
					            .pipe(gulp.dest("./test/result/"))
 | 
				
			||||||
 | 
					            .pipe(gulpFunction(done,"atEnd"));
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    it("should run in order",function(done){
 | 
				
			||||||
 | 
					        this.timeout(5000);
 | 
				
			||||||
 | 
					        let stream = gulp.src('./test/*.md')
 | 
				
			||||||
 | 
					            .pipe(gulpFunction([beforeFunction,middleFunction,middleFunction],'atEnd'))
 | 
				
			||||||
 | 
					            .pipe(gulpFunction(function(){
 | 
				
			||||||
 | 
					                beautylog.log("stream progressed");
 | 
				
			||||||
 | 
					                var done2 = Q.defer();
 | 
				
			||||||
 | 
					                done2.resolve();
 | 
				
			||||||
 | 
					                return done2.promise;
 | 
				
			||||||
 | 
					            },"forEach"))
 | 
				
			||||||
 | 
					            .pipe(gulpFunction(function(){
 | 
				
			||||||
 | 
					                beautylog.log("nextStep");
 | 
				
			||||||
 | 
					            }))
 | 
				
			||||||
 | 
					            .pipe(gulpFunction(afterFunction,"atEnd"))
 | 
				
			||||||
 | 
					            .pipe(gulpFunction(timeoutFunction,"atEnd"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        stream.on("finish",function(){
 | 
				
			||||||
 | 
					            beautylog.info("stream finished");
 | 
				
			||||||
 | 
					            done();
 | 
				
			||||||
 | 
					        });
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										43
									
								
								ts/index.ts
									
									
									
									
									
								
							
							
						
						
									
										43
									
								
								ts/index.ts
									
									
									
									
									
								
							@@ -11,21 +11,21 @@ var plugins = {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
module.exports = function (functionsToExecuteArg:any|any[],executionModeArg:string = 'forEach') {
 | 
					module.exports = function (functionsToExecuteArg:any|any[],executionModeArg:string = 'forEach') {
 | 
				
			||||||
    //important vars
 | 
					    //important vars
 | 
				
			||||||
    var executionMode = executionModeArg; //can be forEach or atEnd
 | 
					    let executionMode = executionModeArg; //can be forEach or atEnd
 | 
				
			||||||
    var functionsToExecute = functionsToExecuteArg;
 | 
					    let functionsToExecute = functionsToExecuteArg;
 | 
				
			||||||
    var promiseArray = [];
 | 
					    let promiseArray = [];
 | 
				
			||||||
    var runFunction = function(functionArg){
 | 
					    let runFunction = function(functionArg){
 | 
				
			||||||
        var returnValue = functionArg();
 | 
					        let returnValue = functionArg();
 | 
				
			||||||
        if (typeof returnValue !== "undefined" && typeof returnValue.then !== "undefined") {
 | 
					        if (typeof returnValue !== "undefined" && typeof returnValue.then !== "undefined") {
 | 
				
			||||||
            promiseArray.push(returnValue);
 | 
					            promiseArray.push(returnValue);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var checkAndRunFunction = function () {
 | 
					    let checkAndRunFunction = function () {
 | 
				
			||||||
        if (typeof functionsToExecute === "function" ) {
 | 
					        if (typeof functionsToExecute === "function" ) {
 | 
				
			||||||
            runFunction(functionsToExecute);
 | 
					            runFunction(functionsToExecute);
 | 
				
			||||||
        } else if (Array.isArray(functionsToExecute)) {
 | 
					        } else if (Array.isArray(functionsToExecute)) {
 | 
				
			||||||
            for (var anyFunction in functionsToExecute) {
 | 
					            for (let anyFunction in functionsToExecute) {
 | 
				
			||||||
                runFunction(functionsToExecute[anyFunction]);
 | 
					                runFunction(functionsToExecute[anyFunction]);
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        } else {
 | 
					        } else {
 | 
				
			||||||
@@ -34,20 +34,29 @@ module.exports = function (functionsToExecuteArg:any|any[],executionModeArg:stri
 | 
				
			|||||||
        return plugins.Q.all(promiseArray);
 | 
					        return plugins.Q.all(promiseArray);
 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let hasExecutedOnce = false;
 | 
				
			||||||
    var forEach = function (file, enc, cb) {
 | 
					    let forEach = function (file, enc, cb) { //the forEach function is called for every chunk
 | 
				
			||||||
        if (executionMode === 'forEach') {
 | 
					        switch (executionMode){
 | 
				
			||||||
            checkAndRunFunction().then(function(){
 | 
					            case "forEach":
 | 
				
			||||||
 | 
					                checkAndRunFunction().then(function(){
 | 
				
			||||||
 | 
					                    cb(null, file);
 | 
				
			||||||
 | 
					                });
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case "forFirst":
 | 
				
			||||||
 | 
					                !hasExecutedOnce ? checkAndRunFunction().then(function(){
 | 
				
			||||||
 | 
					                    cb(null, file);
 | 
				
			||||||
 | 
					                }) : cb(null, file);
 | 
				
			||||||
 | 
					                hasExecutedOnce = true;
 | 
				
			||||||
 | 
					                break;
 | 
				
			||||||
 | 
					            case "atEnd":
 | 
				
			||||||
                cb(null, file);
 | 
					                cb(null, file);
 | 
				
			||||||
            });
 | 
					                break;
 | 
				
			||||||
        } else {
 | 
					            default:
 | 
				
			||||||
            cb(null, file);
 | 
					                break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        //tell gulp that we are complete
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    };
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    var atEnd = function(cb) {
 | 
					    let atEnd = function(cb) {
 | 
				
			||||||
        if (executionMode === "atEnd") {
 | 
					        if (executionMode === "atEnd") {
 | 
				
			||||||
            checkAndRunFunction().then(function(){
 | 
					            checkAndRunFunction().then(function(){
 | 
				
			||||||
                cb();
 | 
					                cb();
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										50
									
								
								ts/test.ts
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								ts/test.ts
									
									
									
									
									
								
							@@ -1,50 +0,0 @@
 | 
				
			|||||||
/// <reference path="typings/main.d.ts" />
 | 
					 | 
				
			||||||
var gulp = require("gulp");
 | 
					 | 
				
			||||||
var gulpFunction = require("../index.js");
 | 
					 | 
				
			||||||
var beautylog = require("beautylog");
 | 
					 | 
				
			||||||
var Q = require("q");
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var myFunction = function () {
 | 
					 | 
				
			||||||
    var done = Q.defer()
 | 
					 | 
				
			||||||
    beautylog.log("Function executed");
 | 
					 | 
				
			||||||
    done.resolve();
 | 
					 | 
				
			||||||
    return done.promise;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
var myFunction2 = function () {
 | 
					 | 
				
			||||||
    var done = Q.defer();
 | 
					 | 
				
			||||||
    beautylog.ok("Function2 executed");
 | 
					 | 
				
			||||||
    done.resolve();
 | 
					 | 
				
			||||||
    return done.promise;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
var myFunction3 = function () {
 | 
					 | 
				
			||||||
    var done = Q.defer();
 | 
					 | 
				
			||||||
    beautylog.success("Function3 executed");
 | 
					 | 
				
			||||||
    done.resolve();
 | 
					 | 
				
			||||||
    return done.promise;
 | 
					 | 
				
			||||||
};
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
describe("gulpFunction",function(){
 | 
					 | 
				
			||||||
    it("should run through smoothly with " + "'forEach'".blue,function(done){
 | 
					 | 
				
			||||||
        gulp.src('./test/*.md')
 | 
					 | 
				
			||||||
            .pipe(gulpFunction(myFunction,'forEach'))
 | 
					 | 
				
			||||||
            .pipe(gulp.dest("./test/result/"));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        gulp.src('./test/*.md')
 | 
					 | 
				
			||||||
            .pipe(gulpFunction([myFunction2,myFunction3],'forEach'))
 | 
					 | 
				
			||||||
            .pipe(gulp.dest("./test/result/"))
 | 
					 | 
				
			||||||
            .pipe(gulpFunction(done,"atEnd"));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    it("should run through smoothly with " + "'atEnd'".blue,function(done){
 | 
					 | 
				
			||||||
        gulp.src('./test/*.md')
 | 
					 | 
				
			||||||
            .pipe(gulpFunction(myFunction,'atEnd'))
 | 
					 | 
				
			||||||
            .pipe(gulp.dest("./test/result/"));
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        gulp.src('./test/*.md')
 | 
					 | 
				
			||||||
            .pipe(gulpFunction([myFunction2,myFunction3],'atEnd'))
 | 
					 | 
				
			||||||
            .pipe(gulp.dest("./test/result/"))
 | 
					 | 
				
			||||||
            .pipe(gulpFunction(done,"atEnd"));
 | 
					 | 
				
			||||||
    });
 | 
					 | 
				
			||||||
});
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		Reference in New Issue
	
	Block a user