class SmartCore::Injection::Injector::ContainerSet

@api private @since 0.1.0

Attributes

adding_listeners[R]

@return [Array<SmartCore::Injection::Injector::ContainerSet::AddingListener>]

containers[R]

@return [Array<SmartCore::Container>]

@api private @since 0.1.0

Public Class Methods

new() click to toggle source

@return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/container_set.rb, line 15
def initialize
  @containers = [] # NOTE: we use Array cuz we need an ordered set
  @adding_listeners = []
  @access_lock = SmartCore::Engine::Lock.new
end

Public Instance Methods

<<(container)
Alias for: add
add(container) click to toggle source

@param container [SmartCore::Container] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/container_set.rb, line 26
def add(container)
  thread_safe { append_container(container) }
end
Also aliased as: <<
each(&block) click to toggle source

@param block [Block] @yield [container] @yieldparam container [SmartCore::Container] @return [Enumerator]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/container_set.rb, line 49
def each(&block)
  thread_safe { block_given? ? containers.each(&block) : containers.each }
end
list() click to toggle source

@return [Array<SmartCore::Container>]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/container_set.rb, line 68
def list
  thread_safe { containers.dup }
end
listen_addings(&listener) click to toggle source

@param listener [Block] @yield [container] @yieldparam container [SmartCore::Container] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/container_set.rb, line 38
def listen_addings(&listener)
  thread_safe { add_adding_listener(listener) }
end
reverse_each(&block) click to toggle source

@param block [Block] @yield [container] @yieldparam container [SmartCore::Container] @return [Enumerator]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/container_set.rb, line 60
def reverse_each(&block)
  thread_safe { block_given? ? containers.reverse_each(&block) : containers.reverse_each }
end

Private Instance Methods

add_adding_listener(listener) click to toggle source

@param listener [Proc] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/container_set.rb, line 88
def add_adding_listener(listener)
  adding_listeners << SmartCore::Injection::Injector::ContainerSet::AddingListener.new(listener)
end
append_container(container) click to toggle source

@param container [SmartCore::Container] @return [void]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/container_set.rb, line 97
def append_container(container)
  # NOTE:
  #   - #concant is used to prevent container duplications in ordered set;
  #   - @containers should have an ordered unified container list;
  containers.concat([container])
  adding_listeners.each { |listener| listener.notify(container) }
end
thread_safe(&block) click to toggle source

@param block [Block] @return [Any]

@api private @since 0.1.0

# File lib/smart_core/injection/injector/container_set.rb, line 110
def thread_safe(&block)
  @access_lock.synchronize(&block)
end