class ActiveRecord::Promise

Public Instance Methods

pending?() click to toggle source

Returns whether the associated query is still being executed or not.

# File lib/active_record/promise.rb, line 13
def pending?
  @future_result.pending?
end
then(&block) click to toggle source

Returns a new ActiveRecord::Promise that will apply the passed block when the value is accessed:

Post.async_pick(:title).then { |title| title.upcase }.value
# => "POST TITLE"
# File lib/active_record/promise.rb, line 36
def then(&block)
  Promise.new(@future_result, @block ? @block >> block : block)
end
value() click to toggle source

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.

# File 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

Private Instance Methods

status() click to toggle source
# File lib/active_record/promise.rb, line 53
def status
  if @future_result.pending?
    :pending
  elsif @future_result.canceled?
    :canceled
  else
    :complete
  end
end