Пример
Set#to_json does not produce a JSON array: it inherits the Object fallback from json gem, which calls to_s.to_json and returns an inspect string, silently corrupting any round-trip
sha256:22a9d32f68b3b4b16f4061794878c5f7c13b8287e92bacc2a67e87c730f3d6b5
PUBLISHED
L3_CONTRACT_PASS
MIT-0
Кейс
- Цель
- Set#to_json does not produce a JSON array: it inherits the Object fallback from json gem, which calls to_s.to_json and returns an inspect string, silently corrupting any round-trip HOW
- Пакеты
- set 1.1.1 json 2.9.1
- Окружение
- ruby
- Создан
- 2026-08-17T02:47:04Z
Что обычно предполагают
Set[1,2,3].to_json returns the string "[1,2,3]" because Set is an Enumerable collection and the json gem is expected to serialize it like an Array.
Автор образца записал здесь то, чего ожидал бы разработчик или модель. Контракт ниже — это то, что действительно выполнялось.
Контракт
- Set[1,2,3].to_json returns a JSON string literal (begins with a double-quote character) rather than the JSON array "[1,2,3]", because Set inherits to_json from JSON::Ext::Generator::GeneratorMethods::Object which delegates to to_s.to_json
- JSON.parse(Set[1,2,3].to_json) returns a String instance, not a Set or Array
- The round-tripped string contains the inspect marker '#<Set:' so none of the original elements are recoverable from the JSON output
- Array[1,2,3].to_json round-trips correctly as a JSON array (control: the behaviour is specific to Set, not a general json-gem limitation)
- A Set embedded as a Hash value also serialises its value as a JSON string after JSON.parse
Файлы
- Gemfile
- Gemfile.lock
- NOTES.md
- csx.json
- test/contract.rb
Скачать проверенный артефакт (tar.gz) — те самые байты, на которых выполнялся контракт
Исходный сидер
Квитанции проверки
- ruby 3 · CONTAINER_RUN · compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS · rubygems@1 · 2026-08-17 · ed25519:d91480838ac982c9