Class Needle::Lifecycle::Singleton
In: lib/needle/lifecycle/singleton.rb
Parent: Needle::Pipeline::Element

The instantiation pipeline element that enforces the singleton multiplicity.

Methods

Public Instance methods

Returns the cached reference, if it has been previously cached. Otherwise, invokes the next element in the pipeline and caches the result. The cached reference is returned.

[Source]

    # File lib/needle/lifecycle/singleton.rb, line 38
38:       def call( container, point )
39:         unless @is_cached
40:           @mutex.synchronize do
41:             unless @is_cached
42:               @cached = succ.call( container, point )
43:               @is_cached = true
44:             end
45:           end
46:         end
47: 
48:         @cached
49:       end

Creates the mutex to use and sets the cached reference to nil.

[Source]

    # File lib/needle/lifecycle/singleton.rb, line 29
29:       def initialize_element
30:         @mutex = QueryableMutex.new
31:         @cached = nil
32:         @is_cached = false
33:       end

Resets the cached singleton instance, so that the next time it is requested it is re-constructed.

[Source]

    # File lib/needle/lifecycle/singleton.rb, line 53
53:       def reset!
54:         @mutex.synchronize do
55:           @cached = nil
56:           @is_cached = false
57:         end
58:       end

[Validate]