diff options
author | Jean Boussier <jean.boussier@gmail.com> | 2023-12-01 11:46:16 +0100 |
---|---|---|
committer | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2023-12-05 12:04:07 +0900 |
commit | a22ed8943859963c67533bb0edc13a27bfdac00c (patch) | |
tree | e4decf646df2fad4c5736f5a45479b691984b6e7 | |
parent | 5a2d70ef73d4d17f5999f5087499a5eda1126567 (diff) | |
download | ruby-a22ed8943859963c67533bb0edc13a27bfdac00c.tar.gz |
[flori/json] JSON.dump: handle unenclosed hashes regression
Fix: https://github.com/flori/json/issues/553
We can never add keyword arguments to `dump` otherwise
existing code using unenclosed hash will break.
https://github.com/flori/json/commit/8e0076a3f2
-rw-r--r-- | ext/json/lib/json/common.rb | 10 | ||||
-rwxr-xr-x | test/json/json_generator_test.rb | 4 |
2 files changed, 12 insertions, 2 deletions
diff --git a/ext/json/lib/json/common.rb b/ext/json/lib/json/common.rb index 53b66a9bf6..f51f02d4df 100644 --- a/ext/json/lib/json/common.rb +++ b/ext/json/lib/json/common.rb @@ -611,7 +611,7 @@ module JSON # puts File.read(path) # Output: # {"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"} - def dump(obj, anIO = nil, limit = nil, strict: NOT_SET) + def dump(obj, anIO = nil, limit = nil, kwargs = nil) if anIO and limit.nil? anIO = anIO.to_io if anIO.respond_to?(:to_io) unless anIO.respond_to?(:write) @@ -621,7 +621,7 @@ module JSON end opts = JSON.dump_default_options opts = opts.merge(:max_nesting => limit) if limit - opts[:strict] = strict if NOT_SET != strict + merge_dump_options(opts, **kwargs) if kwargs result = generate(obj, opts) if anIO anIO.write result @@ -637,6 +637,12 @@ module JSON def self.iconv(to, from, string) string.encode(to, from) end + + private + + def merge_dump_options(opts, strict: NOT_SET) + opts[:strict] = strict if NOT_SET != strict + end end module ::Kernel diff --git a/test/json/json_generator_test.rb b/test/json/json_generator_test.rb index 46cbf9c7f7..0ce5142327 100755 --- a/test/json/json_generator_test.rb +++ b/test/json/json_generator_test.rb @@ -62,6 +62,10 @@ EOT assert_equal '666', generate(666) end + def test_dump_unenclosed_hash + assert_equal '{"a":1,"b":2}', dump(a: 1, b: 2) + end + def test_generate_pretty json = pretty_generate({}) assert_equal(<<'EOT'.chomp, json) |