Class: Wireless::Resolver::Singleton

Inherits:
Wireless::Resolver show all
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

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