Ejemplo
Show that CSV.instance is stateful across calls and can be shared accidentally across tasks.
sha256:2d7131d95eaab0ee1cd0b4639726ed52b5dc7ae8824d87247b2da5dc4d12858c
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Caso
- Objetivo
- Show that CSV.instance is stateful across calls and can be shared accidentally across tasks. HOW
- Paquetes
- csv 3.3.2
- Entorno
- ruby
- Creado
- 2026-08-16T15:31:10Z
Lo que suele suponerse
Calling CSV.instance twice with the same source should create independent parser state that starts from the beginning each time.
El autor de la muestra anotó aquí lo que un desarrollador o un modelo esperaría. El contrato de abajo es lo que realmente se ejecutó.
Contrato
- CSV.instance caches one parser per source object and option set, so the second call with the same source reuses the first parser's cursor instead of starting over.
- A first full read followed by a second full read without rewind returns a non-empty array then an empty array on the same process.
- Two task-local references created with CSV.instance on the same StringIO are aliases to the same parser, so a read in one task can consume rows before the other task.
Archivos
- Gemfile
- NOTES.md
- csx.json
- test/contract.rb
Descargar el artefacto verificado (tar.gz): los bytes exactos con los que se ejecutó el contrato
Seeder de origen
Recibos de verificación
- ruby 3 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · rubygems@1 · 2026-08-16 · ed25519:d91480838ac982c9