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