Nickolay - KiokuJS-0.01

Documentation | Source
Class('KiokuJS.TypeMap.Function', {
    
    isa     : 'KiokuJS.TypeMap',
    
    does    : 'KiokuJS.TypeMap.Role.NoDeps',
    
    
    has : {
        forClass    : 'Function'
    },
    
        
    methods : {
        
        canHandle : function (className) {
            return className == 'Function'
        },
        
        
        collapse : function (node, collapser) {
            var props = {}
            
            Joose.O.eachOwn(node.object, function (value, name) {
                props[ name ] = collapser.visit(value)
            })
            
            return {
                source  : Function.prototype.toString.call(node.object),
                
                props   : props
            }
        },
        
        
        clearInstance : function (node) {
            var func = node.object
            
            Joose.O.eachOwn(func, function (value, name) {
                
                delete func[ name ]
            })
            
            delete node.objectData.action
        },
        
        
        createEmptyInstance : function (node) {
            var closure = node.objectData = {
                action : null
            }
            
            return function () {
                return closure.action.apply(this, arguments)
            }
        },
        
        
        populate : function (node, expander) {
            
            var func = node.object
            
            Joose.O.each(node.data.props, function (value, name) {
                
                func[ name ] = expander.visit(value)
            })
            
            node.objectData.action = eval('(' + node.data.source + ')')
        }
    }

})