lib/thread/promise.rb in thread-0.0.2 vs lib/thread/promise.rb in thread-0.0.3
- old
+ new
@@ -8,15 +8,20 @@
# 0. You just DO WHAT THE FUCK YOU WANT TO.
#++
require 'thread'
+# A promise is an object that lets you wait for a value to be delivered to it.
class Thread::Promise
+ # Check if a value has been delivered.
def delivered?
instance_variable_defined? :@value
end
+ alias realized? delivered?
+
+ # Deliver a value.
def deliver (value)
return if delivered?
@value = value
@@ -29,17 +34,19 @@
self
end
alias << deliver
+ # Get the value that's been delivered, if none has been delivered yet the call
+ # will block until one is delivered.
def value
return @value if delivered?
mutex.synchronize {
cond.wait(mutex)
}
- return @value
+ @value
end
alias ~ value
private