Class: Wireless::Resolver::Singleton
- Inherits:
-
Wireless::Resolver
- Object
- Wireless::Resolver
- Wireless::Resolver::Singleton
- Defined in:
- lib/wireless/resolver/singleton.rb
Overview
A dependency resolver which only runs its block the first time the value is read. On subsequent reads, the cached value is returned.
Instance Method Summary collapse
-
#initialize(block) ⇒ Singleton
constructor
A new instance of Singleton.
-
#resolve(fetcher) ⇒ Object
Resolve the dependency once.
Constructor Details
#initialize(block) ⇒ Singleton
Returns a new instance of Singleton.
8 9 10 11 12 13 |
# File 'lib/wireless/resolver/singleton.rb', line 8 def initialize(block) super(block) @lock = Mutex.new @seen = false @value = nil end |
Instance Method Details
#resolve(fetcher) ⇒ Object
Resolve the dependency once. On subsequent calls, return the cached version.
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/wireless/resolver/singleton.rb', line 17 def resolve(fetcher) @lock.synchronize do unless @seen @value = @block.call(fetcher.call) @seen = true end @value end end |