Class: Rake::Promise
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/rake/promise.rb |
Overview
A Promise object represents a promise to do work (a chore) in the future. The promise is created with a block and a list of arguments for the block. Calling value will return the value of the promised chore.
Used by ThreadPool
.
Constant Summary
-
NOT_SET =
# File 'lib/rake/promise.rb', line 12Object.new.freeze
Class Method Summary
-
.new(args, &block) ⇒ Promise
constructor
Create a promise to do the chore specified by the block.
Instance Attribute Summary
- #recorder rw
-
#complete? ⇒ Boolean
readonly
private
Are we done with the promise.
-
#error? ⇒ Boolean
readonly
private
Did the promise throw an error.
-
#result? ⇒ Boolean
readonly
private
Do we have a result for the promise.
Instance Method Summary
-
#value
Return the value of this promise.
-
#work
If no one else is working this promise, go ahead and do the chore.
-
#chore
private
Perform the chore promised.
-
#discard
private
free up these items for the GC.
-
#stat(*args)
private
Record execution statistics if there is a recorder.
Constructor Details
.new(args, &block) ⇒ Promise
Create a promise to do the chore specified by the block.
Instance Attribute Details
#complete? ⇒ Boolean
(readonly, private)
Are we done with the promise
#error? ⇒ Boolean
(readonly, private)
Did the promise throw an error
# File 'lib/rake/promise.rb', line 78
def error? !@error.equal?(NOT_SET) end
#recorder (rw)
[ GitHub ]# File 'lib/rake/promise.rb', line 14
attr_accessor :recorder
#result? ⇒ Boolean
(readonly, private)
Do we have a result for the promise
# File 'lib/rake/promise.rb', line 73
def result? !@result.equal?(NOT_SET) end
Instance Method Details
#chore (private)
Perform the chore promised
#discard (private)
free up these items for the GC
# File 'lib/rake/promise.rb', line 88
def discard @args = nil @block = nil end
#stat(*args) (private)
Record execution statistics if there is a recorder
# File 'lib/rake/promise.rb', line 94
def stat(*args) @recorder.call(*args) if @recorder end
#value
Return the value of this promise.
If the promised chore is not yet complete, then do the work synchronously. We will wait.
#work
If no one else is working this promise, go ahead and do the chore.