class SmartCore::Injection::Injector::ContainerSet
@api private @since 0.1.0
Attributes
@return [Array<SmartCore::Injection::Injector::ContainerSet::AddingListener>]
@return [Array<SmartCore::Container>]
@api private @since 0.1.0
Public Class Methods
@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
@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
@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
@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
@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
@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
@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
@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
@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