REFACTORING
============



TODO
====

- rename `disableCaching` to `suppressCaching`

- (!) CSS loading (including grouped mode)

- improve versioning and authority support and test coverage

- Adapt grouped dependencies loading mode


- refactor to allow dependencies from classes with Joose.Proto/Managed level
    implemented, needs test coverage

- allow circular dependencies, assuming the class declaration order is not significant..


DONE
====

- fix some failures with ScriptTag materialization under FF (still actual?) 
-   create an "All" bundle that will auto-configurate, depending from the environment (browser/nodejs)
    this should remove many Web*, NodeJS* bundles during testing
- merge "non-joose" into "joose" and make a single resource class "code", representing JS code
- merge "exturl" and "inturl" into single "url" resource (resource locator?)
- call arbitrary function as dependency source (should return descriptors)    
    partially implemented
- implement common mechanism for collecting stringified dependencies and replacing them with real classes
- add standard resolving capabilities (still remains in test harness, as its very Test.Run specific)
- inlining dependencies should also be able to call function (analog of FutureClass)
- add Joose.I.FutureClass helper Joose.I.FutureClass = function (class) { return function () { return eval(class) } }
- Change loading of GMap engine to something else, more predictable and w/o errors
- fix double BEGIN invoking
- fix namespace managers executeIn to omit the args?
- be able to load the 'meta' class 
- (?) class should depend from its 'my' class
- switch materialiaztion (handleDependencies) interface to async?  (to execute a whole source file with several classes before fireing 'ready' listeners)









Module('Some.Module', {
    
    VERSION : 0.01,
    
    use : {
        'Some.Another.Module' : 0.01,
        'Yet.Another.Module'  : 0.03
    },
    
    EXPORT : [ 'func1', 'func2' ],
    
    EXPORT_OK : [ 'func3', 'func4' ],
    
    EXPORT_TAGS : { 
        ':ALL'      : [ 'func1', 'func2', 'func3', 'func4' ],
        ':SPECIAL'  : [ 'func3', 'func4' ]
    },
    
    
body : function (our) {
        
    //our == this == Some.Module here
    
    our.func1 = function () {
    }
        

    our.func2 = function () {
    }
    
    // valid in Joose3
    Class('Some.Module', {
        
        methods : {
            
            someMethod : function (p) {
                return our.func1(p)
            }
        }
    
    })
}})


for pure OOP module, which do not export anything its simplified to:

Class('Some.Module', {
    
    VERSION : 0.01,
    
    use : {
        'Some.Another.Module' : 0.01,
        'Yet.Another.Module'  : 0.03
    },
    
    methods : {
        someMethod : function (p) {
            ...
        }
    }
})