summaryrefslogtreecommitdiffhomepage
path: root/mrbgems/mruby-enum-chain/mrblib/chain.rb
diff options
context:
space:
mode:
Diffstat (limited to 'mrbgems/mruby-enum-chain/mrblib/chain.rb')
-rw-r--r--mrbgems/mruby-enum-chain/mrblib/chain.rb19
1 files changed, 12 insertions, 7 deletions
diff --git a/mrbgems/mruby-enum-chain/mrblib/chain.rb b/mrbgems/mruby-enum-chain/mrblib/chain.rb
index 55474eb92..43d0926c8 100644
--- a/mrbgems/mruby-enum-chain/mrblib/chain.rb
+++ b/mrbgems/mruby-enum-chain/mrblib/chain.rb
@@ -17,13 +17,19 @@ class Enumerator
include Enumerable
def initialize(*args)
- @enums = args
+ @enums = args.freeze
+ @pos = -1
end
def each(&block)
- return to_enum unless block_given?
+ return to_enum unless block
- @enums.each { |e| e.each(&block) }
+ i = 0
+ while i < @enums.size
+ @pos = i
+ @enums[i].each(&block)
+ i += 1
+ end
self
end
@@ -36,11 +42,10 @@ class Enumerator
end
def rewind
- i = @enums.size - 1
- while 0 <= i
- e = @enums[i]
+ while 0 <= @pos && @pos < @enums.size
+ e = @enums[@pos]
e.rewind if e.respond_to?(:rewind)
- i -= 1
+ @pos -= 1
end
self