Skip to content

Commit

Permalink
Wrote code so tests pass
Browse files Browse the repository at this point in the history
  • Loading branch information
hawx committed Jul 19, 2011
1 parent e0dfbf9 commit dbdcbaf
Showing 1 changed file with 71 additions and 0 deletions.
71 changes: 71 additions & 0 deletions lib/seq.rb
@@ -1,3 +1,74 @@
class Seq

Infinity = 1.0/0

# Creates a new instance of Seq.
#
# @param list [Array]
# List of values to cycle over
# @param items [Integer]
# Number of values to return
# @param offset [Integer]
# Index of item in +list+ to start at
# @param default [Object]
# Value to return when finished cycling
#
def initialize(list=[], items=Infinity, offset=0, default=nil)
@list = list
@items = items
@offset = offset
@default = default

self.reset
end

def reset
@cycles = 0
@index = @offset
end

def next
if ended?
@default
else
@list[@index].tap { inc }
end
end

def inc
@index += 1
@cycles += 1
@index = 0 if @index == @list.size
end

def each
until ended?
yield self.next
end
end

include Enumerable

def to_a(expanded=false)
if expanded
raise RangeError if infinite?

i, c = @index, @cycles
r = self.entries
@index, @cycles = i, c

r
else
@list
end
end

def infinite?
@items == Infinity
end

def ended?
@cycles >= @items
end

end

0 comments on commit dbdcbaf

Please sign in to comment.