moduleKeywords = ['extended', 'included'] @Modules = {} class @Module @extend: (obj) -> obj = obj.prototype || obj for key, value of obj when key not in moduleKeywords @[key] = value obj.extended?.apply(@) this @include: (obj) -> obj = obj.prototype || obj for key, value of obj when key not in moduleKeywords # Assign properties to the prototype @::[key] = value obj.included?.apply(@) this