# File lib/big_record/base.rb, line 251 def scan(options={}, &code) options = options.dup limit = options.delete(:batch_size) || 100 items_processed = 0 # add an extra record for defining the next offset without duplicating records limit += 1 last_row_id = nil while true items = find(:all, options.merge({:limit => limit})) # set the new offset as the extra record unless items.empty? items.delete_at(0) if items[0].id == last_row_id break if items.empty? last_row_id = items.last.id options[:offset] = last_row_id items_processed += items.size items.each do |item| code.call(item) end else break end end end