class Needle::Lifecycle::Multiton
The instantiation pipeline element that enforces the multiton multiplicity. “Multiton” multiplicity is like singleton multiplicity, except that the guarded instance is unique for each unique set of arguments passed to the multiton.
Public Instance Methods
call( container, point, *args )
click to toggle source
Returns the cached reference for the given arguments, if it has been previously cached. Otherwise, invokes the next element in the pipeline and caches the result. The cached reference is returned.
# File lib/needle/lifecycle/multiton.rb, line 40 def call( container, point, *args ) unless @is_cached[ args ] @mutex.synchronize do unless @is_cached[ args ] @cached[ args ] = succ.call( container, point, *args ) @is_cached[ args ] = true end end end @cached[ args ] end
initialize_element()
click to toggle source
Creates the mutex to use and initializes the cache.
# File lib/needle/lifecycle/multiton.rb, line 31 def initialize_element @mutex = QueryableMutex.new @cached = Hash.new @is_cached = Hash.new( false ) end
reset!()
click to toggle source
Resets the caches for this multiton object.
# File lib/needle/lifecycle/multiton.rb, line 54 def reset! @mutex.synchronize do @cached = Hash.new @is_cached = Hash.new( false ) end end