mavensmate
Version:
Core APIs that drive MavensMate IDEs for Salesforce1/Force.com
109 lines (100 loc) • 4.17 kB
JavaScript
/**
* @file Service for retrieving MavensMate templates from their local or remote source
* @author Joseph Ferraro <@joeferraro>
*/
;
var Promise = require('bluebird');
var path = require('path');
var util = require('../util');
var request = require('request');
var config = require('../../config');
var logger = require('winston');
function TemplateService() { }
TemplateService.prototype.getTemplatesForType = function(metadataTypeXmlName) {
var self = this;
return new Promise(function(resolve, reject) {
self._getPackage()
.then(function(pkg) {
resolve(pkg[metadataTypeXmlName]);
})
.catch(function(e) {
reject(new Error('Could not retrieve templates for type: '+metadataTypeXmlName+', '+e.message));
})
.done();
});
};
TemplateService.prototype.getTemplateBody = function(metadataTypeXmlName, templateOrTemplateFileName) {
return new Promise(function(resolve, reject) {
/*jshint camelcase: false */
var templateFileName = templateOrTemplateFileName.file_name ? template.file_name : templateOrTemplateFileName; // TODO: standardize format
var templateSource = config.get('mm_template_source');
if (templateSource === undefined || templateSource === '') {
templateSource = 'joeferraro/MavensMate-Templates/master';
}
var templateLocation = config.get('mm_template_location');
if (templateLocation === undefined || templateLocation === '') {
templateLocation = 'remote';
}
logger.debug('templateSource', templateSource);
logger.debug('templateLocation', templateLocation);
var templateBody;
try {
if (templateLocation === 'remote') {
request('https://raw.githubusercontent.com/'+templateSource+'/'+metadataTypeXmlName+'/'+templateFileName, function(error, response, body) {
if (!error && response.statusCode === 200) {
templateBody = body;
} else {
templateBody = util.getFileBody(path.join(templateSource,metadataTypeXmlName,templateFileName));
}
resolve(templateBody);
});
} else if (templateLocation === 'local') {
templateBody = util.getFileBody(path.join(templateSource,metadataTypeXmlName,templateFileName));
resolve(templateBody);
} else {
templateBody = util.getFileBody(path.join(__dirname,'templates','github',metadataTypeXmlName,templateFileName));
resolve(templateBody);
}
} catch(e) {
logger.error('Could not retrieve template body', e);
templateBody = util.getFileBody(path.join(__dirname,'templates','github',metadataTypeXmlName,templateFileName));
resolve(templateBody);
}
});
};
TemplateService.prototype._getPackage = function() {
return new Promise(function(resolve, reject) {
/*jshint camelcase: false */
try {
var templateSource = config.get('mm_template_source');
if (!templateSource) {
templateSource = 'joeferraro/MavensMate-Templates/master';
}
var templateLocation = config.get('mm_template_location');
if (!templateLocation) {
templateLocation = 'remote';
}
var templatePackage;
if (templateLocation === 'remote') {
request('https://raw.githubusercontent.com/'+templateSource+'/package.json', function(error, response, body) {
if (!error && response.statusCode === 200) {
templatePackage = JSON.parse(body);
} else {
templatePackage = util.getFileBody(path.join(__dirname,'templates','github','package.json'), true);
}
resolve(templatePackage);
});
} else if (templateLocation === 'local') {
templatePackage = JSON.parse(util.getFileBody(path.join(templateSource,'package.json')));
resolve(templatePackage);
} else {
templatePackage = util.getFileBody(path.join(__dirname,'templates','github','package.json'), true);
resolve(templatePackage);
}
} catch(e) {
reject(new Error('Could not obtain template package: '+e.message));
}
/*jshint camelcase: true */
});
};
module.exports = TemplateService;