class Dinja::Container

Dependency injection container

Attributes

dependencies[R]

Public Class Methods

new() click to toggle source
# File lib/dinja/container.rb, line 8
def initialize
  @dependencies = {}
end

Public Instance Methods

lookup(key) click to toggle source

Look up a dependency without resolving it

@param [String] key The unique name under which the dependency was registered

@raise [DependencyNotRegistered] If the dependency was not registered

# File lib/dinja/container.rb, line 40
def lookup(key)
  raise DependencyNotRegistered, "Dependency not registered: #{key}" unless dependencies.key?(key)

  dependencies[key]
end
lookup!(key) click to toggle source

Look up a dependency without resolving it

@param [String] key The unique name under which the dependency was registered

# File lib/dinja/container.rb, line 50
def lookup!(key)
  dependencies[key]
end
register(key, &block) click to toggle source

Register a dependency

@param [String] key The unique key under which the dependency will be registered @param [Proc] &block The proc to be called when resolving the dependency

@raise [DependencyAlreadyRegistered] If the dependency was already registered before

# File lib/dinja/container.rb, line 19
def register(key, &block)
  raise DependencyAlreadyRegistered, "Dependency already registered: #{key}" if dependencies.key?(key)

  register!(key, &block)
end
register!(key, &block) click to toggle source

Register or overwrite an existing dependency

@param [String] key The unique key under which the dependency will be registered @param [Proc] &block The proc to be called when resolving the dependency

# File lib/dinja/container.rb, line 30
def register!(key, &block)
  dependencies[key] = block
end
resolve(key, *args, **kwargs, &block) click to toggle source

Resolve a dependency

@param [String] key The unique key under which the dependency was registered @param [Object] *args The arguments to pass when resolving the dependency @param [Proc] &block The block to pass when resolving the dependency

@raise [DependencyNotRegistered] If the dependency was not registered

# File lib/dinja/container.rb, line 62
def resolve(key, *args, **kwargs, &block)
  lookup(key).call(*args, **kwargs, &block)
end
resolve!(key, *args, **kwargs, &block) click to toggle source

Resolve a dependency

@param [String] key The unique key under which the dependency was registered @param [Object] *args The arguments to pass when resolving the dependency @param [Proc] &block The block to pass when resolving the dependency

# File lib/dinja/container.rb, line 72
def resolve!(key, *args, **kwargs, &block)
  lookup!(key)&.call(*args, **kwargs, &block)
end