class Core::Async::Enumerator

Public Class Methods

new(object) click to toggle source
# File lib/core/async/enumerator.rb, line 14
def initialize(object)
  unless object.respond_to?(:each)
    raise ArgumentError, "object is not enumerable"
  end

  @object = object
end

Public Instance Methods

each() { |value| ... } click to toggle source
public

Yields each value within its own async context, waiting on the enumeration to complete.

# File lib/core/async/enumerator.rb, line 24
def each
  unless block_given?
    return to_enum(:each)
  end

  await do
    errored, stopped = false

    @object.each do |value|
      break if errored || stopped

      async do
        yield value
      rescue LocalJumpError
        stopped = true
      rescue => error
        errored = true
        raise error
      end
    end
  end
end