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
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