Spank
A simple light weight inversion of control container written in ruby.
Installation
Add this line to your application's Gemfile:
gem 'spank'
And then execute:
$ bundle
Or install it yourself as:
$ gem install spank
Usage
Register a single component and resolve it.
container = Spank::Container.new
container.register(:item) do |container|
"ITEM"
end
item = container.resolve(:item)
Register multiple items, and resolve them.
container = Spank::Container.new
container.register(:pants) { jeans }
container.register(:pants) { dress_pants }
pants = container.resolve_all(:pants)
Register a singleton.
container = Spank::Container.new
container.register(:singleton) { fake }.as_singleton
single_instance = container.resolve(:singleton)
same_instance = container.resolve(:singleton)
Automatic dependency resolution.
class Child
def initialize(mom,dad)
end
end
container = Spank::Container.new
container.register(:mom) { mom }
container.register(:dad) { dad }
child = sut.build(Child)
Register selective interceptors.
class Interceptor
def intercept(invocation)
invocation.proceed
end
end
class Command
def run(input)
end
end
container = Spank::Container.new
container
.register(:command) { Command.new }
.intercept(:run)
.with(Interceptor.new)
proxy = container.resolve(:command)
proxy.run("hi")
container = Spank::Container.new
Spank::IOC.bind_to(container)
item = Spank::IOC.resolve(:item)
Enjoy!
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request