/*______________
| ______ | U I Z E J A V A S C R I P T F R A M E W O R K
| / / | ---------------------------------------------------
| / O / | MODULE : Uize.Services.Setup Package
| / / / |
| / / / /| | ONLINE : http://uize.com
| /____/ /__/_| | COPYRIGHT : (c)2012-2014 UIZE
| /___ | LICENSE : Available under MIT License or GNU General Public License
|_______________| http://uize.com/license.html
*/
/* Module Meta Data
type: Package
importance: 5
codeCompleteness: 0
docCompleteness: 5
*/
/*?
Introduction
The =Uize.Services.Setup= package....
*DEVELOPERS:* `Chris van Rensburg`
*/
Uize.module ({
name:'Uize.Services.Setup',
required:[
'Uize.Util.Needs',
'Uize.Data.Matches'
],
builder:function () {
'use strict';
/*** General Variables ***/
var
_serviceProvisioning = Uize.Util.Needs (),
_serviceSetupProvided = {},
_trueFlag = {},
_uizeRequire
;
/*** Utility Functions ***/
function _moduleHasServiceSetup (_module) {
return _serviceSetupProvided [_module] == _trueFlag;
}
return Uize.package ({
provideServiceSetup:function (_serviceModuleName,_serviceAdapterModuleName,_serviceSetup) {
/*** override Uize.require in order to inject service setup ***/
if (!_uizeRequire) {
_uizeRequire = Uize.require;
Uize.require = function (_modules,_callback) {
if (typeof _modules == 'string')
_modules = [_modules]
;
_uizeRequire (
_modules,
function () {
var _uizeRequireCallbackArgs = arguments;
_serviceProvisioning.need (
Uize.Data.Matches.values (_modules,_moduleHasServiceSetup),
function () {_callback && _callback.apply (0,_uizeRequireCallbackArgs)}
);
}
);
};
};
_serviceSetupProvided [_serviceModuleName] = _trueFlag;
_serviceProvisioning.provide (
_serviceModuleName,
function (_provide) {
_uizeRequire (
[_serviceModuleName,_serviceAdapterModuleName],
function (_serviceModule,_serviceAdapterModule) {
var _service = _serviceModule.singleton ();
_service.set ('adapter',_serviceAdapterModule.singleton ());
function _provideService () {_provide (_service)}
_serviceSetup
? _serviceSetup (_service,_provideService)
: _service.init ({},_provideService)
;
}
);
}
);
}
});
}
});