oj 3.16.6 → 3.17.3

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 (130) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +81 -0
  3. data/README.md +0 -16
  4. data/ext/oj/compat.c +3 -3
  5. data/ext/oj/custom.c +17 -11
  6. data/ext/oj/dump.c +592 -81
  7. data/ext/oj/dump.h +9 -2
  8. data/ext/oj/dump_compat.c +15 -9
  9. data/ext/oj/dump_leaf.c +1 -1
  10. data/ext/oj/dump_object.c +32 -17
  11. data/ext/oj/dump_strict.c +20 -14
  12. data/ext/oj/extconf.rb +10 -7
  13. data/ext/oj/fast.c +40 -23
  14. data/ext/oj/intern.c +1 -1
  15. data/ext/oj/mimic_json.c +11 -7
  16. data/ext/oj/object.c +8 -8
  17. data/ext/oj/oj.c +256 -10
  18. data/ext/oj/oj.h +55 -52
  19. data/ext/oj/parse.c +243 -46
  20. data/ext/oj/parser.c +113 -37
  21. data/ext/oj/parser.h +2 -0
  22. data/ext/oj/rails.c +41 -36
  23. data/ext/oj/rxclass.c +1 -1
  24. data/ext/oj/rxclass.h +1 -1
  25. data/ext/oj/safe.c +230 -0
  26. data/ext/oj/safe.h +79 -0
  27. data/ext/oj/saj.c +13 -8
  28. data/ext/oj/scp.c +3 -6
  29. data/ext/oj/simd.h +219 -0
  30. data/ext/oj/sparse.c +6 -3
  31. data/ext/oj/stream_writer.c +3 -13
  32. data/ext/oj/strict.c +2 -4
  33. data/ext/oj/string_writer.c +5 -7
  34. data/ext/oj/usual.c +20 -7
  35. data/ext/oj/wab.c +5 -4
  36. data/lib/oj/version.rb +1 -1
  37. data/pages/Encoding.md +1 -1
  38. metadata +22 -114
  39. data/test/_test_active.rb +0 -75
  40. data/test/_test_active_mimic.rb +0 -95
  41. data/test/_test_mimic_rails.rb +0 -123
  42. data/test/activerecord/result_test.rb +0 -31
  43. data/test/activesupport6/abstract_unit.rb +0 -44
  44. data/test/activesupport6/decoding_test.rb +0 -133
  45. data/test/activesupport6/encoding_test.rb +0 -542
  46. data/test/activesupport6/encoding_test_cases.rb +0 -98
  47. data/test/activesupport6/test_common.rb +0 -17
  48. data/test/activesupport6/test_helper.rb +0 -163
  49. data/test/activesupport6/time_zone_test_helpers.rb +0 -39
  50. data/test/activesupport7/abstract_unit.rb +0 -52
  51. data/test/activesupport7/decoding_test.rb +0 -125
  52. data/test/activesupport7/encoding_test.rb +0 -536
  53. data/test/activesupport7/encoding_test_cases.rb +0 -104
  54. data/test/activesupport7/time_zone_test_helpers.rb +0 -47
  55. data/test/files.rb +0 -29
  56. data/test/foo.rb +0 -26
  57. data/test/helper.rb +0 -39
  58. data/test/isolated/shared.rb +0 -309
  59. data/test/isolated/test_mimic_after.rb +0 -13
  60. data/test/isolated/test_mimic_alone.rb +0 -12
  61. data/test/isolated/test_mimic_as_json.rb +0 -45
  62. data/test/isolated/test_mimic_before.rb +0 -13
  63. data/test/isolated/test_mimic_define.rb +0 -28
  64. data/test/isolated/test_mimic_rails_after.rb +0 -22
  65. data/test/isolated/test_mimic_rails_before.rb +0 -21
  66. data/test/isolated/test_mimic_redefine.rb +0 -15
  67. data/test/json_gem/json_addition_test.rb +0 -216
  68. data/test/json_gem/json_common_interface_test.rb +0 -155
  69. data/test/json_gem/json_encoding_test.rb +0 -107
  70. data/test/json_gem/json_ext_parser_test.rb +0 -21
  71. data/test/json_gem/json_fixtures_test.rb +0 -36
  72. data/test/json_gem/json_generator_test.rb +0 -413
  73. data/test/json_gem/json_generic_object_test.rb +0 -90
  74. data/test/json_gem/json_parser_test.rb +0 -477
  75. data/test/json_gem/json_string_matching_test.rb +0 -42
  76. data/test/json_gem/test_helper.rb +0 -30
  77. data/test/mem.rb +0 -34
  78. data/test/perf.rb +0 -102
  79. data/test/perf_compat.rb +0 -128
  80. data/test/perf_dump.rb +0 -50
  81. data/test/perf_fast.rb +0 -162
  82. data/test/perf_file.rb +0 -62
  83. data/test/perf_object.rb +0 -134
  84. data/test/perf_once.rb +0 -59
  85. data/test/perf_parser.rb +0 -183
  86. data/test/perf_saj.rb +0 -101
  87. data/test/perf_scp.rb +0 -140
  88. data/test/perf_simple.rb +0 -289
  89. data/test/perf_strict.rb +0 -137
  90. data/test/perf_wab.rb +0 -129
  91. data/test/prec.rb +0 -23
  92. data/test/sample/change.rb +0 -13
  93. data/test/sample/dir.rb +0 -18
  94. data/test/sample/doc.rb +0 -35
  95. data/test/sample/file.rb +0 -47
  96. data/test/sample/group.rb +0 -15
  97. data/test/sample/hasprops.rb +0 -15
  98. data/test/sample/layer.rb +0 -11
  99. data/test/sample/line.rb +0 -20
  100. data/test/sample/oval.rb +0 -10
  101. data/test/sample/rect.rb +0 -9
  102. data/test/sample/shape.rb +0 -34
  103. data/test/sample/text.rb +0 -19
  104. data/test/sample.rb +0 -54
  105. data/test/sample_json.rb +0 -37
  106. data/test/test_compat.rb +0 -567
  107. data/test/test_custom.rb +0 -555
  108. data/test/test_debian.rb +0 -50
  109. data/test/test_fast.rb +0 -526
  110. data/test/test_file.rb +0 -250
  111. data/test/test_gc.rb +0 -60
  112. data/test/test_generate.rb +0 -21
  113. data/test/test_hash.rb +0 -39
  114. data/test/test_integer_range.rb +0 -72
  115. data/test/test_null.rb +0 -376
  116. data/test/test_object.rb +0 -1030
  117. data/test/test_parser.rb +0 -11
  118. data/test/test_parser_debug.rb +0 -27
  119. data/test/test_parser_saj.rb +0 -337
  120. data/test/test_parser_usual.rb +0 -251
  121. data/test/test_rails.rb +0 -35
  122. data/test/test_saj.rb +0 -188
  123. data/test/test_scp.rb +0 -431
  124. data/test/test_strict.rb +0 -441
  125. data/test/test_various.rb +0 -801
  126. data/test/test_wab.rb +0 -311
  127. data/test/test_writer.rb +0 -380
  128. data/test/tests.rb +0 -33
  129. data/test/tests_mimic.rb +0 -23
  130. data/test/tests_mimic_addition.rb +0 -16
