oj 3.13.9 → 3.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +101 -0
- data/README.md +13 -2
- data/ext/oj/buf.h +11 -6
- data/ext/oj/cache.c +25 -24
- data/ext/oj/cache8.c +10 -9
- data/ext/oj/circarray.c +8 -6
- data/ext/oj/circarray.h +2 -2
- data/ext/oj/code.c +19 -33
- data/ext/oj/code.h +2 -2
- data/ext/oj/compat.c +20 -60
- data/ext/oj/custom.c +76 -155
- data/ext/oj/debug.c +3 -9
- data/ext/oj/dump.c +203 -213
- data/ext/oj/dump.h +26 -12
- data/ext/oj/dump_compat.c +565 -642
- data/ext/oj/dump_leaf.c +17 -63
- data/ext/oj/dump_object.c +59 -181
- data/ext/oj/dump_strict.c +24 -48
- data/ext/oj/encoder.c +43 -0
- data/ext/oj/err.c +2 -13
- data/ext/oj/err.h +9 -12
- data/ext/oj/extconf.rb +18 -7
- data/ext/oj/fast.c +83 -108
- data/ext/oj/intern.c +52 -50
- data/ext/oj/intern.h +4 -8
- data/ext/oj/mem.c +318 -0
- data/ext/oj/mem.h +53 -0
- data/ext/oj/mimic_json.c +104 -81
- data/ext/oj/object.c +50 -67
- data/ext/oj/odd.c +89 -67
- data/ext/oj/odd.h +15 -15
- data/ext/oj/oj.c +171 -106
- data/ext/oj/oj.h +96 -74
- data/ext/oj/parse.c +169 -189
- data/ext/oj/parse.h +23 -24
- data/ext/oj/parser.c +89 -34
- data/ext/oj/parser.h +20 -9
- data/ext/oj/rails.c +86 -151
- data/ext/oj/rails.h +1 -1
- data/ext/oj/reader.c +12 -15
- data/ext/oj/reader.h +4 -2
- data/ext/oj/resolve.c +3 -4
- data/ext/oj/rxclass.c +6 -5
- data/ext/oj/rxclass.h +1 -1
- data/ext/oj/saj.c +21 -32
- data/ext/oj/saj2.c +329 -93
- data/ext/oj/saj2.h +23 -0
- data/ext/oj/scp.c +3 -14
- data/ext/oj/sparse.c +26 -70
- data/ext/oj/stream_writer.c +12 -22
- data/ext/oj/strict.c +20 -52
- data/ext/oj/string_writer.c +21 -22
- data/ext/oj/trace.h +31 -4
- data/ext/oj/usual.c +105 -150
- data/ext/oj/usual.h +68 -0
- data/ext/oj/util.h +1 -1
- data/ext/oj/val_stack.c +1 -1
- data/ext/oj/val_stack.h +8 -7
- data/ext/oj/validate.c +21 -26
- data/ext/oj/wab.c +32 -69
- data/lib/oj/active_support_helper.rb +1 -3
- data/lib/oj/bag.rb +7 -1
- data/lib/oj/easy_hash.rb +4 -5
- data/lib/oj/error.rb +0 -1
- data/lib/oj/json.rb +162 -150
- data/lib/oj/mimic.rb +6 -2
- data/lib/oj/saj.rb +20 -6
- data/lib/oj/state.rb +9 -6
- data/lib/oj/version.rb +1 -2
- data/lib/oj.rb +2 -0
- data/pages/Compatibility.md +1 -1
- data/pages/InstallOptions.md +20 -0
- data/pages/JsonGem.md +15 -0
- data/pages/Modes.md +6 -3
- data/pages/Options.md +10 -0
- data/pages/Rails.md +12 -0
- data/test/_test_active.rb +8 -9
- data/test/_test_active_mimic.rb +7 -8
- data/test/_test_mimic_rails.rb +17 -20
- data/test/activerecord/result_test.rb +5 -6
- data/test/{activesupport5 → activesupport7}/abstract_unit.rb +16 -12
- data/test/{activesupport5 → activesupport7}/decoding_test.rb +2 -10
- data/test/{activesupport5 → activesupport7}/encoding_test.rb +20 -34
- data/test/{activesupport5 → activesupport7}/encoding_test_cases.rb +6 -0
- data/test/{activesupport5 → activesupport7}/time_zone_test_helpers.rb +8 -0
- data/test/files.rb +15 -15
- data/test/foo.rb +15 -15
- data/test/helper.rb +11 -8
- data/test/isolated/shared.rb +3 -2
- data/test/json_gem/json_addition_test.rb +2 -2
- data/test/json_gem/json_common_interface_test.rb +8 -6
- data/test/json_gem/json_encoding_test.rb +0 -0
- data/test/json_gem/json_ext_parser_test.rb +1 -0
- data/test/json_gem/json_fixtures_test.rb +3 -2
- data/test/json_gem/json_generator_test.rb +49 -37
- data/test/json_gem/json_generic_object_test.rb +11 -11
- data/test/json_gem/json_parser_test.rb +54 -47
- data/test/json_gem/json_string_matching_test.rb +9 -9
- data/test/json_gem/test_helper.rb +7 -3
- data/test/mem.rb +13 -12
- data/test/perf.rb +21 -26
- data/test/perf_compat.rb +31 -33
- data/test/perf_dump.rb +50 -0
- data/test/perf_fast.rb +80 -82
- data/test/perf_file.rb +27 -29
- data/test/perf_object.rb +65 -69
- data/test/perf_once.rb +12 -11
- data/test/perf_parser.rb +42 -48
- data/test/perf_saj.rb +46 -54
- data/test/perf_scp.rb +57 -69
- data/test/perf_simple.rb +41 -39
- data/test/perf_strict.rb +68 -70
- data/test/perf_wab.rb +67 -69
- data/test/prec.rb +3 -3
- data/test/sample/change.rb +0 -1
- data/test/sample/dir.rb +0 -1
- data/test/sample/doc.rb +0 -1
- data/test/sample/file.rb +0 -1
- data/test/sample/group.rb +0 -1
- data/test/sample/hasprops.rb +0 -1
- data/test/sample/layer.rb +0 -1
- data/test/sample/rect.rb +0 -1
- data/test/sample/shape.rb +0 -1
- data/test/sample/text.rb +0 -1
- data/test/sample.rb +16 -16
- data/test/sample_json.rb +8 -8
- data/test/test_compat.rb +95 -43
- data/test/test_custom.rb +72 -51
- data/test/test_debian.rb +7 -10
- data/test/test_fast.rb +102 -87
- data/test/test_file.rb +41 -30
- data/test/test_gc.rb +16 -5
- data/test/test_generate.rb +5 -5
- data/test/test_hash.rb +4 -4
- data/test/test_integer_range.rb +9 -9
- data/test/test_null.rb +20 -20
- data/test/test_object.rb +85 -96
- data/test/test_parser.rb +6 -22
- data/test/test_parser_debug.rb +27 -0
- data/test/test_parser_saj.rb +115 -23
- data/test/test_parser_usual.rb +6 -6
- data/test/test_rails.rb +2 -2
- data/test/test_saj.rb +10 -8
- data/test/test_scp.rb +37 -39
- data/test/test_strict.rb +40 -32
- data/test/test_various.rb +163 -84
- data/test/test_wab.rb +48 -44
- data/test/test_writer.rb +47 -47
- data/test/tests.rb +13 -5
- data/test/tests_mimic.rb +12 -3
- data/test/tests_mimic_addition.rb +12 -3
- metadata +34 -144
- data/test/activesupport4/decoding_test.rb +0 -108
- data/test/activesupport4/encoding_test.rb +0 -531
- data/test/activesupport4/test_helper.rb +0 -41
- data/test/activesupport5/test_helper.rb +0 -72
- data/test/bar.rb +0 -16
- data/test/baz.rb +0 -16
- data/test/bug.rb +0 -16
- data/test/zoo.rb +0 -13
data/test/test_custom.rb
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
#
|
2
|
+
# frozen_string_literal: true
|
3
3
|
|
4
|
-
|
5
|
-
|
4
|
+
$LOAD_PATH << __dir__
|
5
|
+
@oj_dir = File.dirname(File.expand_path(__dir__))
|
6
6
|
%w(lib ext).each do |dir|
|
7
|
-
|
7
|
+
$LOAD_PATH << File.join(@oj_dir, dir)
|
8
8
|
end
|
9
9
|
|
10
10
|
require 'minitest'
|
@@ -27,19 +27,24 @@ class CustomJuice < Minitest::Test
|
|
27
27
|
@y = y
|
28
28
|
@_z = x.to_s
|
29
29
|
end
|
30
|
+
|
30
31
|
def ==(o)
|
31
32
|
self.class == o.class && @x == o.x && @y = o.y
|
32
33
|
end
|
33
|
-
|
34
|
+
|
35
|
+
def to_json(*_args)
|
34
36
|
%|{"xx":#{@x},"yy":#{y}}|
|
35
37
|
end
|
36
|
-
|
38
|
+
|
39
|
+
def raw_json(_depth, _indent)
|
37
40
|
%|{"xxx":#{@x},"yyy":#{y}}|
|
38
41
|
end
|
39
|
-
|
42
|
+
|
43
|
+
def as_json(*_args)
|
40
44
|
{'a' => @x, :b => @y }
|
41
45
|
end
|
42
|
-
|
46
|
+
|
47
|
+
def to_hash
|
43
48
|
{'b' => @x, 'n' => @y }
|
44
49
|
end
|
45
50
|
end
|
@@ -51,10 +56,12 @@ class CustomJuice < Minitest::Test
|
|
51
56
|
@x = x
|
52
57
|
@y = y
|
53
58
|
end
|
59
|
+
|
54
60
|
def ==(o)
|
55
61
|
self.class == o.class && @x == o.x && @y = o.y
|
56
62
|
end
|
57
|
-
|
63
|
+
|
64
|
+
def as_json(*_args)
|
58
65
|
{'a' => @x, :b => @y }
|
59
66
|
end
|
60
67
|
end
|
@@ -66,10 +73,12 @@ class CustomJuice < Minitest::Test
|
|
66
73
|
@x = x
|
67
74
|
@y = y
|
68
75
|
end
|
76
|
+
|
69
77
|
def ==(o)
|
70
78
|
self.class == o.class && @x == o.x && @y = o.y
|
71
79
|
end
|
72
|
-
|
80
|
+
|
81
|
+
def as_json(*_args)
|
73
82
|
a = @x
|
74
83
|
a = a.as_json if a.respond_to?('as_json')
|
75
84
|
b = @y
|
@@ -101,16 +110,16 @@ class CustomJuice < Minitest::Test
|
|
101
110
|
|
102
111
|
def test_fixnum
|
103
112
|
dump_and_load(0, false)
|
104
|
-
dump_and_load(
|
105
|
-
dump_and_load(-
|
113
|
+
dump_and_load(12_345, false)
|
114
|
+
dump_and_load(-54_321, false)
|
106
115
|
dump_and_load(1, false)
|
107
116
|
end
|
108
117
|
|
109
118
|
def test_float
|
110
119
|
dump_and_load(0.0, false)
|
111
|
-
dump_and_load(
|
120
|
+
dump_and_load(12_345.6789, false)
|
112
121
|
dump_and_load(70.35, false)
|
113
|
-
dump_and_load(-
|
122
|
+
dump_and_load(-54_321.012, false)
|
114
123
|
dump_and_load(1.7775, false)
|
115
124
|
dump_and_load(2.5024, false)
|
116
125
|
dump_and_load(2.48e16, false)
|
@@ -119,12 +128,12 @@ class CustomJuice < Minitest::Test
|
|
119
128
|
end
|
120
129
|
|
121
130
|
def test_float_parse
|
122
|
-
f = Oj.load(
|
131
|
+
f = Oj.load('12.123456789012345678', mode: :custom, bigdecimal_load: :float)
|
123
132
|
assert_equal(Float, f.class)
|
124
133
|
end
|
125
134
|
|
126
135
|
def test_float_parse_fast
|
127
|
-
f = Oj.load(
|
136
|
+
f = Oj.load('12.123456789012345678', mode: :custom, bigdecimal_load: :fast)
|
128
137
|
assert_equal(Float, f.class)
|
129
138
|
assert(12.12345678901234 <= f && f < 12.12345678901236)
|
130
139
|
end
|
@@ -139,7 +148,7 @@ class CustomJuice < Minitest::Test
|
|
139
148
|
assert(true)
|
140
149
|
return
|
141
150
|
end
|
142
|
-
assert(false,
|
151
|
+
assert(false, '*** expected an exception')
|
143
152
|
end
|
144
153
|
|
145
154
|
def test_infinity_dump
|
@@ -152,7 +161,7 @@ class CustomJuice < Minitest::Test
|
|
152
161
|
assert(true)
|
153
162
|
return
|
154
163
|
end
|
155
|
-
assert(false,
|
164
|
+
assert(false, '*** expected an exception')
|
156
165
|
end
|
157
166
|
|
158
167
|
def test_neg_infinity_dump
|
@@ -165,7 +174,7 @@ class CustomJuice < Minitest::Test
|
|
165
174
|
assert(true)
|
166
175
|
return
|
167
176
|
end
|
168
|
-
assert(false,
|
177
|
+
assert(false, '*** expected an exception')
|
169
178
|
end
|
170
179
|
|
171
180
|
def test_string
|
@@ -176,15 +185,15 @@ class CustomJuice < Minitest::Test
|
|
176
185
|
end
|
177
186
|
|
178
187
|
def test_string_ascii
|
179
|
-
json = Oj.dump(
|
188
|
+
json = Oj.dump('ぴーたー', :escape_mode => :ascii)
|
180
189
|
assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
|
181
|
-
dump_and_load(
|
190
|
+
dump_and_load('ぴーたー', false, :escape_mode => :ascii)
|
182
191
|
end
|
183
192
|
|
184
193
|
def test_string_json
|
185
|
-
json = Oj.dump(
|
194
|
+
json = Oj.dump('ぴーたー', :escape_mode => :json)
|
186
195
|
assert_equal(%{"ぴーたー"}, json)
|
187
|
-
dump_and_load(
|
196
|
+
dump_and_load('ぴーたー', false, :escape_mode => :json)
|
188
197
|
end
|
189
198
|
|
190
199
|
def test_array
|
@@ -196,15 +205,17 @@ class CustomJuice < Minitest::Test
|
|
196
205
|
end
|
197
206
|
|
198
207
|
def test_array_deep
|
199
|
-
dump_and_load([1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,[15,[16,[17,[18,[19,[20]]]]]]]]]]]]]]]]]]]], false)
|
208
|
+
dump_and_load([1, [2, [3, [4, [5, [6, [7, [8, [9, [10, [11, [12, [13, [14, [15, [16, [17, [18, [19, [20]]]]]]]]]]]]]]]]]]]], false)
|
200
209
|
end
|
201
210
|
|
202
211
|
def test_deep_nest
|
212
|
+
skip 'TruffleRuby causes SEGV' if RUBY_ENGINE == 'truffleruby'
|
213
|
+
|
203
214
|
begin
|
204
|
-
n =
|
205
|
-
Oj.strict_load('[' * n + ']' * n)
|
215
|
+
n = 10_000
|
216
|
+
Oj.strict_load(('[' * n) + (']' * n))
|
206
217
|
rescue Exception => e
|
207
|
-
|
218
|
+
refute(e.message)
|
208
219
|
end
|
209
220
|
end
|
210
221
|
|
@@ -259,11 +270,11 @@ class CustomJuice < Minitest::Test
|
|
259
270
|
|
260
271
|
def test_object
|
261
272
|
obj = Jeez.new(true, 58)
|
262
|
-
json = Oj.dump(obj, create_id:
|
273
|
+
json = Oj.dump(obj, create_id: '^o', use_to_json: false, use_as_json: false, use_to_hash: false)
|
263
274
|
assert_equal(%|{"x":true,"y":58,"_z":"true"}|, json)
|
264
|
-
json = Oj.dump(obj, create_id:
|
275
|
+
json = Oj.dump(obj, create_id: '^o', use_to_json: false, use_as_json: false, use_to_hash: false, ignore_under: true)
|
265
276
|
assert_equal(%|{"x":true,"y":58}|, json)
|
266
|
-
dump_and_load(obj, false, :create_id =>
|
277
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
267
278
|
end
|
268
279
|
|
269
280
|
def test_object_to_json
|
@@ -341,7 +352,6 @@ class CustomJuice < Minitest::Test
|
|
341
352
|
"b":[3]
|
342
353
|
}
|
343
354
|
|, json)
|
344
|
-
|
345
355
|
end
|
346
356
|
|
347
357
|
def test_symbol
|
@@ -392,24 +402,29 @@ class CustomJuice < Minitest::Test
|
|
392
402
|
assert_equal(%|{"x":{"a":1}}|, json)
|
393
403
|
end
|
394
404
|
|
405
|
+
def test_omit_null_byte
|
406
|
+
json = Oj.dump({ "fo\x00o" => "b\x00ar" }, :omit_null_byte => true)
|
407
|
+
assert_equal(%|{"foo":"bar"}|, json)
|
408
|
+
end
|
409
|
+
|
395
410
|
def test_complex
|
396
411
|
obj = Complex(2, 9)
|
397
|
-
dump_and_load(obj, false, :create_id =>
|
412
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
398
413
|
end
|
399
414
|
|
400
415
|
def test_rational
|
401
416
|
obj = Rational(2, 9)
|
402
|
-
dump_and_load(obj, false, :create_id =>
|
417
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
403
418
|
end
|
404
419
|
|
405
420
|
def test_range
|
406
421
|
obj = 3..8
|
407
|
-
dump_and_load(obj, false, :create_id =>
|
422
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
408
423
|
end
|
409
424
|
|
410
425
|
def test_date
|
411
426
|
obj = Date.new(2017, 1, 5)
|
412
|
-
dump_and_load(obj, false, :create_id =>
|
427
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
413
428
|
end
|
414
429
|
|
415
430
|
def test_date_unix
|
@@ -438,7 +453,7 @@ class CustomJuice < Minitest::Test
|
|
438
453
|
|
439
454
|
def test_datetime
|
440
455
|
obj = DateTime.new(2017, 1, 5, 10, 20, 30)
|
441
|
-
dump_and_load(obj, false, :create_id =>
|
456
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
442
457
|
end
|
443
458
|
|
444
459
|
def test_datetime_unix
|
@@ -448,12 +463,9 @@ class CustomJuice < Minitest::Test
|
|
448
463
|
end
|
449
464
|
|
450
465
|
def test_datetime_unix_zone
|
451
|
-
|
452
|
-
|
453
|
-
|
454
|
-
json = Oj.dump(obj, :indent => 2, time_format: :unix_zone)
|
455
|
-
assert_equal('1483629630.000000000e-18000', json)
|
456
|
-
end
|
466
|
+
obj = DateTime.new(2017, 1, 5, 10, 20, 30, '-0500')
|
467
|
+
json = Oj.dump(obj, :indent => 2, time_format: :unix_zone)
|
468
|
+
assert_equal('1483629630.000000000e-18000', json)
|
457
469
|
end
|
458
470
|
|
459
471
|
def test_datetime_ruby
|
@@ -471,20 +483,29 @@ class CustomJuice < Minitest::Test
|
|
471
483
|
def test_regexp
|
472
484
|
# this notation must be used to get an == match later
|
473
485
|
obj = /(?ix-m:^yes$)/
|
474
|
-
dump_and_load(obj, false, :create_id =>
|
486
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
475
487
|
end
|
476
488
|
|
477
489
|
def test_openstruct
|
478
490
|
obj = OpenStruct.new(:a => 1, 'b' => 2)
|
479
|
-
dump_and_load(obj, false, :create_id =>
|
491
|
+
dump_and_load(obj, false, :create_id => '^o', :create_additions => true)
|
480
492
|
end
|
481
493
|
|
482
494
|
def test_time
|
495
|
+
skip 'TruffleRuby fails this spec' if RUBY_ENGINE == 'truffleruby'
|
496
|
+
|
483
497
|
obj = Time.now()
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
498
|
+
# These two forms should be able to recreate the time precisely,
|
499
|
+
# so we check they can load a dumped version and recreate the
|
500
|
+
# original object correctly.
|
501
|
+
dump_and_load(obj, false, :time_format => :unix, :create_id => '^o', :create_additions => true)
|
502
|
+
dump_and_load(obj, false, :time_format => :unix_zone, :create_id => '^o', :create_additions => true)
|
503
|
+
# These two forms will lose precision while dumping as they don't
|
504
|
+
# preserve full precision. We check that a dumped version is equal
|
505
|
+
# to that version loaded and dumped a second time, but don't check
|
506
|
+
# that the loaded Ruby objects is still the same as the original.
|
507
|
+
dump_load_dump(obj, false, :time_format => :xmlschema, :create_id => '^o', :create_additions => true)
|
508
|
+
dump_load_dump(obj, false, :time_format => :ruby, :create_id => '^o', :create_additions => true)
|
488
509
|
end
|
489
510
|
|
490
511
|
def dump_and_load(obj, trace=false, options={})
|
@@ -492,7 +513,7 @@ class CustomJuice < Minitest::Test
|
|
492
513
|
json = Oj.dump(obj, options)
|
493
514
|
puts json if trace
|
494
515
|
|
495
|
-
loaded = Oj.load(json, options)
|
516
|
+
loaded = Oj.load(json, options)
|
496
517
|
if obj.nil?
|
497
518
|
assert_nil(loaded)
|
498
519
|
else
|
@@ -506,7 +527,7 @@ class CustomJuice < Minitest::Test
|
|
506
527
|
json = Oj.dump(obj, options)
|
507
528
|
puts json if trace
|
508
529
|
|
509
|
-
loaded = Oj.load(json, options)
|
530
|
+
loaded = Oj.load(json, options)
|
510
531
|
if obj.nil?
|
511
532
|
assert_nil(loaded)
|
512
533
|
else
|
@@ -520,7 +541,7 @@ class CustomJuice < Minitest::Test
|
|
520
541
|
json = Oj.dump(obj, options)
|
521
542
|
puts json if trace
|
522
543
|
|
523
|
-
loaded = Oj.load(json, options)
|
544
|
+
loaded = Oj.load(json, options)
|
524
545
|
if obj.nil?
|
525
546
|
assert_nil(loaded)
|
526
547
|
else
|
data/test/test_debian.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'helper'
|
4
4
|
|
@@ -16,22 +16,19 @@ class DebJuice < Minitest::Test
|
|
16
16
|
end
|
17
17
|
alias == eql?
|
18
18
|
|
19
|
-
end# Jam
|
19
|
+
end # Jam
|
20
20
|
|
21
21
|
# contributed by sauliusg to fix as_json
|
22
22
|
class Orange < Jam
|
23
|
-
def initialize(x, y)
|
24
|
-
super
|
25
|
-
end
|
26
23
|
|
27
|
-
def as_json
|
24
|
+
def as_json
|
28
25
|
{ :json_class => self.class,
|
29
26
|
:x => @x,
|
30
27
|
:y => @y }
|
31
28
|
end
|
32
29
|
|
33
30
|
def self.json_create(h)
|
34
|
-
|
31
|
+
new(h['x'], h['y'])
|
35
32
|
end
|
36
33
|
end
|
37
34
|
|
@@ -39,13 +36,13 @@ class DebJuice < Minitest::Test
|
|
39
36
|
Oj.default_options = { :mode => :compat, :class_cache => true, :use_as_json => true }
|
40
37
|
obj = Orange.new(true, 58)
|
41
38
|
json = Oj.dump(obj, :indent => 2)
|
42
|
-
|
39
|
+
refute_nil(json)
|
43
40
|
dump_and_load(obj, true)
|
44
41
|
end
|
45
42
|
|
46
|
-
def dump_and_load(obj,
|
43
|
+
def dump_and_load(obj, _trace=false)
|
47
44
|
json = Oj.dump(obj, :indent => 2)
|
48
|
-
loaded = Oj.load(json)
|
45
|
+
loaded = Oj.load(json)
|
49
46
|
assert_equal(obj, loaded)
|
50
47
|
loaded
|
51
48
|
end
|