class GxG::Enumerator
Public Class Methods
new(object=nil,method=:each,*args, &block)
click to toggle source
this is a bit inefficient, but it gets the job done. It is essentially an each wrapper to do a cooperative pauses for non-blocking goodness. :) TODO: inspiration: what about just leveraging 'super' after a pause operation on all overrides. (thx)
# File lib/gxg/gxg_elements.rb, line 282 def initialize(object=nil,method=:each,*args, &block) # Without the call to super() it works, but will be uninitialized # super(object,method,*args) @collection = object.stock_to_enum(method,*args, &block) # @collection = ::Enumerator.new(object,method,*args,&block) self end
Public Instance Methods
each(&block)
click to toggle source
# File lib/gxg/gxg_elements.rb, line 290 def each(&block) # reference = {:object => self, :method => __callee__, :fiber => Fiber.current, :thread => Thread.current} if block.respond_to?(:call) if ::GxG::EventManager::manager_running? @collection.each do |*args| block.call(*args) pause end self else @collection.each(&block) self end else self end end
next()
click to toggle source
# File lib/gxg/gxg_elements.rb, line 308 def next() pause @collection.next() end
next_values()
click to toggle source
# File lib/gxg/gxg_elements.rb, line 313 def next_values() pause @collection.next_values() end
peek()
click to toggle source
# File lib/gxg/gxg_elements.rb, line 318 def peek() pause @collection.peek() end
peek_values()
click to toggle source
# File lib/gxg/gxg_elements.rb, line 323 def peek_values() pause @collection.peek_values() end
rewind()
click to toggle source
# File lib/gxg/gxg_elements.rb, line 328 def rewind() if @collection.respond_to?(:rewind) @collection.rewind end self end
with_index(offset=0,&block)
click to toggle source
# File lib/gxg/gxg_elements.rb, line 335 def with_index(offset=0,&block) enumerator = GxG::Enumerator.new(@collection.with_index(offset)) if block.respond_to?(:call) enumerator.each do |entry,index| block.call(entry,index) end else enumerator end end
Also aliased as: each_with_index
with_object(an_object=nil,&block)
click to toggle source
# File lib/gxg/gxg_elements.rb, line 347 def with_object(an_object=nil,&block) enumerator = GxG::Enumerator.new(@collection.with_object(an_object)) if block.respond_to?(:call) enumerator.each do |entry,the_object| block.call(entry,the_object) end an_object else enumerator end end