def collect_with_number(number, key, &block) opts = {} opts[key] = MAX_NUM_RESULTS statuses = collect_with_max_id do |max_id| opts[:max_id] = max_id unless max_id.nil? opts[key] = number unless number >= MAX_NUM_RESULTS if number > 0 # Instead of this: # number -= MAX_NUM_RESULTS statuses = retryable(:tries => 3, :on => Twitter::Error::ServerError, :sleep => 0) do yield opts end # Do this: number -= statuses.length statuses end end.flatten.compact end