Class: ActiveRecord::Promise
- Inherits:
- BasicObject
- Defined in:
- activerecord/lib/active_record/promise.rb
Direct Known Subclasses
Defined Under Namespace
Classes: Complete
Instance Method Summary collapse
-
#initialize(future_result, block) ⇒ Promise
constructor
:nodoc:.
-
#inspect ⇒ Object
:nodoc:.
-
#pending? ⇒ Boolean
Returns whether the associated query is still being executed or not.
-
#pretty_print(q) ⇒ Object
:nodoc:.
-
#then(&block) ⇒ Object
Returns a new
ActiveRecord::Promise
that will apply the passed block when the value is accessed:. -
#value ⇒ Object
Returns the query result.
Constructor Details
#initialize(future_result, block) ⇒ Promise
:nodoc:
7 8 9 10 |
# File 'activerecord/lib/active_record/promise.rb', line 7 def initialize(future_result, block) # :nodoc: @future_result = future_result @block = block end |
Instance Method Details
#inspect ⇒ Object
:nodoc:
44 45 46 |
# File 'activerecord/lib/active_record/promise.rb', line 44 def inspect # :nodoc: "#<ActiveRecord::Promise status=#{status}>" end |
#pending? ⇒ Boolean
Returns whether the associated query is still being executed or not.
13 14 15 |
# File 'activerecord/lib/active_record/promise.rb', line 13 def pending? @future_result.pending? end |
#pretty_print(q) ⇒ Object
:nodoc:
48 49 50 |
# File 'activerecord/lib/active_record/promise.rb', line 48 def pretty_print(q) # :nodoc: q.text(inspect) end |
#then(&block) ⇒ Object
Returns a new ActiveRecord::Promise
that will apply the passed block when the value is accessed:
Post.async_pluck(:title).then { |title| title.upcase }.value
# => "POST TITLE"
36 37 38 |
# File 'activerecord/lib/active_record/promise.rb', line 36 def then(&block) Promise.new(@future_result, @block ? @block >> block : block) end |
#value ⇒ Object
Returns the query result. If the query wasn’t completed yet, accessing #value
will block until the query completes. If the query failed, #value
will raise the corresponding error.
20 21 22 23 24 25 26 27 28 29 |
# File 'activerecord/lib/active_record/promise.rb', line 20 def value return @value if defined? @value result = @future_result.result @value = if @block @block.call(result) else result end end |