class Pinball::Container
Attributes
items[R]
Public Class Methods
clear()
click to toggle source
# File lib/pinball/container.rb, line 19 def clear instance.items.clear end
configure(&block)
click to toggle source
# File lib/pinball/container.rb, line 11 def configure(&block) instance.instance_exec(&block) end
define(key, value = nil, &block)
click to toggle source
# File lib/pinball/container.rb, line 23 def define(key, value = nil, &block) instance.define(key, value, &block) end
define_singleton(key, klass)
click to toggle source
# File lib/pinball/container.rb, line 27 def define_singleton(key, klass) instance.define_singleton(key, klass) end
lookup(key)
click to toggle source
# File lib/pinball/container.rb, line 15 def lookup(key) instance.items[key] end
new()
click to toggle source
# File lib/pinball/container.rb, line 36 def initialize @items = {} end
undefine(key)
click to toggle source
# File lib/pinball/container.rb, line 31 def undefine(key) instance.undefine(key) end
Public Instance Methods
define(key, value = nil, &block)
click to toggle source
# File lib/pinball/container.rb, line 40 def define(key, value = nil, &block) @items[key] = ContainerItem.new(value || block) end
define_singleton(key, klass)
click to toggle source
# File lib/pinball/container.rb, line 44 def define_singleton(key, klass) if klass.instance_method(:initialize).arity <= 0 @items[key] = ContainerItem.new(klass.new) else raise Pinball::WrongArity.new('Singleton dependency initializer should not have mandatory params') end end
inject(target)
click to toggle source
# File lib/pinball/container.rb, line 56 def inject(target) target.class.dependencies.each do |dep| unless target.respond_to?(dep) target.define_singleton_method dep do begin Container.instance.items.merge(overridden_dependencies)[dep].fetch(self) rescue NoMethodError raise Pinball::UnknownDependency.new("Dependency #{dep} is unknown, check your pinball config") end end end end end
undefine(key)
click to toggle source
# File lib/pinball/container.rb, line 52 def undefine(key) @items.delete(key) end