@@ -1,31 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- $: << File.dirname(__FILE__)
4
- $: << File.dirname(File.dirname(__FILE__))
5
-
6
- require 'helper'
7
- require "rails/all"
8
-
9
- Oj::Rails.set_encoder()
10
- Oj::Rails.optimize()
11
-
12
- Oj.default_options = { mode: :rails }
13
-
14
- class ActiveRecordResultTest < Minitest::Test
15
- def test_hash_rows
16
- result = ActiveRecord::Result.new(["one", "two"],
17
- [
18
- ["row 1 col 1", "row 1 col 2"],
19
- ["row 2 col 1", "row 2 col 2"],
20
- ["row 3 col 1", "row 3 col 2"],
21
- ])
22
- #puts "*** result: #{Oj.dump(result, indent: 2)}"
23
- json_result = if ActiveRecord.version >= Gem::Version.new("6")
24
- result.to_a
25
- else
26
- result.to_hash
27
- end
28
-
29
- assert_equal Oj.dump(result, mode: :rails), Oj.dump(json_result)
30
- end
31
- end
@@ -1,44 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ORIG_ARGV = ARGV.dup
4
-
5
- require "active_support/core_ext/kernel/reporting"
6
-
7
- silence_warnings do
8
- Encoding.default_internal = Encoding::UTF_8
9
- Encoding.default_external = Encoding::UTF_8
10
- end
11
-
12
- require "active_support/testing/autorun"
13
- require "active_support/testing/method_call_assertions"
14
-
15
- ENV["NO_RELOAD"] = "1"
16
- require "active_support"
17
-
18
- Thread.abort_on_exception = true
19
-
20
- # Show backtraces for deprecated behavior for quicker cleanup.
21
- ActiveSupport::Deprecation.debug = true
22
-
23
- # Default to old to_time behavior but allow running tests with new behavior
24
- ActiveSupport.to_time_preserves_timezone = ENV["PRESERVE_TIMEZONES"] == "1"
25
-
26
- # Disable available locale checks to avoid warnings running the test suite.
27
- I18n.enforce_available_locales = false
28
-
29
- class ActiveSupport::TestCase
30
- include ActiveSupport::Testing::MethodCallAssertions
31
-
32
- private
33
- # Skips the current run on Rubinius using Minitest::Assertions#skip
34
- def rubinius_skip(message = "")
35
- skip message if RUBY_ENGINE == "rbx"
36
- end
37
-
38
- # Skips the current run on JRuby using Minitest::Assertions#skip
39
- def jruby_skip(message = "")
40
- skip message if defined?(JRUBY_VERSION)
41
- end
42
- end
43
-
44
- require_relative "test_common"
@@ -1,133 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative "abstract_unit"
4
- require "active_support/json"
5
- require "active_support/time"
6
- require_relative "time_zone_test_helpers"
7
-
8
- require 'oj'
9
-
10
- Oj::Rails.set_decoder()
11
-
12
- class TestJSONDecoding < ActiveSupport::TestCase
13
- include TimeZoneTestHelpers
14
-
15
- # Added for testing if Oj is used.
16
- test "oj is used as an encoder" do
17
- assert_equal ActiveSupport.json_encoder, Oj::Rails::Encoder
18
- end
19
-
20
- class Foo
21
- def self.json_create(object)
22
- "Foo"
23
- end
24
- end
25
-
26
- TESTS = {
27
- %q({"returnTo":{"\/categories":"\/"}}) => { "returnTo" => { "/categories" => "/" } },
28
- %q({"return\\"To\\":":{"\/categories":"\/"}}) => { "return\"To\":" => { "/categories" => "/" } },
29
- %q({"returnTo":{"\/categories":1}}) => { "returnTo" => { "/categories" => 1 } },
30
- %({"returnTo":[1,"a"]}) => { "returnTo" => [1, "a"] },
31
- %({"returnTo":[1,"\\"a\\",", "b"]}) => { "returnTo" => [1, "\"a\",", "b"] },
32
- %({"a": "'", "b": "5,000"}) => { "a" => "'", "b" => "5,000" },
33
- %({"a": "a's, b's and c's", "b": "5,000"}) => { "a" => "a's, b's and c's", "b" => "5,000" },
34
- # multibyte
35
- %({"matzue": "松江", "asakusa": "浅草"}) => { "matzue" => "松江", "asakusa" => "浅草" },
36
- %({"a": "2007-01-01"}) => { "a" => Date.new(2007, 1, 1) },
37
- %({"a": "2007-01-01 01:12:34 Z"}) => { "a" => Time.utc(2007, 1, 1, 1, 12, 34) },
38
- %(["2007-01-01 01:12:34 Z"]) => [Time.utc(2007, 1, 1, 1, 12, 34)],
39
- %(["2007-01-01 01:12:34 Z", "2007-01-01 01:12:35 Z"]) => [Time.utc(2007, 1, 1, 1, 12, 34), Time.utc(2007, 1, 1, 1, 12, 35)],
40
- # no time zone
41
- %({"a": "2007-01-01 01:12:34"}) => { "a" => Time.new(2007, 1, 1, 1, 12, 34, "-05:00") },
42
- # invalid date
43
- %({"a": "1089-10-40"}) => { "a" => "1089-10-40" },
44
- # xmlschema date notation
45
- %({"a": "2009-08-10T19:01:02"}) => { "a" => Time.new(2009, 8, 10, 19, 1, 2, "-04:00") },
46
- %({"a": "2009-08-10T19:01:02Z"}) => { "a" => Time.utc(2009, 8, 10, 19, 1, 2) },
47
- %({"a": "2009-08-10T19:01:02+02:00"}) => { "a" => Time.utc(2009, 8, 10, 17, 1, 2) },
48
- %({"a": "2009-08-10T19:01:02-05:00"}) => { "a" => Time.utc(2009, 8, 11, 00, 1, 2) },
49
- # needs to be *exact*
50
- %({"a": " 2007-01-01 01:12:34 Z "}) => { "a" => " 2007-01-01 01:12:34 Z " },
51
- %({"a": "2007-01-01 : it's your birthday"}) => { "a" => "2007-01-01 : it's your birthday" },
52
- %([]) => [],
53
- %({}) => {},
54
- %({"a":1}) => { "a" => 1 },
55
- %({"a": ""}) => { "a" => "" },
56
- %({"a":"\\""}) => { "a" => "\"" },
57
- %({"a": null}) => { "a" => nil },
58
- %({"a": true}) => { "a" => true },
59
- %({"a": false}) => { "a" => false },
60
- '{"bad":"\\\\","trailing":""}' => { "bad" => "\\", "trailing" => "" },
61
- %q({"a": "http:\/\/test.host\/posts\/1"}) => { "a" => "http://test.host/posts/1" },
62
- %q({"a": "\u003cunicode\u0020escape\u003e"}) => { "a" => "<unicode escape>" },
63
- '{"a": "\\\\u0020skip double backslashes"}' => { "a" => "\\u0020skip double backslashes" },
64
- %q({"a": "\u003cbr /\u003e"}) => { "a" => "<br />" },
65
- %q({"b":["\u003ci\u003e","\u003cb\u003e","\u003cu\u003e"]}) => { "b" => ["<i>", "<b>", "<u>"] },
66
- # test combination of dates and escaped or unicode encoded data in arrays
67
- %q([{"d":"1970-01-01", "s":"\u0020escape"},{"d":"1970-01-01", "s":"\u0020escape"}]) =>
68
- [{ "d" => Date.new(1970, 1, 1), "s" => " escape" }, { "d" => Date.new(1970, 1, 1), "s" => " escape" }],
69
- %q([{"d":"1970-01-01","s":"http:\/\/example.com"},{"d":"1970-01-01","s":"http:\/\/example.com"}]) =>
70
- [{ "d" => Date.new(1970, 1, 1), "s" => "http://example.com" },
71
- { "d" => Date.new(1970, 1, 1), "s" => "http://example.com" }],
72
- # tests escaping of "\n" char with Yaml backend
73
- %q({"a":"\n"}) => { "a" => "\n" },
74
- %q({"a":"\u000a"}) => { "a" => "\n" },
75
- %q({"a":"Line1\u000aLine2"}) => { "a" => "Line1\nLine2" },
76
- # prevent json unmarshalling
77
- '{"json_class":"TestJSONDecoding::Foo"}' => { "json_class" => "TestJSONDecoding::Foo" },
78
- # json "fragments" - these are invalid JSON, but ActionPack relies on this
79
- '"a string"' => "a string",
80
- "1.1" => 1.1,
81
- "1" => 1,
82
- "-1" => -1,
83
- "true" => true,
84
- "false" => false,
85
- "null" => nil
86
- }
87
-
88
- TESTS.each_with_index do |(json, expected), index|
89
- fail_message = "JSON decoding failed for #{json}"
90
-
91
- test "json decodes #{index}" do
92
- with_tz_default "Eastern Time (US & Canada)" do
93
- with_parse_json_times(true) do
94
- silence_warnings do
95
- if expected.nil?
96
- assert_nil ActiveSupport::JSON.decode(json), fail_message
97
- else
98
- assert_equal expected, ActiveSupport::JSON.decode(json), fail_message
99
- end
100
- end
101
- end
102
- end
103
- end
104
- end
105
-
106
- test "json decodes time json with time parsing disabled" do
107
- with_parse_json_times(false) do
108
- expected = { "a" => "2007-01-01 01:12:34 Z" }
109
- assert_equal expected, ActiveSupport::JSON.decode(%({"a": "2007-01-01 01:12:34 Z"}))
110
- end
111
- end
112
-
113
- def test_failed_json_decoding
114
- assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%(undefined)) }
115
- assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%({a: 1})) }
116
- assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%({: 1})) }
117
- assert_raise(ActiveSupport::JSON.parse_error) { ActiveSupport::JSON.decode(%()) }
118
- end
119
-
120
- def test_cannot_pass_unsupported_options
121
- assert_raise(ArgumentError) { ActiveSupport::JSON.decode("", create_additions: true) }
122
- end
123
-
124
- private
125
-
126
- def with_parse_json_times(value)
127
- old_value = ActiveSupport.parse_json_times
128
- ActiveSupport.parse_json_times = value
129
- yield
130
- ensure
131
- ActiveSupport.parse_json_times = old_value
132
- end
133
- end