class Encase::Container
Attributes
parent[RW]
Public Class Methods
new(parent = nil)
click to toggle source
# File lib/encase/container.rb, line 7 def initialize(parent = nil) @parent = parent @items = {} end
Public Instance Methods
child()
click to toggle source
# File lib/encase/container.rb, line 95 def child Container.new(self) end
clear()
click to toggle source
# File lib/encase/container.rb, line 58 def clear @items.clear self end
configure(&block)
click to toggle source
# File lib/encase/container.rb, line 90 def configure(&block) instance_exec(&block) self end
contains?(key)
click to toggle source
# File lib/encase/container.rb, line 12 def contains?(key) @items.key?(key) end
factory(key, value = nil, &block)
click to toggle source
# File lib/encase/container.rb, line 68 def factory(key, value = nil, &block) register('factory', key, value, block) self end
find_needs_to_inject(klass)
click to toggle source
# File lib/encase/container.rb, line 35 def find_needs_to_inject(klass) needs = [] klass.ancestors.each do |ancestor| if ancestor.respond_to?(:needs_to_inject) && !ancestor.needs_to_inject.nil? needs.concat(ancestor.needs_to_inject) end end needs end
inject(object)
click to toggle source
# File lib/encase/container.rb, line 16 def inject(object) klass = object.class if klass.respond_to?(:needs_to_inject) needs_to_inject = find_needs_to_inject(klass) needs_to_inject.each do |need| object.instance_variable_set( "@#{need}", lookup(need) ) end object.container = self if object.respond_to?(:container) object.on_inject() if object.respond_to?(:on_inject) true else false end end
lookup(key, origin = nil)
click to toggle source
# File lib/encase/container.rb, line 78 def lookup(key, origin = nil) if contains?(key) item = @items[key] item.instance(origin) elsif !parent.nil? origin = self if origin.nil? parent.lookup(key, origin) else raise KeyError.new("Key:#{key} not found in container.") end end
object(key, value = nil, &block)
click to toggle source
# File lib/encase/container.rb, line 63 def object(key, value = nil, &block) register('object', key, value, block) self end
register(type, key, value, block)
click to toggle source
# File lib/encase/container.rb, line 46 def register(type, key, value, block) item = ContainerItemFactory.build(type, self) item.store(key, value || block) @items[key] = item self end
singleton(key, value = nil, &block)
click to toggle source
# File lib/encase/container.rb, line 73 def singleton(key, value = nil, &block) register('singleton', key, value, block) self end
unregister(key)
click to toggle source
# File lib/encase/container.rb, line 53 def unregister(key) @items.delete(key) self end