-
Notifications
You must be signed in to change notification settings - Fork 2
/
attrs.coffee
43 lines (31 loc) · 1.04 KB
/
attrs.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
setup = (support)->
exports = Inject
injectConstructor = (_super,index,getConfig) ->
(args...) ->
# get the definition and find the map of attr -> dependency
config = getConfig(this,support,args)
target = args[index]
keys = (key for key, dep of config)
deps = (dep for key, dep of config)
# resolve the dependencies and set each one on the target object iff it is undefined
# then continue construction
Inject.require.apply(this,deps.concat( (values...) ->
for value, i in values
key = keys[i]
target[key] = value unless has.call(target,key)
_super.apply(this,args)
)).call(this)
exports.setup = ->
Inject.setup.arg().apply(this,arguments)
exports.setup.arg = (index = 0,getConfig = getAttrs) ->
->
@newInstance = injectConstructor @newInstance, index, getConfig
getAttrs = (Class,support) ->
support.definition(Class.fullName).attrs ? {}
has = Object.prototype.hasOwnProperty
(if steal.plugins
steal('inject-core.js')
else
steal('./inject-core.js')).then ->
Inject.plugin
init: setup