class ConcurrentRails::Promises

Attributes

executor[R]
instance[R]

Public Class Methods

new(executor) click to toggle source
# File lib/concurrent_rails/promises.rb, line 12
def initialize(executor)
  @executor = executor
end

Public Instance Methods

touch() click to toggle source
# File lib/concurrent_rails/promises.rb, line 35
def touch
  @instance = rails_wrapped { instance.touch }

  self
end
wait(timeout = nil) click to toggle source
# File lib/concurrent_rails/promises.rb, line 41
def wait(timeout = nil)
  result = permit_concurrent_loads { instance.__send__(:wait_until_resolved, timeout) }

  timeout ? result : self
end

Private Instance Methods

permit_concurrent_loads(&block) click to toggle source
# File lib/concurrent_rails/promises.rb, line 75
def permit_concurrent_loads(&block)
  rails_wrapped do
    ActiveSupport::Dependencies.interlock.permit_concurrent_loads(&block)
  end
end
rails_wrapped(&block) click to toggle source
# File lib/concurrent_rails/promises.rb, line 71
def rails_wrapped(&block)
  Rails.application.executor.wrap(&block)
end