Skip to content

Instantly share code, notes, and snippets.

@jfarid27
Created January 14, 2015 23:13
Show Gist options
  • Save jfarid27/744c3a69fe88464603ab to your computer and use it in GitHub Desktop.
Save jfarid27/744c3a69fe88464603ab to your computer and use it in GitHub Desktop.
prototype gulpfile.js
var gulp = require('gulp'),
gutil = require('gulp-util'),
gbower = require('gulp-bower'),
bower = require('bower'),
fs = require('fs'),
del = require('del');
gulp.task('default', ['test'], function(){
return
})
gulp.task('loadBower', function(){
gbower()
})
gulp.task('gbower',['loadBower', 'clean'], function(){
return gbower('./target/js')
})
gulp.task ('prepare',['gbower'], function (done) {
gulp.src(["src/test/js/**/*.js", "src/main/js/**/*.js"])
.pipe(gulp.dest('target/js'))
.on('end', function(){
var head = 'var allTestFiles = [];' +
'var TEST_REGEXP = new RegExp("spec\\\\.js$");var pathToModule = function(path) {' +
'var baseRep = new RegExp("^\/base\/"); var jsRep = new RegExp("\\\\.js$"); ' +
'return path.replace(baseRep, "").replace(jsRep, ""); };' +
'Object.keys(window.__karma__.files).forEach(function(file) { ' +
' if (TEST_REGEXP.test(file)) { ' +
' allTestFiles.push(pathToModule(file)); ' +
' } ' +
'});require.config({ '
var footer = "'deps': allTestFiles ,'callback': window.__karma__.start })"
//load base require
var rjs = require('./require.json')
rjs.baseUrl = '/base'
rjs.paths = {}
//Add more paths to require rjs for local gbower deps
bower.commands.list([], {paths: true, json: true})
.on('end', function(results){
var locals = recursePkgMain(results)
for (index in locals){
rjs.paths[locals[index].package] = [locals[index].main]
}
for (index in locals){
var shims = locals[index].shim
var packageExports = shims? Object.keys(shims) : []
if (packageExports.length > 0){
for (shimIndex in packageExports){
rjs.shim[packageExports[shimIndex]] = locals[index].shim[packageExports[shimIndex]]
}
}
}
var body = ""
for (keyIndex in Object.keys(rjs)){
var key = Object.keys(rjs)[keyIndex]
var dep = "" + key + ": " + JSON.stringify(rjs[key]) + ", "
body = body.concat(dep)
}
var buffer = new Buffer(head + body + footer)
fs
.writeFile('./target/require.test.main.js', buffer)
done()
})
function recursePkgMain(package){
var pkgMeta = package.pkgMeta
var deps = pkgMeta.dependencies ? Object.keys(pkgMeta.dependencies)
: undefined
var localMains = []
for( index in deps){
var key = deps[index]
if (pkgMeta.dependencies[key].indexOf('../') >= 0){
var localMain = {
main: key + '/' + package.dependencies[key].pkgMeta.main.split('.js')[0],
package: key,
shim : package.dependencies[key].pkgMeta.shim ? package.dependencies[key].pkgMeta.shim : undefined
}
localMains
.push(localMain)
} else {
var main = package.dependencies[key].pkgMeta.main
var cleanMain = (main.indexOf('./') >= 0) ?
main.split('./')[1] : main
var localMain = {
main: key + '/' + cleanMain.split('.js')[0],
package: key,
shim : undefined
}
localMains
.push(localMain)
}
}
if (localMains.length > 0){
var fullMains = localMains
for (index in localMains){
var subPackage = package.dependencies[localMains[index].package]
fullmains = fullMains
.concat(recursePkgMain(subPackage))
}
return fullMains
}
return undefined
}
});
});
gulp.task('test',['prepare'], function (done) {
var karma = require('karma').server;
karma.start({
configFile: __dirname + '/src/test/js/karma.conf.js',
singleRun: true
}, done);
});
gulp.task('bdd',['prepare'], function (done) {
var karma = require('karma').server;
karma.start({
configFile: __dirname + '/src/test/js/karma.conf.js',
singleRun: false
}, done);
});
gulp.task('clean', function (cb) {
del([
'target/js/**'
], cb);
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment