game.js
function() {
        var Module, key, moduleName, modules, value, _i, _len;
        modules = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
        for (_i = 0, _len = modules.length; _i < _len; _i++) {
          Module = modules[_i];
          if (typeof Module.isString === "function" ? Module.isString() : void 0) {
            moduleName = Module;
            Module = Module.constantize();
          } else if (moduleName = Module._name) {} else {
            for (key in root) {
              value = root[key];
              if (value === Module) Module._name = moduleName = key;
            }
          }
          if (moduleName) {
            if (!I.includedModules.include(moduleName)) {
              I.includedModules.push(moduleName);
              self.extend(Module(I, self));
            }
          } else {
            warn("Unable to discover name for module: ", Module, "\nSerialization issues may occur.");
            self.extend(Module(I, self));
          }
        }
        return self;
      }
function() {
        var Module, key, moduleName, modules, value, _i, _len;
        modules = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
        for (_i = 0, _len = modules.length; _i < _len; _i++) {
          Module = modules[_i];
          if (typeof Module.isString === "function" ? Module.isString() : void 0) {
            moduleName = Module;
            Module = Module.constantize();
          } else if (moduleName = Module._name) {} else {
            for (key in root) {
              value = root[key];
              if (value === Module) Module._name = moduleName = key;
            }
          }
          if (moduleName) {
            if (!I.includedModules.include(moduleName)) {
              I.includedModules.push(moduleName);
              self.extend(Module(I, self));
            }
          } else {
            warn("Unable to discover name for module: ", Module, "\nSerialization issues may occur.");
            self.extend(Module(I, self));
          }
        }
        return self;
      }
function ( ) { var Module , key , moduleName , modules , value , _i , _len ; modules = 1 <= arguments . length ? __slice . call ( arguments , 0 ) : [ ] ; for ( _i = 0 , _len = modules . length ; _i < _len ; _i ++ ) { Module = modules [ _i ] ; if ( typeof Module . isString === "function" ? Module . isString ( ) : void 0 ) { moduleName = Module ; Module = Module . constantize ( ) ; } else if ( moduleName = Module . _name ) { } else { for ( key in root ) { value = root [ key ] ; if ( value === Module ) Module . _name = moduleName = key ; } } if ( moduleName ) { if ( ! I . includedModules . include ( moduleName ) ) { I . includedModules . push ( moduleName ) ; self . extend ( Module ( I , self ) ) ; } } else { warn ( "Unable to discover name for module: " , Module , "\nSerialization issues may occur." ) ; self . extend ( Module ( I , self ) ) ; } } return self ; }
Includes a module in this object.

myObject = Core()
myObject.include(Bindable)

# now you can bind handlers to functions
myObject.bind "someEvent", ->
alert("wow. that was easy.")

@name include
@methodOf Core#
@param {String} Module the module to include. A module is a constructor that takes two parameters, I and self, and returns an object containing the public methods to extend the including object with.
Includes a module in this object .