Skip to content

Instantly share code, notes, and snippets.

@Raynos

Raynos/pd.can Secret

Created March 24, 2012 20:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Raynos/b86ed871069c90a55bb7 to your computer and use it in GitHub Desktop.
Save Raynos/b86ed871069c90a55bb7 to your computer and use it in GitHub Desktop.
Array = require("Array")
pd = {}
pd.bindAll = bindAll
pd.extend = extend
pd.Name = Name
return pd
extend(target, ...sources) {
Array.forEach(sources, (elem) {
Array.forEach(keysof elem, (name) {
target[name] = elem[name]
})
})
return target
}
namespace(object, key) {
privates = new object
valueOf = object.valueOf
object.valueOf = (self, value) {
if (value == key) {
return privates
}
return valueOf(self, value)
}
return privates
}
Name() {
key = {}
return name
name(object) {
privates = object:valueOf(key)
if (privates == object) {
return namespace(object, key)
}
return privates
}
}
bindAll(obj, ...sources) {
pd.extend(obj, ...sources)
Array.forEach(Array.filter(keysof obj, isMethod), bindMethods)
return obj
isMethod(name) {
return typeof obj[name] == "function"
}
bindMethods(name) {
f = obj[name]
obj[name] = (...args) {
f(obj, ...args)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment