JS Abstraction via "dit"

dot.get, dot.abstract dot.make

by andypotanin

JavaScript

console.clear();

var dot = {
    abstract: function( config ) {
        var self = this;
        var result = {};
        var keys = Object.keys( config );
        
        keys.forEach( function( key ) {
            
            var value = config[ key ];
            
            //console.log( typeof value, value );
            dot.make( key, value, result );
        });
        
        return result;
    },
    get: function(obj, str) { 
        
        if( !str ) {
            return obj;
        }
        
        try {
            

            var result = str.split( '.' ).reduce( function(o, x) { 
                var result = o[x] 
                
                if( 'object' !== typeof o[x] ) {
                    //console.log( 'creating getters for', x );
                    
                    return Object.defineProperty( {}, x, {
                        enumerable: true,
                        set: function() {
                          console.log( 'get' );                            
                        },
                        get: function() { 
                            console.log( 'get' );
                            return 'hello!' || o[x];
                        }
                    });
                    
                }

                return result;
                
            }, obj);

            if( typeof Object.getOwnPropertyDescriptor( result, str ) ) {
                //console.log( str, 'is a descriptor' );
            }
            
            return result;
            
        } catch( error ) {
            console.log( error );
            return null;
        }
    },
    make: function ( string, value, hash, seperator ) {
      if( hash == null ) { hash = {}; }
      if( seperator == null ) { seperator = ":"; }
      var parts = string.split( seperator );
      var refHash = hash;
      var depth = 0;
      parts.forEach( function( part ) {
    
        if( depth == parts.length - 1 ) {
         ...