oj 3.11.1 → 3.11.6

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.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -1
  3. data/ext/oj/buf.h +34 -38
  4. data/ext/oj/cache8.c +59 -62
  5. data/ext/oj/cache8.h +8 -7
  6. data/ext/oj/circarray.c +33 -35
  7. data/ext/oj/circarray.h +11 -9
  8. data/ext/oj/code.c +170 -174
  9. data/ext/oj/code.h +21 -20
  10. data/ext/oj/compat.c +159 -166
  11. data/ext/oj/custom.c +802 -851
  12. data/ext/oj/dump.c +766 -778
  13. data/ext/oj/dump.h +49 -51
  14. data/ext/oj/dump_compat.c +1 -0
  15. data/ext/oj/dump_leaf.c +116 -157
  16. data/ext/oj/dump_object.c +609 -628
  17. data/ext/oj/dump_strict.c +318 -327
  18. data/ext/oj/encode.h +3 -4
  19. data/ext/oj/err.c +39 -25
  20. data/ext/oj/err.h +24 -15
  21. data/ext/oj/extconf.rb +2 -1
  22. data/ext/oj/fast.c +1042 -1041
  23. data/ext/oj/hash.c +62 -66
  24. data/ext/oj/hash.h +7 -6
  25. data/ext/oj/hash_test.c +450 -443
  26. data/ext/oj/mimic_json.c +412 -402
  27. data/ext/oj/object.c +559 -528
  28. data/ext/oj/odd.c +123 -128
  29. data/ext/oj/odd.h +27 -25
  30. data/ext/oj/oj.c +1123 -924
  31. data/ext/oj/oj.h +286 -298
  32. data/ext/oj/parse.c +938 -930
  33. data/ext/oj/parse.h +70 -69
  34. data/ext/oj/rails.c +836 -839
  35. data/ext/oj/rails.h +7 -7
  36. data/ext/oj/reader.c +135 -140
  37. data/ext/oj/reader.h +66 -79
  38. data/ext/oj/resolve.c +43 -43
  39. data/ext/oj/resolve.h +3 -2
  40. data/ext/oj/rxclass.c +67 -68
  41. data/ext/oj/rxclass.h +12 -10
  42. data/ext/oj/saj.c +451 -479
  43. data/ext/oj/scp.c +93 -103
  44. data/ext/oj/sparse.c +770 -730
  45. data/ext/oj/stream_writer.c +120 -149
  46. data/ext/oj/strict.c +71 -86
  47. data/ext/oj/string_writer.c +198 -243
  48. data/ext/oj/trace.c +29 -33
  49. data/ext/oj/trace.h +14 -11
  50. data/ext/oj/util.c +103 -103
  51. data/ext/oj/util.h +3 -2
  52. data/ext/oj/val_stack.c +47 -47
  53. data/ext/oj/val_stack.h +79 -86
  54. data/ext/oj/wab.c +291 -309
  55. data/lib/oj/bag.rb +1 -0
  56. data/lib/oj/easy_hash.rb +5 -4
  57. data/lib/oj/mimic.rb +0 -12
  58. data/lib/oj/version.rb +1 -1
  59. data/test/activerecord/result_test.rb +7 -2
  60. data/test/foo.rb +35 -32
  61. data/test/test_fast.rb +32 -2
  62. data/test/test_generate.rb +21 -0
  63. data/test/test_hash.rb +10 -0
  64. data/test/test_scp.rb +1 -1
  65. metadata +4 -2
data/lib/oj/bag.rb CHANGED
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  module Oj
3
4
 
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?(key)
20
- return true if has_key?(key.to_s)
21
- has_key?(key.to_sym)
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
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Oj
3
3
  # Current version of the module.
4
- VERSION = '3.11.1'
4
+ VERSION = '3.11.6'
5
5
  end
@@ -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
- assert_equal Oj.dump(result, mode: :rails), Oj.dump(result.to_hash)
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
- t = [Time.now.utc]
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
- puts "-----------------------"
21
+ class Bar < Foo
22
+ def initialize
23
+ @x = 321
24
+ end
25
+ end
30
26
 
