attr_inject¶ ↑
attr_inject is an small and elegant dependency injection solution for Ruby.
Installation¶ ↑
gem install attr_inject
Usage¶ ↑
attr_inject can be used many ways scaling from the least inrtusive to more inrusive options.
Simple Example¶ ↑
Dependencies are injected via a Hash through the Object’s constructor.
~~~ ruby class Application
# initialize our dependencies driver = Driver.new passenger = Passenger.new
# inject our dependencies into our Car object car = Car.new :driver => driver, :passenger => passenger
end ~~~
~~~ ruby class Car attr_inject :driver attr_inject :passenger
def initialize(options) inject_attributes options end
end ~~~
Injector Example¶ ↑
For more inversion of control, an Injector can be used.
~~~ ruby class Application include Inject
# Map our depedencies injector = Injector.new injector.map :driver, Driver.new injector.map :passenger, Passenger.new
# Inject
our dependencies into our car object car = Car.new injector.apply(car)
end ~~~
<s>~ ruby class Car attr_inject :driver attr_inject :passenger end </s>~
Factory Example¶ ↑
Create an Injector to map objects and factories to.
~~~ ruby require “attr_inject”
class Application include Inject
# Map our depedencies injector = Injector.new injector.map :driver, Driver.new injector.map :passenger, Passenger.new
# Factory dependencies are called # on each inject and are passed it’s # target object injector.factory :logger do |target| Logger.new(target) end
# Inject
our dependencies into our car object car = Car.new injector.apply(car)
end ~~~
Our car object explicitly defines what dependencies it wants.
~~~ ruby class Car
attr_inject :driver attr_inject :passenger attr_inject :logger
end ~~~