UNPKG

gengoal

Version:

Tool to translate and track your project copies with the Gengo API

117 lines (89 loc) 2.88 kB
/*jshint laxcomma:true */ var fs = require('fs') , path = require('path') , exec = require('child_process').exec , util = require('util') , _ = require('underscore') , EventEmitter = require('events').EventEmitter , Promise = require('bluebird') , Builder = require('./builder') , Repository = require('./repository') , Language = require('./language'); function Tracker(config, gengo) { var self = this; this.gengo = gengo; this.repositories = config.repositories.map(function (repository_config) { var repository; repository = new Repository(repository_config, config.callback_url); repository.on('jobs', _.bind(_.partial(self.send, repository), self)); return repository; }); } util.inherits(Tracker, EventEmitter); /** * Initializes all the configured repositories * * @return {Language} */ Tracker.prototype.init = function () { var self = this , pulls = []; pulls = this.repositories.map(function (repository) { console.log('Fetching ' + repository.config.url + '...'); return repository.pull(); }); return Promise.all(pulls) .then(function () { var loads; loads = self.repositories.map(function (repository) { console.log('Loading languages for "' + repository.config.name + '" repository...'); return repository.load(); }); return Promise.all(loads); }) .then(function () { var normalizations; normalizations = self.repositories.map(function (repository) { console.log('Normalizating languages for "' + repository.config.name + '" repository...'); return repository.normalize(); }); return Promise.all(normalizations); }); }; /** * Finds a repository by name * * @return {Repository} */ Tracker.prototype.find = function (name) { return _.findWhere(this.repositories, {name: name}); }; /** * Sends to Gengo some jobs * * @param {Repository} repository * @param {Array} jobs */ Tracker.prototype.send = function (repository, jobs) { var data; data = { jobs: Builder.reduce_jobs(jobs) }; console.log('Sending ' + Object.keys(jobs).length + ' jobs for the repository "' + repository.name + '" to Gengo...'); this.gengo.jobs.create(data, function(err, res){ var branch; if (err) { console.log('Error submitting Gengo jobs: ', err); return; } branch = 'gengo-' + res.order_id; console.log('Processing new order ' + res.order_id + ' with ' + res.job_count + ' jobs (' + res.credits_used + ' USD) in Gengo...'); repository.branch(branch) .then(function () { repository.last_order_id = res.order_id; // Sandbox features repository.setPending(branch, res.job_count); console.log('Created a new branch "' + branch + '" for order ' + res.order_id); }); }); }; module.exports = Tracker;