oj 2.18.5 → 3.16.11

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 (166) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +1452 -0
  3. data/README.md +53 -221
  4. data/RELEASE_NOTES.md +61 -0
  5. data/ext/oj/buf.h +54 -72
  6. data/ext/oj/cache.c +329 -0
  7. data/ext/oj/cache.h +22 -0
  8. data/ext/oj/cache8.c +61 -63
  9. data/ext/oj/cache8.h +12 -39
  10. data/ext/oj/circarray.c +38 -67
  11. data/ext/oj/circarray.h +16 -42
  12. data/ext/oj/code.c +214 -0
  13. data/ext/oj/code.h +40 -0
  14. data/ext/oj/compat.c +194 -110
  15. data/ext/oj/custom.c +1074 -0
  16. data/ext/oj/debug.c +126 -0
  17. data/ext/oj/dump.c +1276 -2494
  18. data/ext/oj/dump.h +110 -0
  19. data/ext/oj/dump_compat.c +897 -0
  20. data/ext/oj/dump_leaf.c +162 -0
  21. data/ext/oj/dump_object.c +710 -0
  22. data/ext/oj/dump_strict.c +399 -0
  23. data/ext/oj/encode.h +7 -42
  24. data/ext/oj/encoder.c +43 -0
  25. data/ext/oj/err.c +28 -53
  26. data/ext/oj/err.h +49 -46
  27. data/ext/oj/extconf.rb +33 -32
  28. data/ext/oj/fast.c +1082 -1098
  29. data/ext/oj/intern.c +313 -0
  30. data/ext/oj/intern.h +22 -0
  31. data/ext/oj/mem.c +318 -0
  32. data/ext/oj/mem.h +53 -0
  33. data/ext/oj/mimic_json.c +919 -0
  34. data/ext/oj/object.c +545 -625
  35. data/ext/oj/odd.c +158 -168
  36. data/ext/oj/odd.h +32 -58
  37. data/ext/oj/oj.c +1727 -2080
  38. data/ext/oj/oj.h +334 -259
  39. data/ext/oj/parse.c +974 -753
  40. data/ext/oj/parse.h +97 -90
  41. data/ext/oj/parser.c +1600 -0
  42. data/ext/oj/parser.h +103 -0
  43. data/ext/oj/rails.c +1478 -0
  44. data/ext/oj/rails.h +18 -0
  45. data/ext/oj/reader.c +136 -163
  46. data/ext/oj/reader.h +76 -112
  47. data/ext/oj/resolve.c +45 -94
  48. data/ext/oj/resolve.h +7 -34
  49. data/ext/oj/rxclass.c +144 -0
  50. data/ext/oj/rxclass.h +26 -0
  51. data/ext/oj/saj.c +445 -511
  52. data/ext/oj/saj2.c +584 -0
  53. data/ext/oj/saj2.h +23 -0
  54. data/ext/oj/scp.c +82 -143
  55. data/ext/oj/simd.h +10 -0
  56. data/ext/oj/sparse.c +749 -644
  57. data/ext/oj/stream_writer.c +329 -0
  58. data/ext/oj/strict.c +114 -112
  59. data/ext/oj/string_writer.c +517 -0
  60. data/ext/oj/trace.c +72 -0
  61. data/ext/oj/trace.h +55 -0
  62. data/ext/oj/usual.c +1218 -0
  63. data/ext/oj/usual.h +69 -0
  64. data/ext/oj/util.c +136 -0
  65. data/ext/oj/util.h +20 -0
  66. data/ext/oj/val_stack.c +75 -72
  67. data/ext/oj/val_stack.h +94 -127
  68. data/ext/oj/validate.c +46 -0
  69. data/ext/oj/wab.c +586 -0
  70. data/lib/oj/active_support_helper.rb +1 -3
  71. data/lib/oj/bag.rb +8 -1
  72. data/lib/oj/easy_hash.rb +21 -13
  73. data/lib/oj/error.rb +10 -12
  74. data/lib/oj/json.rb +188 -0
  75. data/lib/oj/mimic.rb +165 -26
  76. data/lib/oj/saj.rb +20 -6
  77. data/lib/oj/schandler.rb +5 -4
  78. data/lib/oj/state.rb +135 -0
  79. data/lib/oj/version.rb +2 -3
  80. data/lib/oj.rb +3 -31
  81. data/pages/Advanced.md +22 -0
  82. data/pages/Compatibility.md +25 -0
  83. data/pages/Custom.md +23 -0
  84. data/pages/Encoding.md +65 -0
  85. data/pages/InstallOptions.md +20 -0
  86. data/pages/JsonGem.md +94 -0
  87. data/pages/Modes.md +161 -0
  88. data/pages/Options.md +337 -0
  89. data/pages/Parser.md +309 -0
  90. data/pages/Rails.md +167 -0
  91. data/pages/Security.md +20 -0
  92. data/pages/WAB.md +13 -0
  93. metadata +126 -163
  94. data/ext/oj/hash.c +0 -163
  95. data/ext/oj/hash.h +0 -46
  96. data/ext/oj/hash_test.c +0 -512
  97. data/test/_test_active.rb +0 -76
  98. data/test/_test_active_mimic.rb +0 -96
  99. data/test/_test_mimic_rails.rb +0 -126
  100. data/test/activesupport_datetime_test.rb +0 -23
  101. data/test/bug.rb +0 -51
  102. data/test/bug2.rb +0 -10
  103. data/test/bug3.rb +0 -46
  104. data/test/bug_fast.rb +0 -32
  105. data/test/bug_load.rb +0 -24
  106. data/test/crash.rb +0 -111
  107. data/test/curl/curl_oj.rb +0 -46
  108. data/test/curl/get_oj.rb +0 -24
  109. data/test/curl/just_curl.rb +0 -31
  110. data/test/curl/just_oj.rb +0 -51
  111. data/test/example.rb +0 -11
  112. data/test/files.rb +0 -29
  113. data/test/foo.rb +0 -24
  114. data/test/helper.rb +0 -27
  115. data/test/io.rb +0 -48
  116. data/test/isolated/shared.rb +0 -310
  117. data/test/isolated/test_mimic_after.rb +0 -13
  118. data/test/isolated/test_mimic_alone.rb +0 -12
  119. data/test/isolated/test_mimic_as_json.rb +0 -45
  120. data/test/isolated/test_mimic_before.rb +0 -13
  121. data/test/isolated/test_mimic_define.rb +0 -28
  122. data/test/isolated/test_mimic_rails_after.rb +0 -22
  123. data/test/isolated/test_mimic_rails_before.rb +0 -21
  124. data/test/isolated/test_mimic_rails_datetime.rb +0 -27
  125. data/test/isolated/test_mimic_redefine.rb +0 -15
  126. data/test/mod.rb +0 -16
  127. data/test/perf.rb +0 -107
  128. data/test/perf_compat.rb +0 -128
  129. data/test/perf_fast.rb +0 -164
  130. data/test/perf_file.rb +0 -64
  131. data/test/perf_object.rb +0 -138
  132. data/test/perf_saj.rb +0 -109
  133. data/test/perf_scp.rb +0 -151
  134. data/test/perf_simple.rb +0 -287
  135. data/test/perf_strict.rb +0 -128
  136. data/test/rails.rb +0 -50
  137. data/test/russian.rb +0 -18
  138. data/test/sample/change.rb +0 -14
  139. data/test/sample/dir.rb +0 -19
  140. data/test/sample/doc.rb +0 -36
  141. data/test/sample/file.rb +0 -48
  142. data/test/sample/group.rb +0 -16
  143. data/test/sample/hasprops.rb +0 -16
  144. data/test/sample/layer.rb +0 -12
  145. data/test/sample/line.rb +0 -20
  146. data/test/sample/oval.rb +0 -10
  147. data/test/sample/rect.rb +0 -10
  148. data/test/sample/shape.rb +0 -35
  149. data/test/sample/text.rb +0 -20
  150. data/test/sample.rb +0 -55
  151. data/test/sample_json.rb +0 -37
  152. data/test/struct.rb +0 -29
  153. data/test/test_compat.rb +0 -398
  154. data/test/test_debian.rb +0 -53
  155. data/test/test_fast.rb +0 -458
  156. data/test/test_file.rb +0 -245
  157. data/test/test_gc.rb +0 -49
  158. data/test/test_hash.rb +0 -29
  159. data/test/test_object.rb +0 -745
  160. data/test/test_saj.rb +0 -186
  161. data/test/test_scp.rb +0 -396
  162. data/test/test_serializer.rb +0 -59
  163. data/test/test_strict.rb +0 -254
  164. data/test/test_various.rb +0 -1383
  165. data/test/test_writer.rb +0 -308
  166. data/test/write_timebars.rb +0 -31
