class Wireless::Resolver::Singleton

A dependency resolver which only runs its block the first time the value is read. On subsequent reads, the cached value is returned.

Public Class Methods

new(block) click to toggle source
Calls superclass method Wireless::Resolver::new
# File lib/wireless/resolver/singleton.rb, line 8
def initialize(block)
  super(block)
  @lock = Mutex.new
  @seen = false
  @value = nil
end

Public Instance Methods

resolve(fetcher) click to toggle source

Resolve the dependency once. On subsequent calls, return the cached version.

# 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