Namespace Generator

by Julian

HTML

<script src="http://documentcloud.github.com/underscore/underscore-min.js"></script>

JavaScript

var App = {};

// Basic function to create a namespace in App:
//     usage: App.namespace("mail.views");
App.namespace = function(path) {
    var pathComponents = _.compact(path.split("."));
    return _.reduce(pathComponents, function(obj, key) {
        if (!obj[key]) obj[key] = {};
        return obj[key];
    }, App);
};

App.namespace("mail.views");
App.namespace("mail.models");
App.namespace("user.models");

App.namespace("");
App.namespace(".xxx. .");

console.log(JSON.stringify(App));


// Safely resolve a namespace from a path string:
//     usage: Object.path(App, "mail.views")
Object.path = function(topObj, path) {
    var pathComponents = _.compact(path.split("."));
    return _.reduce(pathComponents, function(obj, key) {
        return obj ? obj[key] : undefined;
    }, topObj);
};
     
console.log("mail.views", Object.path(App, "mail.views"));
console.log("mail.xxx.views", Object.path(App, "mail.xxx.views"));