flux-up
Version:
Manage modules and services for flux based applications
90 lines (79 loc) • 2.07 kB
JavaScript
;
/**
* A manager for any kind of service the application need.
*
* @return {
* {getRegistered: getRegisteredServices,
* register: registerService,
* get: getService,
* exists: existsService,
* unset: unsetService,
* reset: resetServices}
* }
* @constructor
*/
var ServiceManager = (function() {
var _services = {};
return {
getRegistered: getRegisteredServices,
register: registerService,
get: getService,
exists: existsService,
unset: unsetService,
reset: resetServices
};
/**
* Return a list of registered services
* @return {Array<string>}
*/
function getRegisteredServices() {
return Object.keys(_services);
}
/**
*
* Register a new service
* @param {string} serviceName The service name
* @param {*} service The service, should be any kind of data
* @throws {Error} If a service with tha same name already exists
*/
function registerService(serviceName, service) {
if (this.exists(serviceName)) {
throw new Error('A service named [' + serviceName + '] already registered.');
}
_services[serviceName] = service;
}
/**
* Unset a registered service
* @param {string} serviceName The service name
*/
function unsetService(serviceName) {
delete _services[serviceName];
}
/**
* Get a registered service
* @param {string} serviceName The service name
* @return {*}
* @throws {Error} If a service with tha same name doesn't exist
*/
function getService(serviceName) {
if (!this.exists(serviceName)) {
throw new Error('Service [' + serviceName + '] not exists.');
}
return _services[serviceName];
}
/**
* Check if a service exists
* @param {string} serviceName The service name
* @return {boolean}
*/
function existsService(serviceName) {
return _services[serviceName] !== undefined;
}
/**
* Reset all services, used mainly for testing purpouse
*/
function resetServices() {
_services = {};
}
})();
module.exports = ServiceManager;