class ConcurrentRails::Multi

Attributes

actions[R]
exceptions[R]
executor[R]
futures[R]

Public Class Methods

enqueue(*actions, executor: :io) click to toggle source
# File lib/concurrent_rails/multi.rb, line 5
def self.enqueue(*actions, executor: :io)
  raise ArgumentError, '#enqueue accepts `Proc`s only' unless actions.all?(Proc)

  new(actions, executor).enqueue
end
new(actions, executor) click to toggle source
# File lib/concurrent_rails/multi.rb, line 11
def initialize(actions, executor)
  @actions    = actions
  @executor   = executor
  @exceptions = Concurrent::Array.new
end

Public Instance Methods

complete?() click to toggle source
# File lib/concurrent_rails/multi.rb, line 35
def complete?
  futures.all?(&:complete?)
end
compute() click to toggle source
# File lib/concurrent_rails/multi.rb, line 27
def compute
  futures.map(&:value)
end
compute!() click to toggle source
# File lib/concurrent_rails/multi.rb, line 31
def compute!
  futures.map(&:value!)
end
enqueue() click to toggle source
# File lib/concurrent_rails/multi.rb, line 17
def enqueue
  @futures = actions.map do |action|
    f = ConcurrentRails::Future.new(executor: executor, &action)
    f.add_observer(self)
    f.execute
  end

  self
end
errors() click to toggle source
# File lib/concurrent_rails/multi.rb, line 39
def errors
  @exceptions
end

Private Instance Methods

update(_time, _value, reason) click to toggle source
# File lib/concurrent_rails/multi.rb, line 45
def update(_time, _value, reason)
  @exceptions << reason if reason
end