class Nurse::DependencyContainer

The dependency container class

Attributes

factories[R]
instances[R]
shared_factories[R]

Public Class Methods

new() click to toggle source
# File lib/nurse/dependency_container.rb, line 7
def initialize
  @factories = {}
  @shared_factories = {}
  @instances = {}
end

Public Instance Methods

add_factory(factory) click to toggle source
# File lib/nurse/dependency_container.rb, line 42
def add_factory(factory)
  factory.attach_to(self)
end
defined?(dependency) click to toggle source
# File lib/nurse/dependency_container.rb, line 25
def defined?(dependency)
  key = to_key(dependency)
  shared_factories.key?(key) || factories.key?(key)
end
get(dependency) { || ... } click to toggle source
# File lib/nurse/dependency_container.rb, line 30
def get(dependency, &_block)
  key = to_key(dependency)

  if self.defined?(key)
    return from_shared_factories(key) || from_factories(key)
  end

  return yield if block_given?

  fail UndefinedDependency, "'#{dependency}' was not defined"
end
set(dependency, &block) click to toggle source
# File lib/nurse/dependency_container.rb, line 19
def set(dependency, &block)
  ensure_undefined(dependency)
  factories[to_key(dependency)] = block
  self
end
share(dependency, &block) click to toggle source
# File lib/nurse/dependency_container.rb, line 13
def share(dependency, &block)
  ensure_undefined(dependency)
  shared_factories[to_key(dependency)] = block
  self
end

Protected Instance Methods

ensure_undefined(dependency) click to toggle source
# File lib/nurse/dependency_container.rb, line 61
def ensure_undefined(dependency)
  return unless self.defined?(dependency)
  fail DependencyAlreadyDefined,
       "Dependency '#{dependency}' was already defined"
end
from_factories(key) click to toggle source
# File lib/nurse/dependency_container.rb, line 57
def from_factories(key)
  factories[key].call(self) if factories.key?(key)
end
from_shared_factories(key) click to toggle source
# File lib/nurse/dependency_container.rb, line 52
def from_shared_factories(key)
  return unless shared_factories.key?(key)
  instances[key] ||= shared_factories[key].call(self)
end
to_key(object) click to toggle source
# File lib/nurse/dependency_container.rb, line 67
def to_key(object)
  object.to_s
end