Class: FutureResource

Inherits:
Object
  • Object
show all
Defined in:
lib/future-resource.rb,
lib/future-resource/version.rb

Defined Under Namespace

Classes: ResourceAlreadySetException

Constant Summary collapse

VERSION =
"0.0.2"

Instance Method Summary collapse

Constructor Details

#initializeFutureResource

Returns a new instance of FutureResource.



6
7
8
9
# File 'lib/future-resource.rb', line 6

def initialize
  @resource_lock          = Monitor.new
  @resource_value_blocker = @resource_lock.new_cond
end

Instance Method Details

#resource(timeout = nil) ⇒ Object



15
16
17
18
19
20
21
22
# File 'lib/future-resource.rb', line 15

def resource(timeout = nil)
  Timeout::timeout timeout do
    @resource_lock.synchronize do
      @resource_value_blocker.wait unless defined? @resource
      @resource
    end
  end
end

#resource=(resource) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/future-resource.rb', line 24

def resource=(resource)
  @resource_lock.synchronize do
    raise ResourceAlreadySetException if defined? @resource
    @resource = resource
    @resource_value_blocker.broadcast
    @resource_value_blocker = nil # Don't really need it anymore.
  end
end

#set_yet?Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/future-resource.rb', line 11

def set_yet?
  !!@resource_lock.synchronize { defined? @resource }
end