data/test/test_strict.rb DELETED
@@ -1,254 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- $: << File.dirname(__FILE__)
5
-
6
- require 'helper'
7
-
8
- class StrictJuice < Minitest::Test
9
-
10
- def setup
11
- @default_options = Oj.default_options
12
- end
13
-
14
- def teardown
15
- Oj.default_options = @default_options
16
- end
17
-
18
- def test_nil
19
- dump_and_load(nil, false)
20
- end
21
-
22
- def test_true
23
- dump_and_load(true, false)
24
- end
25
-
26
- def test_false
27
- dump_and_load(false, false)
28
- end
29
-
30
- def test_fixnum
31
- dump_and_load(0, false)
32
- dump_and_load(12345, false)
33
- dump_and_load(-54321, false)
34
- dump_and_load(1, false)
35
- end
36
-
37
- def test_float
38
- dump_and_load(0.0, false)
39
- dump_and_load(12345.6789, false)
40
- dump_and_load(70.35, false)
41
- dump_and_load(-54321.012, false)
42
- dump_and_load(1.7775, false)
43
- dump_and_load(2.5024, false)
44
- dump_and_load(2.48e16, false)
45
- dump_and_load(2.48e100 * 1.0e10, false)
46
- dump_and_load(-2.48e100 * 1.0e10, false)
47
- end
48
-
49
- def test_string
50
- dump_and_load('', false)
51
- dump_and_load('abc', false)
52
- dump_and_load("abc\ndef", false)
53
- dump_and_load("a\u0041", false)
54
- end
55
-
56
- def test_encode
57
- opts = Oj.default_options
58
- Oj.default_options = { :ascii_only => false }
59
- unless 'jruby' == $ruby
60
- dump_and_load("ぴーたー", false)
61
- end
62
- Oj.default_options = { :ascii_only => true }
63
- json = Oj.dump("ぴーたー")
64
- assert_equal(%{"\\u3074\\u30fc\\u305f\\u30fc"}, json)
65
- unless 'jruby' == $ruby
66
- dump_and_load("ぴーたー", false)
67
- end
68
- Oj.default_options = opts
69
- end
70
-
71
- def test_unicode
72
- # hits the 3 normal ranges and one extended surrogate pair
73
- json = %{"\\u019f\\u05e9\\u3074\\ud834\\udd1e"}
74
- obj = Oj.load(json)
75
- json2 = Oj.dump(obj, :ascii_only => true)
76
- assert_equal(json, json2)
77
- end
78
-
79
- def test_unicode_long
80
- # tests buffer overflow
81
- json = %{"\\u019f\\u05e9\\u3074\\ud834\\udd1e #{'x' * 2000}"}
82
- obj = Oj.load(json)
83
- json2 = Oj.dump(obj, :ascii_only => true)
84
- assert_equal(json, json2)
85
- end
86
-
87
- def test_array
88
- dump_and_load([], false)
89
- dump_and_load([true, false], false)
90
- dump_and_load(['a', 1, nil], false)
91
- dump_and_load([[nil]], false)
92
- dump_and_load([[nil], 58], false)
93
- end
94
-
95
- def test_array_deep
96
- dump_and_load([1,[2,[3,[4,[5,[6,[7,[8,[9,[10,[11,[12,[13,[14,[15,[16,[17,[18,[19,[20]]]]]]]]]]]]]]]]]]]], false)
97
- end
98
-
99
- # Hash
100
- def test_hash
101
- dump_and_load({}, false)
102
- dump_and_load({ 'true' => true, 'false' => false}, false)
103
- dump_and_load({ 'true' => true, 'array' => [], 'hash' => { }}, false)
104
- end
105
-
106
- def test_hash_deep
107
- dump_and_load({'1' => {
108
- '2' => {
109
- '3' => {
110
- '4' => {
111
- '5' => {
112
- '6' => {
113
- '7' => {
114
- '8' => {
115
- '9' => {
116
- '10' => {
117
- '11' => {
118
- '12' => {
119
- '13' => {
120
- '14' => {
121
- '15' => {
122
- '16' => {
123
- '17' => {
124
- '18' => {
125
- '19' => {
126
- '20' => {}}}}}}}}}}}}}}}}}}}}}, false)
127
- end
128
-
129
- def test_hash_escaped_key
130
- json = %{{"a\nb":true,"c\td":false}}
131
- obj = Oj.strict_load(json)
132
- assert_equal({"a\nb" => true, "c\td" => false}, obj)
133
- end
134
-
135
- def test_bignum_object
136
- dump_and_load(7 ** 55, false)
137
- end
138
-
139
- # BigDecimal
140
- def test_bigdecimal_strict
141
- dump_and_load(BigDecimal.new('3.14159265358979323846'), false)
142
- end
143
-
144
- def test_bigdecimal_load
145
- orig = BigDecimal.new('80.51')
146
- json = Oj.dump(orig, :mode => :compat, :bigdecimal_as_decimal => true)
147
- bg = Oj.load(json, :mode => :compat, :bigdecimal_load => true)
148
- assert_equal(BigDecimal, bg.class)
149
- assert_equal(orig, bg)
150
- end
151
-
152
- # Stream IO
153
- def test_io_string
154
- json = %{{
155
- "x":true,
156
- "y":58,
157
- "z": [1,2,3]
158
- }
159
- }
160
- input = StringIO.new(json)
161
- obj = Oj.strict_load(input)
162
- assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
163
- end
164
-
165
- def test_io_file
166
- filename = File.join(File.dirname(__FILE__), 'open_file_test.json')
167
- File.open(filename, 'w') { |f| f.write(%{{
168
- "x":true,
169
- "y":58,
170
- "z": [1,2,3]
171
- }
172
- }) }
173
- f = File.new(filename)
174
- obj = Oj.strict_load(f)
175
- f.close()
176
- assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
177
- end
178
-
179
- # symbol_keys option
180
- def test_symbol_keys
181
- json = %{{
182
- "x":true,
183
- "y":58,
184
- "z": [1,2,3]
185
- }
186
- }
187
- obj = Oj.strict_load(json, :symbol_keys => true)
188
- assert_equal({ :x => true, :y => 58, :z => [1, 2, 3]}, obj)
189
- end
190
-
191
- def test_symbol_keys_safe
192
- json = %{{
193
- "x":true,
194
- "y":58,
195
- "z": [1,2,3]
196
- }
197
- }
198
- obj = Oj.safe_load(json)
199
- assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
200
- end
201
-
202
- # comments
203
- def test_comment_slash
204
- json = %{{
205
- "x":true,//three
206
- "y":58,
207
- "z": [1,2,
208
- 3 // six
209
- ]}
210
- }
211
- obj = Oj.strict_load(json)
212
- assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
213
- end
214
-
215
- def test_comment_c
216
- json = %{{
217
- "x"/*one*/:/*two*/true,
218
- "y":58,
219
- "z": [1,2,3]}
220
- }
221
- obj = Oj.strict_load(json)
222
- assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
223
- end
224
-
225
- def test_comment
226
- json = %{{
227
- "x"/*one*/:/*two*/true,//three
228
- "y":58/*four*/,
229
- "z": [1,2/*five*/,
230
- 3 // six
231
- ]
232
- }
233
- }
234
- obj = Oj.strict_load(json)
235
- assert_equal({ 'x' => true, 'y' => 58, 'z' => [1, 2, 3]}, obj)
236
- end
237
-
238
- def test_double
239
- json = %{{ "x": 1}{ "y": 2}}
240
- results = []
241
- Oj.load(json, :mode => :strict) { |x| results << x }
242
-
243
- assert_equal([{ 'x' => 1 }, { 'y' => 2 }], results)
244
- end
245
-
246
- def dump_and_load(obj, trace=false)
247
- json = Oj.dump(obj, :indent => 2)
248
- puts json if trace
249
- loaded = Oj.strict_load(json);
250
- assert_equal(obj, loaded)
251
- loaded
252
- end
253
-
254
- end