clever-email
Version:
E-mail system for CleverStack
238 lines (193 loc) • 7.76 kB
JavaScript
var Q = require( 'q' )
, spawn = require( 'child_process' ).spawn
, path = require( 'path' )
, fs = require( 'fs' )
, ncp = require('ncp').ncp
, mName = 'clever-email'
, prName = 'testProject';
//create test project
function createProject ( step ) {
var defered = Q.defer()
, proc = spawn ( 'clever', [ 'init', '--allow-root', '--skip-protractor', prName ] );
console.log( 'step #' + step + ' - create test project - start\n' );
proc.stdout.on( 'data', function ( data ) {
var str = data.toString();
if ( str.match( 'ing' ) !== null ) {
console.log( str )
}
});
proc.stderr.on('data', function ( data ) {
defered.reject ( 'Error in step #' + step + ' - ' + data.toString() + '\n' );
});
proc.on( 'close', function ( code ) {
console.log('step #' + step + ' - process exited with code ' + code + '\n');
defered.resolve( ++step );
});
return defered.promise;
}
//install clever-orm module to test project
function installORM ( step ) {
var defered = Q.defer()
, proc = spawn ( 'clever', [ 'install', 'clever-orm' ], { cwd: path.join( __dirname, '../', prName ) } );
console.log( 'step #' + step + ' - install clever-orm module - start\n' );
proc.stdout.on('data', function (data) {
var str = data.toString()
, objs = [
{ reg: 'Database username' , write: 'travis\n' },
{ reg: 'Database password' , write: '\n' },
{ reg: 'Database name' , write: 'test_db\n' },
{ reg: 'Database dialect' , write: '\n' },
{ reg: 'Database port' , write: '3306\n' },
{ reg: 'Database host' , write: '127.0.0.1\n' }
];
if ( str.match( 'ing' ) !== null ) {
console.log( str )
}
objs.forEach ( function ( obj ) {
if ( str.match( obj.reg ) !== null ) {
proc.stdin.write( obj.write );
}
});
});
proc.stderr.on( 'data', function ( data ) {
defered.reject ( data.toString( 'Error in step #' + step + ' - ' + data.toString() + '\n' ) );
});
proc.on( 'close', function ( code ) {
console.log('step #' + step + ' - process exited with code ' + code + '\n' );
defered.resolve( ++step );
});
return defered.promise;
}
//install clever-auth module to test project
function installAuth ( step ) {
var defered = Q.defer()
, proc = spawn ( 'clever', [ 'install', 'clever-auth' ], { cwd: path.join( __dirname, '../', prName ) } );
console.log( 'step #' + step + ' - install clever-auth module - start\n' );
proc.stdout.on('data', function (data) {
var str = data.toString();
if ( str.match( 'ing' ) !== null ) {
console.log( str );
}
});
proc.stderr.on( 'data', function ( data ) {
defered.reject ( data.toString( 'Error in step #' + step + ' - ' + data.toString() + '\n' ) );
});
proc.on( 'close', function ( code ) {
console.log('step #' + step + ' - process exited with code ' + code + '\n' );
defered.resolve( ++step );
});
return defered.promise;
}
//copy clever-email module in test project
function copyModule ( step ) {
var defered = Q.defer()
, fromDir = path.join( __dirname, '../' )
, toDir = path.join( __dirname, '../', prName, 'backend', 'modules', mName )
, options = {
filter: function ( file ) { return file.match ( prName ) === null }
};
console.log( 'step #' + step + ' - copy ' + mName + ' modyle in test project - start\n' );
ncp( fromDir, toDir, options, function ( err ) {
if ( err ) {
return defered.reject ( 'Error in step #' + step + ' - ' + err + '\n' );
}
console.log('step #' + step + ' - process exited with code 0\n' );
defered.resolve( ++step );
});
return defered.promise;
}
//create and update config files
function configFiles( step ) {
var deferred = Q.defer()
, ormFile = path.join( __dirname, '../', prName, 'backend', 'modules', 'clever-orm', 'config', 'default.json' )
, comFile = path.join( __dirname, '../', prName, 'backend', 'config', 'test.json' )
, ormData = {
"clever-orm": {
"db": {
"username": "travis",
"password": "",
"database": "test_db",
"options": {
"host": "127.0.0.1",
"dialect": "mysql",
"port": 3306
}
},
"modelAssociations": {
"UserModel": {
"hasMany": [ "EmailModel", "EmailUserModel" ]
},
"EmailModel": {
"hasMany": [ "EmailAttachmentModel", "EmailUserModel" ],
"belongsTo": [ "UserModel" ]
},
"EmailUserModel":{
"belongsTo" : [ "EmailModel", "UserModel" ]
},
"EmailAttachmentModel": {
"belongsTo": [ "EmailModel" ]
}
}
}
}
, comData = {
"environmentName": "TEST",
"memcacheHost": "127.0.0.1:11211",
"clever-orm": {
"db": {
"username": "travis",
"password": "",
"database": "test_db",
"options": {
"dialect": "mysql",
"host": "127.0.0.1",
"port": "3306"
}
}
}
};
console.log( 'step #' + step + ' - create and update config files - start\n' );
fs.writeFile ( ormFile, JSON.stringify ( ormData ), function ( err ) {
if ( err ) {
return deferred.reject ( 'Error in step #' + step + ' - ' + err + '\n' );
}
fs.writeFile ( comFile, JSON.stringify ( comData ), function ( err ) {
if ( err ) {
return deferred.reject ( 'Error in step #' + step + ' - ' + err + '\n' );
}
console.log('step #' + step + ' - process exited with code 0\n' );
deferred.resolve( ++step );
});
});
return deferred.promise;
}
//added clever-email module in bundledDependencies
function bundled( step ) {
var deferred = Q.defer()
, file = path.join( __dirname, '../', prName, 'backend', 'package.json' );
console.log( 'step #' + step + ' - added ' + mName + ' module in bundledDependencies\n' );
fs.readFile ( file, function ( err, data ) {
if ( err ) {
return deferred.reject ( 'Error in step #' + step + ' - ' + err + '\n' );
}
data = JSON.parse ( data );
data.bundledDependencies.push ( mName );
fs.writeFile ( file, JSON.stringify ( data ), function ( err ) {
if ( err ) {
return deferred.reject ( 'Error in step #' + step + ' - ' + err + '\n' );
}
console.log('step #' + step + ' - process exited with code 0\n' );
deferred.resolve( ++step );
});
});
return deferred.promise;
}
createProject ( 1 )
.then ( installORM )
.then ( configFiles )
.then ( installAuth )
.then ( copyModule )
.then ( bundled )
.fail ( function (err) {
console.log( err );
});