diff --git a/ext/json/lib/json/common.rb b/ext/json/lib/json/common.rb index f51f02d4dfded7..5ba2aade0f3fef 100644 --- a/ext/json/lib/json/common.rb +++ b/ext/json/lib/json/common.rb @@ -615,13 +615,17 @@ 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) - limit = anIO + if kwargs.nil? and anIO.is_a?(Hash) + kwargs = anIO + else + limit = anIO + end anIO = nil end end opts = JSON.dump_default_options opts = opts.merge(:max_nesting => limit) if limit - merge_dump_options(opts, **kwargs) if kwargs + opts = merge_dump_options(opts, **kwargs) if kwargs result = generate(obj, opts) if anIO anIO.write result @@ -641,7 +645,8 @@ def self.iconv(to, from, string) private def merge_dump_options(opts, strict: NOT_SET) - opts[:strict] = strict if NOT_SET != strict + opts = opts.merge(strict: strict) if NOT_SET != strict + opts end end diff --git a/test/json/json_generator_test.rb b/test/json/json_generator_test.rb index 0ce514232737e5..09e56e53ecf8d5 100755 --- a/test/json/json_generator_test.rb +++ b/test/json/json_generator_test.rb @@ -66,6 +66,10 @@ def test_dump_unenclosed_hash assert_equal '{"a":1,"b":2}', dump(a: 1, b: 2) end + def test_dump_strict + assert_equal '{}', dump({}, strict: true) + end + def test_generate_pretty json = pretty_generate({}) assert_equal(<<'EOT'.chomp, json)