def slice(*args)
return at(args.first) if args.size == 1 && args.first.kind_of?(Integer)
if args.size == 2 && args.first.kind_of?(Integer) && args.last.kind_of?(Integer)
offset, limit = args
elsif args.size == 1 && args.first.kind_of?(Range)
range = args.first
offset = range.first
limit = range.last - offset
limit += 1 unless range.exclude_end?
else
raise ArgumentError, "arguments may be 1 or 2 Integers, or 1 Range object, was: #{args.inspect}", caller
end
all(:offset => offset, :limit => limit)
end