From 8433571dcfae8587fd2ef6ed7d47ff46a8298ccf Mon Sep 17 00:00:00 2001 From: Cody Horton Date: Fri, 16 May 2025 09:58:27 -0500 Subject: [PATCH] fix for pretty_generate throwing wrong number of arguments error --- CHANGES.md | 2 ++ lib/json/common.rb | 2 +- test/json/json_generator_test.rb | 16 ++++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 4f91abd4..9fb7627e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,8 @@ ### Unreleased +* Fix for JSON.pretty_generate to use passed state object's generate instead of state class as the required parameters aren't available. + ### 2025-05-12 (2.12.0) * Improve floating point generation to not use scientific notation as much. diff --git a/lib/json/common.rb b/lib/json/common.rb index 7627761b..320df2a9 100644 --- a/lib/json/common.rb +++ b/lib/json/common.rb @@ -490,7 +490,7 @@ def fast_generate(obj, opts = nil) # } # def pretty_generate(obj, opts = nil) - return state.generate(obj) if State === opts + return opts.generate(obj) if State === opts options = PRETTY_GENERATE_OPTIONS diff --git a/test/json/json_generator_test.rb b/test/json/json_generator_test.rb index 55a3065a..f869e43f 100755 --- a/test/json/json_generator_test.rb +++ b/test/json/json_generator_test.rb @@ -122,6 +122,22 @@ def test_generate_pretty assert_equal '666', pretty_generate(666) end + def test_generate_pretty_custom + state = State.new(:space_before => "", :space => "", :indent => "", :object_nl => "\n\n", :array_nl => "") + json = pretty_generate({1=>{}, 2=>['a','b'], 3=>4}, state) + assert_equal(<<~'JSON'.chomp, json) + { + + "1":{}, + + "2":["a","b"], + + "3":4 + + } + JSON + end + def test_generate_custom state = State.new(:space_before => " ", :space => " ", :indent => "", :object_nl => "\n", :array_nl => "") json = generate({1=>{2=>3,4=>[5,6]}}, state)