# 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