support directories in pipeline

This commit is contained in:
Iuri Matias 2017-02-03 06:30:08 -05:00
parent eb7970a6f4
commit 4e026fb6e7
6 changed files with 70 additions and 66 deletions

View File

View File

@ -24,12 +24,12 @@ Config.prototype.loadConfigFiles = function(options) {
this.embarkConfig = JSON.parse(fs.readFileSync(options.embarkConfig));
this.embarkConfig.plugins = this.embarkConfig.plugins || {};
this.loadPipelineConfigFile();
this.loadBlockchainConfigFile();
this.plugins = new Plugins({plugins: this.embarkConfig.plugins, logger: this.logger});
this.plugins.loadPlugins();
this.loadPipelineConfigFile();
this.loadBlockchainConfigFile();
this.loadContractsConfigFile();
this.loadChainTrackerFile();
this.loadPluginContractFiles();
@ -98,9 +98,11 @@ Config.prototype.loadChainTrackerFile = function() {
};
Config.prototype.loadFiles = function(files) {
var self = this;
var originalFiles = grunt.file.expand({nonull: true}, files);
var readFiles = [];
// get embark.js object first
originalFiles.filter(function(file) {
return file.indexOf('.') >= 0;
}).filter(function(file) {
@ -111,12 +113,45 @@ Config.prototype.loadFiles = function(files) {
readFiles.push({filename: 'ipfs-api.js', content: fs.readFileSync(path.join(__dirname, "/../js/ipfs-api.min.js")).toString(), path: path.join(__dirname, "/../js/ipfs-api.min.js")});
readFiles.push({filename: 'orbit.js', content: fs.readFileSync(path.join(__dirname, "/../js/orbit.min.js")).toString(), path: path.join(__dirname, "/../js/orbit.min.js")});
readFiles.push({filename: 'embark.js', content: fs.readFileSync(path.join(__dirname, "/../js/build/embark.bundle.js")).toString(), path: path.join(__dirname, "/../js/build/embark.bundle.js")});
readFiles.push({filename: 'embark-plugins.js', content: "", path: ""});
} else {
readFiles.push({filename: file, content: fs.readFileSync(file).toString(), path: file});
}
});
// get plugins
var filesFromPlugins = [];
var filePlugins = self.plugins.getPluginsFor('pipelineFiles');
if (filePlugins.length > 0) {
filePlugins.forEach(function(plugin) {
try {
var fileObjects = plugin.runFilePipeline();
for (var i=0; i < fileObjects.length; i++) {
var fileObject = fileObjects[i];
filesFromPlugins.push(fileObject);
}
}
catch(err) {
self.logger.error(err.message);
}
});
}
filesFromPlugins.filter(function(file) {
if (grunt.file.isMatch(files, file.intendedPath)) {
readFiles.push(file);
}
});
// get user files
originalFiles.filter(function(file) {
return file.indexOf('.') >= 0;
}).filter(function(file) {
if (file === 'embark.js') {
return;
}
readFiles.push({filename: file, content: fs.readFileSync(file).toString(), path: file});
});
return readFiles;
};

View File

@ -23,50 +23,6 @@ Pipeline.prototype.build = function(abi) {
if (file.filename === 'embark.js') {
return {content: file.content + "\n" + abi, filename: file.filename, path: file.path, modified: true};
} else if (file.filename === 'embark-plugins.js') {
var filesFromPlugins = [];
var filePlugins = self.plugins.getPluginsFor('pipelineFiles');
if (filePlugins.length > 0) {
filePlugins.forEach(function(plugin) {
try {
var fileObjects = plugin.runFilePipeline();
for (var i=0; i < fileObjects.length; i++) {
var fileObject = fileObjects[i];
//console.debug(JSON.stringify(fileObject));
filesFromPlugins.push(fileObject);
}
}
catch(err) {
self.logger.error(err.message);
}
});
}
var fileContents = filesFromPlugins.map(function(file) {
if (pipelinePlugins.length > 0) {
pipelinePlugins.forEach(function(plugin) {
console.log(plugin.name + ": trying " + file.filename);
try {
if (file.options && file.options.skipPipeline) {
console.log("skipping");
return;
}
file.content = plugin.runPipeline({targetFile: file.filename, source: file.content, modified: true});
}
catch(err) {
self.logger.error(err.message);
}
});
}
return file.content;
});
//return fileContents.join('\n');
return {content: fileContents.join('\n'), filename: "embark-plugins.js", path: "", modified: true};
} else if (['web3.js', 'ipfs.js', 'ipfs-api.js', 'orbit.js'].indexOf(file.filename) >= 0) {
//return file.content;
file.modified = true;
@ -76,6 +32,10 @@ Pipeline.prototype.build = function(abi) {
if (pipelinePlugins.length > 0) {
pipelinePlugins.forEach(function(plugin) {
try {
if (file.options && file.options.skipPipeline) {
console.log("skipping");
return;
}
file.content = plugin.runPipeline({targetFile: file.filename, source: file.content});
file.modified = true;
}
@ -107,7 +67,7 @@ Pipeline.prototype.build = function(abi) {
filename = filename.replace(targetDir, '');
self.logger.info("writing file " + self.buildDir + targetDir + filename);
fs.writeFileSync(self.buildDir + targetDir + filename, fs.readFileSync(file.filename));
fs.writeFileSync(self.buildDir + targetDir + filename, fs.readFileSync(file.path));
});
} else {
var content = contentFiles.map(function(file) {

View File

@ -77,8 +77,8 @@ Plugin.prototype.registerPipeline = function(matcthingFiles, cb) {
this.pluginTypes.push('pipeline');
};
Plugin.prototype.addFileToPipeline = function(file, options) {
this.pipelineFiles.push({file: file, options: options});
Plugin.prototype.addFileToPipeline = function(file, intendedPath, options) {
this.pipelineFiles.push({file: file, intendedPath: intendedPath, options: options});
this.pluginTypes.push('pipelineFiles');
};
@ -131,7 +131,9 @@ Plugin.prototype.runFilePipeline = function() {
var obj = {};
obj.filename = file.file.replace('./','');
obj.content = self.loadPluginFile(file.file).toString();
obj.intendedPath = file.intendedPath;
obj.options = file.options;
obj.path = self.pathToFile(obj.filename);
return obj;
});

View File

@ -10,17 +10,17 @@ var ABIGenerator = require('./abi.js');
// TODO: load config file
// TODO: include plugins
var Test = function(options) {
try {
//try {
this.sim = require('ethereumjs-testrpc');
} catch(e) {
this.sim = false;
}
//} catch(e) {
// this.sim = false;
//}
if (this.sim === false) {
console.log('Simulator not found; Please install it with "npm install -g ethereumjs-testrpc');
console.log('For more information see https://github.com/ethereumjs/testrpc');
exit();
}
//if (this.sim === false) {
// console.log('Simulator not found; Please install it with "npm install -g ethereumjs-testrpc');
// console.log('For more information see https://github.com/ethereumjs/testrpc');
// exit();
//}
this.web3 = new Web3();
this.web3.setProvider(this.sim.provider(options));
@ -31,15 +31,21 @@ Test.prototype.deployAll = function(contractsConfig, cb) {
var logger = new TestLogger({logLevel: 'debug'});
async.waterfall([
function getConfig(callback) {
var config = new Config({env: 'test', logger: logger});
config.loadConfigFiles({embarkConfig: 'embark.json'});
callback(null, config);
},
function buildContracts(callback) {
var config = new Config({env: 'test'});
config.contractsFiles = config.loadFiles(["app/contracts/**"]);
//var config = new Config({env: 'test'});
//config.contractsFiles = config.loadFiles(["app/contracts/**"]);
config.contractsConfig = {contracts: contractsConfig} ;
var contractsManager = new ContractsManager({
contractFiles: config.contractsFiles,
contractsConfig: config.contractsConfig,
logger: logger
logger: logger,
plugins: config.plugins
});
contractsManager.build(callback);
},
@ -70,9 +76,10 @@ Test.prototype.deployAll = function(contractsConfig, cb) {
}
var web3 = self.web3;
web3.eth.defaultAccount = accounts[0];
console.log("hello!");
// TODO: replace evals with separate process so it's isolated and with
// a callback
eval(result); // jshint ignore:line
//eval(result); // jshint ignore:line
cb();
});
});