class IoC::Container

Attributes

depedencies[R]
mutex[R]

Public Class Methods

init() { |instance| ... } click to toggle source
# File lib/ioc/container.rb, line 15
def self.init
  yield(instance)
end
new() click to toggle source
# File lib/ioc/container.rb, line 10
def initialize
  @depedencies = Hash.new
  @mutex = Mutex.new
end

Public Instance Methods

register(name, value = nil, &block) click to toggle source
# File lib/ioc/container.rb, line 19
def register(name, value = nil, &block)
  raise ArgumentError, "WTF dude?" unless name && (value || block)

  synchronized do
    dependency = if block_given?
                   Dependency.new(block)
                 else
                   Dependency.new(value, singleton: true)
                 end

    depedencies[name] = dependency
  end
end
retrieve(name) click to toggle source
# File lib/ioc/container.rb, line 33
def retrieve(name)
  synchronized do
    dependency = depedencies.fetch(name)
    dependency.call
  end
rescue KeyError
  raise DependencyNotFound, "Dependency not found"
end

Private Instance Methods

synchronized(&block) click to toggle source
# File lib/ioc/container.rb, line 46
def synchronized(&block)
  mutex.synchronize(&block)
end