[flori/json] Fix JSON.dump overload combination
https://github.com/flori/json/commit/41c2712a3b
This commit is contained in:
parent
e6b35e8a6d
commit
70740deea7
@ -612,16 +612,13 @@ module JSON
|
||||
# Output:
|
||||
# {"foo":[0,1],"bar":{"baz":2,"bat":3},"bam":"bad"}
|
||||
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)
|
||||
if kwargs.nil? and anIO.is_a?(Hash)
|
||||
kwargs = anIO
|
||||
else
|
||||
limit = anIO
|
||||
end
|
||||
anIO = nil
|
||||
end
|
||||
io_limit_opt = [anIO, limit, kwargs].compact
|
||||
kwargs = io_limit_opt.pop if io_limit_opt.last.is_a?(Hash)
|
||||
anIO, limit = io_limit_opt
|
||||
if anIO.respond_to?(:to_io)
|
||||
anIO = anIO.to_io
|
||||
elsif limit.nil? && !anIO.respond_to?(:write)
|
||||
anIO, limit = nil, anIO
|
||||
end
|
||||
opts = JSON.dump_default_options
|
||||
opts = opts.merge(:max_nesting => limit) if limit
|
||||
@ -642,12 +639,14 @@ module JSON
|
||||
string.encode(to, from)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def merge_dump_options(opts, strict: NOT_SET)
|
||||
opts = opts.merge(strict: strict) if NOT_SET != strict
|
||||
opts
|
||||
end
|
||||
|
||||
class << self
|
||||
private :merge_dump_options
|
||||
end
|
||||
end
|
||||
|
||||
module ::Kernel
|
||||
|
@ -99,18 +99,26 @@ class JSONCommonInterfaceTest < Test::Unit::TestCase
|
||||
|
||||
def test_dump
|
||||
too_deep = '[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]'
|
||||
assert_equal too_deep, dump(eval(too_deep))
|
||||
assert_kind_of String, Marshal.dump(eval(too_deep))
|
||||
assert_raise(ArgumentError) { dump(eval(too_deep), 100) }
|
||||
assert_raise(ArgumentError) { Marshal.dump(eval(too_deep), 100) }
|
||||
assert_equal too_deep, dump(eval(too_deep), 101)
|
||||
assert_kind_of String, Marshal.dump(eval(too_deep), 101)
|
||||
output = StringIO.new
|
||||
dump(eval(too_deep), output)
|
||||
assert_equal too_deep, output.string
|
||||
output = StringIO.new
|
||||
dump(eval(too_deep), output, 101)
|
||||
assert_equal too_deep, output.string
|
||||
obj = eval(too_deep)
|
||||
assert_equal too_deep, dump(obj)
|
||||
assert_kind_of String, Marshal.dump(obj)
|
||||
assert_raise(ArgumentError) { dump(obj, 100) }
|
||||
assert_raise(ArgumentError) { Marshal.dump(obj, 100) }
|
||||
assert_equal too_deep, dump(obj, 101)
|
||||
assert_kind_of String, Marshal.dump(obj, 101)
|
||||
|
||||
assert_equal too_deep, JSON.dump(obj, StringIO.new, 101, strict: false).string
|
||||
assert_equal too_deep, dump(obj, StringIO.new, 101, strict: false).string
|
||||
assert_raise(JSON::GeneratorError) { JSON.dump(Object.new, StringIO.new, 101, strict: true).string }
|
||||
assert_raise(JSON::GeneratorError) { dump(Object.new, StringIO.new, 101, strict: true).string }
|
||||
|
||||
assert_equal too_deep, dump(obj, nil, nil, strict: false)
|
||||
assert_equal too_deep, dump(obj, nil, 101, strict: false)
|
||||
assert_equal too_deep, dump(obj, StringIO.new, nil, strict: false).string
|
||||
assert_equal too_deep, dump(obj, nil, strict: false)
|
||||
assert_equal too_deep, dump(obj, 101, strict: false)
|
||||
assert_equal too_deep, dump(obj, StringIO.new, strict: false).string
|
||||
assert_equal too_deep, dump(obj, strict: false)
|
||||
end
|
||||
|
||||
def test_dump_should_modify_defaults
|
||||
|
Loading…
x
Reference in New Issue
Block a user