cloudfoundry-services
Version:
A helper library to work with bound service in cloudfoundry
82 lines (62 loc) • 2 kB
JavaScript
var _ = require("underscore");
function parseVcap() {
var vcap;
try {
vcap = JSON.parse(process.env.VCAP_SERVICES);
} catch(e) {
vcap = process.env.VCAP_SERVICES;
}
return vcap;
}
var cfServices = function(serviceName, instanceName, vcap) {
var defaultInstanceRegex = new RegExp(".*","g");
this.vcapServices = vcap || parseVcap();
this.serviceName = serviceName;
this.instanceName = instanceName || defaultInstanceRegex;
};
cfServices.prototype.getServiceVariables = function() {
return this.vcapServices;
};
cfServices.prototype.findAllInstances = function() {
return this._findMetaData.call(this, function(servicesList) {
return servicesList;
});
};
cfServices.prototype.findMatchingInstances = function() {
return this._findMetaData.call(this, _.filter);
};
cfServices.prototype.findFirstInstance = function() {
return this._findMetaData.call(this, _.find);
};
cfServices.prototype._filterVcap = function(service) {
var isMatch;
if(_.isRegExp(this.instanceName)) {
isMatch = (this.instanceName.test(service.name) === true);
} else {
isMatch = (service.name === this.instanceName);
}
return isMatch;
};
cfServices.prototype._findMetaData = function(findFunctor) {
var metaData = {};
if(_.has(this.getServiceVariables(), this.serviceName) === true) {
metaData = findFunctor(this.vcapServices[this.serviceName], this._filterVcap.bind(this));
}
return metaData;
};
cfServices.prototype.findFirstCredential = function() {
return this.findFirstInstance().credentials;
};
cfServices.prototype.findAllCredentials = function() {
var instanceMatches = this.findAllInstances();
return _.map(instanceMatches, function(instance) {
return instance.credentials;
});
};
cfServices.prototype.findMatchingCredentials = function() {
var instanceMatches = this.findMatchingInstances();
return _.map(instanceMatches, function(instance) {
return instance.credentials;
});
};
module.exports = cfServices;