Dependency injector, assembles application.
Registering, getting and setting components.
app.register 'component', -> 'some component'console.log app.component# => some componentapp.component = 'another component'console.log app.component# => another component
Dependencies can be specified implicitly.
app.register 'a', ->console.log 'initializing a''a'app.register 'b', ->console.log 'initializing b'"#{app.a} b"console.log app.b# => initializing b# => initializing a# => a b
Or explicitly. The only difference with implicit approach is that explicit declaration will resolve circular dependencies (implicit approach will fail).
app.register 'a', ->console.log 'initializing a''a'app.register 'b', dependencies: ['a'], ->console.log 'initializing b'"#{app.a} b"console.log app.b# => initializing a# => initializing b# => a b
Component lifecycle callbacks.
app.register 'component', ->console.log 'initialization''some component'app.before 'component', -> console.log 'before initialization'app.after 'component', -> console.log 'after initialization'app.component# => before initialization# => initialization# => after initialization
Scopes.
app.register 'params', scope: 'request', -> {}startFiberSomehow ->app.scope 'request', ->app.params.key = 'some value'console.log app.params# => {key: 'some value'}
Scope callbacks.
app.beforeScope 'request', -> console.log 'before'app.afterScope 'request', -> console.log 'after'startFiberSomehow ->app.scope 'request', -># => before# => after
Require files in directory, provide watch: true
option to watch for changes and reload.
# /app/controllers/SomeController.coffee# app.SomeController = 'some controller'app.requireDirectory '/absolutePath/app/controllers', watch: trueconsole.log app.SomeController# => some controller
Limitations.
- Fiber and custom scopes will not work in browser because browsers doesn't support fibers.
- Use
app.get componentName
instead ofapp.componentName
in old browsers not supporting getters and setters syntax. Useset
for setting components.
Copyright (c) Alexey Petrushin, http://petrush.in, released under the MIT license.