Class: Encase::Container

Inherits:
Object
  • Object
show all
Defined in:
lib/encase/container.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(parent = nil) ⇒ Container

Returns a new instance of Container.



7
8
9
10
# File 'lib/encase/container.rb', line 7

def initialize(parent = nil)
  @parent = parent
  @items = {}
end

Instance Attribute Details

#parentObject

Returns the value of attribute parent.



5
6
7
# File 'lib/encase/container.rb', line 5

def parent
  @parent
end

Instance Method Details

#childObject



76
77
78
# File 'lib/encase/container.rb', line 76

def child
  Container.new(self)
end

#clearObject



45
46
47
# File 'lib/encase/container.rb', line 45

def clear
  @items.clear
end

#configure(&block) ⇒ Object



72
73
74
# File 'lib/encase/container.rb', line 72

def configure(&block)
  instance_exec(&block)
end

#contains?(key) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
# File 'lib/encase/container.rb', line 12

def contains?(key)
  @items.key?(key)
end

#factory(key, value = nil, &block) ⇒ Object



53
54
55
# File 'lib/encase/container.rb', line 53

def factory(key, value = nil, &block)
  register('factory', key, value, block)
end

#inject(object) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/encase/container.rb', line 16

def inject(object)
  klass = object.class
  if klass.respond_to?(:needs_to_inject)
    needs_to_inject = klass.needs_to_inject
    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) ⇒ Object



61
62
63
64
65
66
67
68
69
70
# File 'lib/encase/container.rb', line 61

def lookup(key)
  if contains?(key)
    item = @items[key]
    item.instance
  elsif !parent.nil?
    parent.lookup(key)
  else
    raise KeyError.new("Key:#{key} not found in container.")
  end
end

#object(key, value = nil, &block) ⇒ Object



49
50
51
# File 'lib/encase/container.rb', line 49

def object(key, value = nil, &block)
  register('object', key, value, block)
end

#register(type, key, value, block) ⇒ Object



35
36
37
38
39
# File 'lib/encase/container.rb', line 35

def register(type, key, value, block)
  item = ContainerItemFactory.build(type, self)
  item.store(key, value || block)
  @items[key] = item
end

#singleton(key, value = nil, &block) ⇒ Object



57
58
59
# File 'lib/encase/container.rb', line 57

def singleton(key, value = nil, &block)
  register('singleton', key, value, block)
end

#unregister(key) ⇒ Object



41
42
43
# File 'lib/encase/container.rb', line 41

def unregister(key)
  @items.delete(key)
end