独自クラスやモンキーパッチを用意するほどでもない規模の処理向けです。
ループにおいて、繰り返し回数より小さいサイズのArrayからデータを抜きだすけど、Arrayの終端に達したら先頭からやり直したい時程度の規模で使えそうです。
追記:
素敵な回答をコメント頂いたのでそちらもご参照ください。
ary = [1,2,3,4]
enumerator = ary.to_enum
10.times do |i|
begin
puts enumerator.next
rescue StopIteration
# ary末尾に到達したので先頭に戻して同じ処理
enumerator.rewind
puts enumerator.next
end
end
出力
1
2
3
4
1
2
3
4
1
2