31
- #puts "t.as_json - #{t.as_json}"
32
- puts "t.to_json - #{t.to_json}"
27
+ foo = Foo.new
28
+ bar = Bar.new
33
29
 
34
- #Oj.mimic_JSON
30
+ require 'json'
35
31
 
36
- #puts "Oj - t.as_json - #{t.as_json}"
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
- puts "--- active support"
37
+ m = bar.method('to_json')
38
+ puts "*** method: #{m} owner: #{m.owner.name}"
39
39
 
40
- require 'active_support'
41
- require "active_support/json"
40
+ puts "---- rails"
41
+ require 'rails'
42
42
 
43
- ActiveSupport::JSON::Encoding.use_standard_json_time_format = false
43
+ m = bar.method('to_json')
44
+ puts "*** method: #{m} owner: #{m.owner} params: #{m.parameters}"
44
45
 
45
- puts "t.as_json - #{t.as_json}"
46
- puts "t.to_json - #{t.to_json}"
46
+ puts "JSON: #{JSON.generate(foo)}"
47
+ puts "to_json: #{foo.to_json}"
47
48
 
48
- puts "--- optimize"
49
- Oj.optimize_rails
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
- puts "t.as_json - #{t.as_json}"
52
- puts "t.to_json - #{t.to_json}"
54
+ m = bar.method('to_json')
55
+ puts "*** method: #{m} owner: #{m.owner} params: #{m.parameters}"
data/test/test_fast.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: UTF-8
2
+ # encoding: utf-8
3
3
 
4
4
  $: << File.dirname(__FILE__)
5
5
 
@@ -279,10 +279,26 @@ class DocTest < Minitest::Test
279
279
  ['/array/1', {'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}],
280
280
  ['/array', [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}]],
281
281
  ['/', {'array' => [{'num' => 3, 'string' => 'message', 'hash' => {'h2' => {'a' => [1, 2, 3]}}}], 'boolean' => true}],
282
+ ['/nothing', nil],
283
+ ['/array/10', nil],
282
284
  ].each do |path,val|
283
- assert_equal(val, doc.fetch(path))
285
+ if val.nil?
286
+ assert_nil(doc.fetch(path))
287
+ else
288
+ assert_equal(val, doc.fetch(path))
289
+ end
284
290
  end
285
291
  end
292
+ # verify empty hash and arrays return nil when a member is requested
293
+ Oj::Doc.open('{}') do |doc|
294
+ assert_nil(doc.fetch('/x'))
295
+ assert_nil(doc.fetch('/0'))
296
+ end
297
+ Oj::Doc.open('[]') do |doc|
298
+ assert_nil(doc.fetch('/x'))
299
+ assert_nil(doc.fetch('/0'))
300
+ end
301
+
286
302
  end
287
303
 
288
304
  def test_move_fetch_path
@@ -297,6 +313,20 @@ class DocTest < Minitest::Test
297
313
  end
298
314
  end
299
315
 
316
+ def test_exisits
317
+ Oj::Doc.open(@json1) do |doc|
318
+ [['/array/1', true],
319
+ ['/array/1', true],
320
+ ['/array/1/hash', true],
321
+ ['/array/1/dash', false],
322
+ ['/array/3', false],
323
+ ['/nothing', false],
324
+ ].each do |path,val|
325
+ assert_equal(val, doc.exists?(path))
326
+ end
327
+ end
328
+ end
329
+
300
330
  def test_home
301
331
  Oj::Doc.open(@json1) do |doc|
302
332
  doc.move('/array/1/num')
@@ -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
@@ -328,7 +328,7 @@ class ScpTest < Minitest::Test
328
328
  IO.pipe do |read_io, write_io|
329
329
  if fork
330
330
  write_io.close
331
- Oj.sc_parse(handler, read_io) {|v| p v}
331
+ Oj.sc_parse(handler, read_io)
332
332
  read_io.close
333
333
  assert_equal([[:hash_start],
334
334
  [:hash_key, 'one'],
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.1
4
+ version: 3.11.6
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-01-24 00:00:00.000000000 Z
11
+ date: 2021-06-14 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