class Dumpling::Container

Attributes

abstract_services[R]
services[R]

Public Class Methods

new() click to toggle source
# File lib/dumpling/container.rb, line 3
def initialize
  @services = Registry.new
  @abstract_services = Registry.new
end

Public Instance Methods

[](id)
Alias for: get
abstract(id, &block) click to toggle source
# File lib/dumpling/container.rb, line 16
def abstract(id, &block)
  raise(Errors::Container::Duplicate, id) if @abstract_services.has?(id)

  specification = create_abstract_specification(&block)
  @abstract_services.set(id, specification)
  id
end
configure(&block) click to toggle source
# File lib/dumpling/container.rb, line 33
def configure(&block)
  instance_eval(&block)
  self
end
get(id) click to toggle source
# File lib/dumpling/container.rb, line 24
def get(id)
  raise(Errors::Container::Missing, id) unless @services.has?(id)

  specification = @services.get(id)
  build_service(specification)
end
Also aliased as: []
initialize_dup(original) click to toggle source
Calls superclass method
# File lib/dumpling/container.rb, line 38
def initialize_dup(original)
  @services = original.services.dup
  @abstract_services = original.abstract_services.dup
  super
end
inspect() click to toggle source
# File lib/dumpling/container.rb, line 44
def inspect
  services = @services.keys.sort.map { |id| inspect_service(id) }
  services.empty? ? to_s : "#{self}\n#{services.join("\n").strip}"
end
set(id, &block) click to toggle source
# File lib/dumpling/container.rb, line 8
def set(id, &block)
  raise(Errors::Container::Duplicate, id) if @services.has?(id)

  specification = create_specification(&block)
  @services.set(id, specification)
  id
end

Private Instance Methods

build_service(specification) click to toggle source
# File lib/dumpling/container.rb, line 78
def build_service(specification)
  ServiceBuilder.new(@services, @abstract_services).build(specification)
end
class_validator() click to toggle source
# File lib/dumpling/container.rb, line 70
def class_validator
  @class_validator ||= ClassValidator.new
end
create_abstract_specification() { |spec| ... } click to toggle source
# File lib/dumpling/container.rb, line 63
def create_abstract_specification
  spec = ServiceSpecification.new
  yield spec
  dependencies_validator.validate(spec)
  spec
end
create_specification() { |spec| ... } click to toggle source
# File lib/dumpling/container.rb, line 55
def create_specification
  spec = ServiceSpecification.new
  yield spec
  class_validator.validate(spec)
  dependencies_validator.validate(spec)
  spec
end
dependencies_validator() click to toggle source
# File lib/dumpling/container.rb, line 74
def dependencies_validator
  @dependencies_validator ||= DependenciesValidator.new(@services.keys, @abstract_services.keys)
end
inspect_service(id) click to toggle source
# File lib/dumpling/container.rb, line 82
def inspect_service(id)
  service = @services.get(id)
  string = id.to_s
  string << inspect_service_object(service.instance, service.class).to_s
  string << inspect_service_dependencies(service.dependencies).to_s
end
inspect_service_dependencies(dependencies) click to toggle source
# File lib/dumpling/container.rb, line 94
def inspect_service_dependencies(dependencies)
  dependencies = dependencies.keys.join(',')
  "\n --> dependencies: #{dependencies}" unless dependencies.empty?
end
inspect_service_object(service_instance, service_class) click to toggle source
# File lib/dumpling/container.rb, line 89
def inspect_service_object(service_instance, service_class)
  service_object = (service_instance.nil? ? service_class.inspect : service_instance.inspect)
  "\n --> #{service_instance.nil? ? 'class' : 'instance'}: #{service_object}"
end