A minimal dependency injection framework for Ruby, using vanilla Ruby semantics to define and reference dependencies from different providers.
Provides methods for defining and accessing injected dependencies.
Define a basic dependency.
class Orchestrator
include Plumbum::Consumer
include ApplicationProvider
dependency :application
end
Orchestrator.new.application
#=> returns the value of ApplicationProvider.valueDefine an aliased dependency.
class Orchestrator
include Plumbum::Consumer
include ApplicationProvider
dependency :application, as: :app
end
Orchestrator.new.app
#=> returns the value of ApplicationProvider.valueDefine an optional dependency.
class BillCustomer
include Plumbum::Consumer
dependency :rewards
end
class BillRewardsCustomer < BillCustomer
include RewardsProvider
end
BillCustomer.new.rewards
#=> returns nil
BillRewardsCustomer.new.rewards
#=> returns RewardsProvider.valueDefine an unmemoized dependency.
class Action
include Plumbum::Consumer
include RequestProvider
dependency :request, memoize: false
end
action = Action.new
action.request
#=> returns the value of RequestProvider.value
request = Request.new
RequestProvider.value = request
action.request
#=> returns the new requestDefine a dependency with scoped key.
class Client
include Plumbum::Consumer
include ConfigurationProvider
dependency 'config.network.default_server'
end
client = Client.new
client.default_server
#=> returns the value of ConfigurationProvider.values[:config][:network][:default_server]Define multiple dependencies.
class Rocket
include Plumbum::Consumer
include RocketPartsProvider
dependency :engine, :fusilage, :payload
end
rocket = Rocket.new
rocket.engine
#=> returns the value of RocketPartsProvider.values[:engine]Define multiple dependencies with scoped keys.
class Server
include Plumbum::Consumer
include ConfigurationProvider
dependency :port, :protocol, :timeout, scope: 'config.network'
end
server = Server.new
server.port
#=> returns the value of ConfigurationProvider.values[:config][:network][:port]Define a method depndency.
class Application
include Plumbum::Consumer
include ProcessManagerProvider
dependency '#restart', scope: :process_manager
end
application = Application.new
application.restart(force: true)
#=> calls ProcessManagerProvider.values[:process_manager].restart(force: true).included(other) => Object
Callback invoked when Consumer is included in another module or class.
#get_plumbum_dependency(key, optional: false) => Object
Retrieves the dependency with the specified key.
#has_plumbum_dependency?(key) => true, false
Checks if the dependency with the given key is defined.
Back to Documentation | Reference | Plumbum