oj 3.11.0 → 3.11.5
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/README.md +2 -1
- data/ext/oj/buf.h +34 -38
- data/ext/oj/cache8.c +59 -62
- data/ext/oj/cache8.h +8 -7
- data/ext/oj/circarray.c +33 -35
- data/ext/oj/circarray.h +11 -9
- data/ext/oj/code.c +170 -174
- data/ext/oj/code.h +21 -20
- data/ext/oj/compat.c +159 -166
- data/ext/oj/custom.c +802 -851
- data/ext/oj/dump.c +766 -778
- data/ext/oj/dump.h +49 -51
- data/ext/oj/dump_compat.c +1 -0
- data/ext/oj/dump_leaf.c +116 -157
- data/ext/oj/dump_object.c +609 -628
- data/ext/oj/dump_strict.c +318 -327
- data/ext/oj/encode.h +3 -4
- data/ext/oj/err.c +39 -25
- data/ext/oj/err.h +24 -15
- data/ext/oj/extconf.rb +2 -1
- data/ext/oj/fast.c +1008 -1038
- data/ext/oj/hash.c +62 -66
- data/ext/oj/hash.h +7 -6
- data/ext/oj/hash_test.c +450 -443
- data/ext/oj/mimic_json.c +413 -402
- data/ext/oj/object.c +559 -528
- data/ext/oj/odd.c +123 -128
- data/ext/oj/odd.h +27 -25
- data/ext/oj/oj.c +1131 -924
- data/ext/oj/oj.h +286 -298
- data/ext/oj/parse.c +938 -930
- data/ext/oj/parse.h +70 -69
- data/ext/oj/rails.c +836 -839
- data/ext/oj/rails.h +7 -7
- data/ext/oj/reader.c +135 -140
- data/ext/oj/reader.h +66 -79
- data/ext/oj/resolve.c +43 -43
- data/ext/oj/resolve.h +3 -2
- data/ext/oj/rxclass.c +67 -68
- data/ext/oj/rxclass.h +12 -10
- data/ext/oj/saj.c +451 -479
- data/ext/oj/scp.c +93 -103
- data/ext/oj/sparse.c +770 -730
- data/ext/oj/stream_writer.c +120 -149
- data/ext/oj/strict.c +71 -86
- data/ext/oj/string_writer.c +198 -243
- data/ext/oj/trace.c +29 -33
- data/ext/oj/trace.h +14 -11
- data/ext/oj/util.c +103 -103
- data/ext/oj/util.h +3 -2
- data/ext/oj/val_stack.c +47 -47
- data/ext/oj/val_stack.h +79 -86
- data/ext/oj/wab.c +291 -309
- data/lib/oj/bag.rb +1 -0
- data/lib/oj/easy_hash.rb +5 -4
- data/lib/oj/mimic.rb +0 -12
- data/lib/oj/version.rb +1 -1
- data/test/activerecord/result_test.rb +7 -2
- data/test/foo.rb +35 -32
- data/test/helper.rb +10 -0
- data/test/json_gem/json_generator_test.rb +15 -3
- data/test/json_gem/test_helper.rb +8 -0
- data/test/test_compat.rb +2 -2
- data/test/test_generate.rb +21 -0
- data/test/test_hash.rb +10 -0
- data/test/test_scp.rb +1 -1
- metadata +4 -2
data/lib/oj/bag.rb
CHANGED
data/lib/oj/easy_hash.rb
CHANGED
@@ -12,13 +12,14 @@ module Oj
|
|
12
12
|
|
13
13
|
# Replaces the Object.respond_to?() method.
|
14
14
|
# @param [Symbol] m method symbol
|
15
|
+
# @param [Boolean] include_all whether to include private and protected methods in the search
|
15
16
|
# @return [Boolean] true for any method that matches an instance
|
16
17
|
# variable reader, otherwise false.
|
17
|
-
def respond_to?(m)
|
18
|
+
def respond_to?(m, include_all = false)
|
18
19
|
return true if super
|
19
|
-
return true if has_key?(
|
20
|
-
return true if has_key?(
|
21
|
-
has_key?(
|
20
|
+
return true if has_key?(m)
|
21
|
+
return true if has_key?(m.to_s)
|
22
|
+
has_key?(m.to_sym)
|
22
23
|
end
|
23
24
|
|
24
25
|
def [](key)
|
data/lib/oj/mimic.rb
CHANGED
@@ -133,18 +133,6 @@ module Oj
|
|
133
133
|
end
|
134
134
|
end
|
135
135
|
|
136
|
-
Date.class_eval do
|
137
|
-
# Both the JSON gem and Rails monkey patch as_json. Let them battle it out.
|
138
|
-
unless defined?(self.as_json)
|
139
|
-
def as_json(*)
|
140
|
-
{ JSON.create_id => 'Date', 'y' => year, 'm' => month, 'd' => day, 'sg' => start }
|
141
|
-
end
|
142
|
-
end
|
143
|
-
def self.json_create(h)
|
144
|
-
civil(h['y'], h['m'], h['d'], h['sg'])
|
145
|
-
end
|
146
|
-
end
|
147
|
-
|
148
136
|
DateTime.class_eval do
|
149
137
|
# Both the JSON gem and Rails monkey patch as_json. Let them battle it out.
|
150
138
|
unless defined?(self.as_json)
|
data/lib/oj/version.rb
CHANGED
@@ -21,7 +21,12 @@ class ActiveRecordResultTest < Minitest::Test
|
|
21
21
|
["row 3 col 1", "row 3 col 2"],
|
22
22
|
])
|
23
23
|
#puts "*** result: #{Oj.dump(result, indent: 2)}"
|
24
|
-
|
25
|
-
|
24
|
+
json_result = if ActiveRecord.version >= Gem::Version.new("6")
|
25
|
+
result.to_a
|
26
|
+
else
|
27
|
+
result.to_hash
|
28
|
+
end
|
29
|
+
|
30
|
+
assert_equal Oj.dump(result, mode: :rails), Oj.dump(json_result)
|
26
31
|
end
|
27
32
|
end
|
data/test/foo.rb
CHANGED
@@ -6,47 +6,50 @@ $oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
|
|
6
6
|
$: << File.join($oj_dir, dir)
|
7
7
|
end
|
8
8
|
|
9
|
-
require 'json'
|
10
|
-
|
11
|
-
t = [Time.now.utc]
|
12
|
-
|
13
|
-
puts "t.to_json - #{t.to_json}"
|
14
|
-
|
15
|
-
puts "--- active support"
|
16
|
-
|
17
|
-
require 'active_support'
|
18
|
-
require "active_support/json"
|
19
|
-
|
20
|
-
ActiveSupport::JSON::Encoding.use_standard_json_time_format = false
|
21
|
-
|
22
|
-
puts "t.as_json - #{t.as_json}"
|
23
|
-
puts "t.to_json - #{t.to_json}"
|
24
|
-
|
25
9
|
require 'oj'
|
26
10
|
|
27
|
-
|
11
|
+
class Foo
|
12
|
+
def initialize
|
13
|
+
@x = 123
|
14
|
+
end
|
15
|
+
|
16
|
+
def xto_json(opt=nil, options=nil)
|
17
|
+
"---to_json---"
|
18
|
+
end
|
19
|
+
end
|
28
20
|
|
29
|
-
|
21
|
+
class Bar < Foo
|
22
|
+
def initialize
|
23
|
+
@x = 321
|
24
|
+
end
|
25
|
+
end
|
30
26
|
|
31
|
-
|
32
|
-
|
27
|
+
foo = Foo.new
|
28
|
+
bar = Bar.new
|
33
29
|
|
34
|
-
|
30
|
+
require 'json'
|
35
31
|
|
36
|
-
|
32
|
+
puts "JSON: #{JSON.generate(foo)}"
|
33
|
+
puts "to_json: #{foo.to_json}"
|
34
|
+
puts "bar JSON: #{JSON.generate(bar)}"
|
35
|
+
puts "bar to_json: #{bar.to_json}"
|
37
36
|
|
38
|
-
|
37
|
+
m = bar.method('to_json')
|
38
|
+
puts "*** method: #{m} owner: #{m.owner.name}"
|
39
39
|
|
40
|
-
|
41
|
-
require
|
40
|
+
puts "---- rails"
|
41
|
+
require 'rails'
|
42
42
|
|
43
|
-
|
43
|
+
m = bar.method('to_json')
|
44
|
+
puts "*** method: #{m} owner: #{m.owner} params: #{m.parameters}"
|
44
45
|
|
45
|
-
puts "
|
46
|
-
puts "
|
46
|
+
puts "JSON: #{JSON.generate(foo)}"
|
47
|
+
puts "to_json: #{foo.to_json}"
|
47
48
|
|
48
|
-
puts "
|
49
|
-
Oj.
|
49
|
+
puts "---- Oj.mimic_JSON"
|
50
|
+
Oj.mimic_JSON()
|
51
|
+
puts "Oj JSON: #{JSON.generate(foo)}"
|
52
|
+
puts "Oj to_json: #{foo.to_json}"
|
50
53
|
|
51
|
-
|
52
|
-
puts "
|
54
|
+
m = bar.method('to_json')
|
55
|
+
puts "*** method: #{m} owner: #{m.owner} params: #{m.parameters}"
|
data/test/helper.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
#
|
1
3
|
# Ubuntu does not accept arguments to ruby when called using env. To get warnings to show up the -w options is
|
2
4
|
# required. That can be set in the RUBYOPT environment variable.
|
3
5
|
# export RUBYOPT=-w
|
@@ -16,6 +18,14 @@ require 'bigdecimal'
|
|
16
18
|
require 'pp'
|
17
19
|
require 'oj'
|
18
20
|
|
21
|
+
|
22
|
+
if defined?(GC.verify_compaction_references) == 'method'
|
23
|
+
# This method was added in Ruby 3.0.0. Calling it this way asks the GC to
|
24
|
+
# move objects around, helping to find object movement bugs.
|
25
|
+
GC.verify_compaction_references(double_heap: true, toward: :empty)
|
26
|
+
end
|
27
|
+
|
28
|
+
|
19
29
|
$ruby = RUBY_DESCRIPTION.split(' ')[0]
|
20
30
|
$ruby = 'ree' if 'ruby' == $ruby && RUBY_DESCRIPTION.include?('Ruby Enterprise Edition')
|
21
31
|
|
@@ -136,6 +136,10 @@ EOT
|
|
136
136
|
|
137
137
|
def test_pretty_state
|
138
138
|
state = JSON::PRETTY_STATE_PROTOTYPE.dup
|
139
|
+
# In come cases in Ruby 3.0 an :escape_slash is included in the state. It
|
140
|
+
# seems to occur on travis but not locally.
|
141
|
+
actual = state.to_h
|
142
|
+
actual.delete(:escape_slash)
|
139
143
|
assert_equal({
|
140
144
|
:allow_nan => false,
|
141
145
|
:array_nl => "\n",
|
@@ -147,11 +151,15 @@ EOT
|
|
147
151
|
:object_nl => "\n",
|
148
152
|
:space => " ",
|
149
153
|
:space_before => "",
|
150
|
-
}.sort_by { |n,| n.to_s },
|
154
|
+
}.sort_by { |n,| n.to_s }, actual.sort_by { |n,| n.to_s })
|
151
155
|
end
|
152
156
|
|
153
157
|
def test_safe_state
|
154
158
|
state = JSON::SAFE_STATE_PROTOTYPE.dup
|
159
|
+
# In come cases in Ruby 3.0 an :escape_slash is included in the state. It
|
160
|
+
# seems to occur on travis but not locally.
|
161
|
+
actual = state.to_h
|
162
|
+
actual.delete(:escape_slash)
|
155
163
|
assert_equal({
|
156
164
|
:allow_nan => false,
|
157
165
|
:array_nl => "",
|
@@ -163,11 +171,15 @@ EOT
|
|
163
171
|
:object_nl => "",
|
164
172
|
:space => "",
|
165
173
|
:space_before => "",
|
166
|
-
}.sort_by { |n,| n.to_s },
|
174
|
+
}.sort_by { |n,| n.to_s }, actual.sort_by { |n,| n.to_s })
|
167
175
|
end
|
168
176
|
|
169
177
|
def test_fast_state
|
170
178
|
state = JSON::FAST_STATE_PROTOTYPE.dup
|
179
|
+
# In come cases in Ruby 3.0 an :escape_slash is included in the state. It
|
180
|
+
# seems to occur on travis but not locally.
|
181
|
+
actual = state.to_h
|
182
|
+
actual.delete(:escape_slash)
|
171
183
|
assert_equal({
|
172
184
|
:allow_nan => false,
|
173
185
|
:array_nl => "",
|
@@ -179,7 +191,7 @@ EOT
|
|
179
191
|
:object_nl => "",
|
180
192
|
:space => "",
|
181
193
|
:space_before => "",
|
182
|
-
}.sort_by { |n,| n.to_s },
|
194
|
+
}.sort_by { |n,| n.to_s }, actual.sort_by { |n,| n.to_s })
|
183
195
|
end
|
184
196
|
|
185
197
|
def test_allow_nan
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
$: << File.dirname(__FILE__)
|
2
4
|
$oj_dir = File.dirname(File.dirname(File.expand_path(File.dirname(__FILE__))))
|
3
5
|
%w(lib ext).each do |dir|
|
@@ -12,6 +14,12 @@ if ENV['REAL_JSON_GEM']
|
|
12
14
|
else
|
13
15
|
require 'oj'
|
14
16
|
Oj.mimic_JSON
|
17
|
+
|
18
|
+
if defined?(GC.verify_compaction_references) == 'method'
|
19
|
+
# This method was added in Ruby 3.0.0. Calling it this way asks the GC to
|
20
|
+
# move objects around, helping to find object movement bugs.
|
21
|
+
GC.verify_compaction_references(double_heap: true, toward: :empty)
|
22
|
+
end
|
15
23
|
end
|
16
24
|
|
17
25
|
NaN = JSON::NaN if defined?(JSON::NaN)
|
data/test/test_compat.rb
CHANGED
@@ -178,7 +178,7 @@ class CompatJuice < Minitest::Test
|
|
178
178
|
assert_equal('"abc"', json)
|
179
179
|
end
|
180
180
|
|
181
|
-
def
|
181
|
+
def test_time_xml_schema
|
182
182
|
t = Time.xmlschema("2012-01-05T23:58:07.123456000+09:00")
|
183
183
|
#t = Time.local(2012, 1, 5, 23, 58, 7, 123456)
|
184
184
|
json = Oj.dump(t, :mode => :compat)
|
@@ -297,7 +297,7 @@ class CompatJuice < Minitest::Test
|
|
297
297
|
end
|
298
298
|
|
299
299
|
# Time
|
300
|
-
def
|
300
|
+
def test_time_from_time_object
|
301
301
|
t = Time.new(2015, 1, 5, 21, 37, 7.123456, -8 * 3600)
|
302
302
|
expect = '"' + t.to_s + '"'
|
303
303
|
json = Oj.dump(t)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: utf-8
|
3
|
+
|
4
|
+
$: << File.dirname(__FILE__)
|
5
|
+
$oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
|
6
|
+
%w(lib ext).each do |dir|
|
7
|
+
$: << File.join($oj_dir, dir)
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'minitest'
|
11
|
+
require 'minitest/autorun'
|
12
|
+
require 'oj'
|
13
|
+
|
14
|
+
class Generator < Minitest::Test
|
15
|
+
|
16
|
+
def test_before
|
17
|
+
json = Oj.generate({})
|
18
|
+
assert_equal("{}", json)
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
data/test/test_hash.rb
CHANGED
@@ -25,5 +25,15 @@ class Hashi < Minitest::Test
|
|
25
25
|
assert_equal(3, obj[:abc])
|
26
26
|
assert_equal(3, obj.abc())
|
27
27
|
end
|
28
|
+
|
29
|
+
def test_marshal
|
30
|
+
h = Oj::EasyHash.new()
|
31
|
+
h['abc'] = 3
|
32
|
+
out = Marshal.dump(h)
|
33
|
+
|
34
|
+
obj = Marshal.load(out)
|
35
|
+
assert_equal(Oj::EasyHash, obj.class)
|
36
|
+
assert_equal(3, obj[:abc])
|
37
|
+
end
|
28
38
|
|
29
39
|
end # HashTest
|
data/test/test_scp.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.11.
|
4
|
+
version: 3.11.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Ohler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-04-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -240,6 +240,7 @@ files:
|
|
240
240
|
- test/test_fast.rb
|
241
241
|
- test/test_file.rb
|
242
242
|
- test/test_gc.rb
|
243
|
+
- test/test_generate.rb
|
243
244
|
- test/test_hash.rb
|
244
245
|
- test/test_integer_range.rb
|
245
246
|
- test/test_null.rb
|
@@ -364,6 +365,7 @@ test_files:
|
|
364
365
|
- test/test_fast.rb
|
365
366
|
- test/test_file.rb
|
366
367
|
- test/test_gc.rb
|
368
|
+
- test/test_generate.rb
|
367
369
|
- test/test_hash.rb
|
368
370
|
- test/test_integer_range.rb
|
369
371
|
- test/test_null.rb
|