class EnumArgs::Enumerator

Attributes

args[R]
fiber[RW]
method_name[R]
object[R]
using[R]

Public Class Methods

new(object, method_name, *fixed_args, using: {}) click to toggle source

Currently unused setter

def using=(using)

@using = using
self.args = args
@using

end

# File lib/enum_args/enumerator.rb, line 23
def initialize(object, method_name, *fixed_args, using: {})
  @object = object
  @method_name = method_name
  @using = using # don't use self.using=() here, since we can't call it yet
  self.args = fixed_args
  rewind
end

Public Instance Methods

args=(args) click to toggle source
# File lib/enum_args/enumerator.rb, line 9
def args=(args)
  @args = args
  @args << using unless using.empty?
  @args
end
each() { |next| ... } click to toggle source
# File lib/enum_args/enumerator.rb, line 31
def each
  return enum_for(:each) unless block_given?
  # loop does actually get broken by StopIteration
  loop do
    yield self.next
  end
  object
end
next() click to toggle source
# File lib/enum_args/enumerator.rb, line 52
def next
  rewind unless fiber.alive?
  fiber.resume
end
rewind() click to toggle source
# File lib/enum_args/enumerator.rb, line 40
def rewind
  self.fiber = Fiber.new do
    object.send method_name, *args do |*yielded_values|
      # :nocov:
      Fiber.yield(*yielded_values)
      # :nocov:
    end
    raise StopIteration
  end
  self
end