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_writer.rb DELETED
@@ -1,308 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- $: << File.dirname(__FILE__)
5
-
6
- require 'helper'
7
-
8
- class OjWriter < 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_string_writer_empty_array
19
- w = Oj::StringWriter.new(:indent => 0)
20
- w.push_array()
21
- w.pop()
22
- assert_equal("[]\n", w.to_s)
23
- end
24
-
25
- def test_string_writer_nested_array
26
- w = Oj::StringWriter.new(:indent => 0)
27
- w.push_array()
28
- w.push_array()
29
- w.pop()
30
- w.push_array()
31
- w.push_array()
32
- w.pop()
33
- w.pop()
34
- w.push_array()
35
- w.pop()
36
- w.pop()
37
- assert_equal("[[],[[]],[]]\n", w.to_s)
38
- end
39
-
40
- def test_string_writer_empty_object
41
- w = Oj::StringWriter.new(:indent => 0)
42
- w.push_object()
43
- w.pop()
44
- assert_equal("{}\n", w.to_s)
45
- end
46
-
47
- def test_string_writer_push_null_value_with_key
48
- w = Oj::StringWriter.new(:indent => 0, :mode => :compat)
49
- w.push_object()
50
- w.push_value(nil, 'nothing')
51
- w.pop()
52
- assert_equal(%|{"nothing":null}\n|, w.to_s)
53
- end
54
-
55
- def test_string_writer_nested_object
56
- w = Oj::StringWriter.new(:indent => 0)
57
- w.push_object()
58
- w.push_object("a1")
59
- w.pop()
60
- w.push_object("a2")
61
- w.push_object("b")
62
- w.pop()
63
- w.pop()
64
- w.push_object("a3")
65
- w.pop()
66
- w.pop()
67
- assert_equal(%|{"a1":{},"a2":{"b":{}},"a3":{}}\n|, w.to_s)
68
- end
69
-
70
- def test_string_writer_nested_key
71
- w = Oj::StringWriter.new(:indent => 0)
72
- w.push_object()
73
- w.push_key('a1')
74
- w.push_object()
75
- w.pop()
76
- w.push_key('a2')
77
- w.push_object('x')
78
- w.push_object('b')
79
- w.pop()
80
- w.pop()
81
- w.push_key('a3')
82
- w.push_object()
83
- w.push_key('a4')
84
- w.push_value(37)
85
- w.pop()
86
- w.pop()
87
- assert_equal(%|{"a1":{},"a2":{"b":{}},"a3":{"a4":37}}\n|, w.to_s)
88
- end
89
-
90
- def test_string_writer_value_array
91
- w = Oj::StringWriter.new(:indent => 2)
92
- w.push_array()
93
- w.push_value(7)
94
- w.push_value(7.3)
95
- w.push_value(true)
96
- w.push_value(nil)
97
- w.push_value("a string")
98
- w.push_value({'a' => 65})
99
- w.push_value([1,2])
100
- w.pop()
101
- assert_equal(%|[
102
- 7,
103
- 7.3,
104
- true,
105
- null,
106
- "a string",
107
- {
108
- "a":65
109
- },
110
- [
111
- 1,
112
- 2
113
- ]
114
- ]
115
- |, w.to_s)
116
- end
117
-
118
- def test_string_writer_block
119
- w = Oj::StringWriter.new(:indent => 0)
120
- w.push_object() {
121
- w.push_object("a1") {
122
- w.push_value(7, 'a7')
123
- }
124
- w.push_array("a2") {
125
- w.push_value('x')
126
- w.push_value(3)
127
- }
128
- }
129
- assert_equal(%|{"a1":{"a7":7},"a2":["x",3]}\n|, w.to_s)
130
- end
131
-
132
- def test_string_writer_json
133
- w = Oj::StringWriter.new(:indent => 0)
134
- w.push_array()
135
- w.push_json('7')
136
- w.push_json('true')
137
- w.push_json(%|"a string"|)
138
- w.push_object()
139
- w.push_json('{"a":65}', 'x')
140
- w.pop()
141
- w.pop()
142
- assert_equal(%|[7,true,"a string",{"x":{"a":65}}]\n|, w.to_s)
143
- end
144
-
145
- def test_string_writer_pop_excess
146
- w = Oj::StringWriter.new(:indent => 0)
147
- begin
148
- w.push_object() {
149
- w.push_key('key')
150
- }
151
- rescue Exception
152
- assert(true)
153
- return
154
- end
155
- assert(false, "*** expected an exception")
156
- end
157
-
158
- def test_string_writer_array_key
159
- w = Oj::StringWriter.new(:indent => 0)
160
- begin
161
- w.push_array() {
162
- w.push_key('key')
163
- w.push_value(7)
164
- }
165
- rescue Exception
166
- assert(true)
167
- return
168
- end
169
- assert(false, "*** expected an exception")
170
- end
171
-
172
- def test_string_writer_pop_with_key
173
- w = Oj::StringWriter.new(:indent => 0)
174
- begin
175
- w.pop()
176
- rescue Exception
177
- assert(true)
178
- return
179
- end
180
- assert(false, "*** expected an exception")
181
- end
182
-
183
- def test_string_writer_obj_no_key
184
- w = Oj::StringWriter.new(:indent => 0)
185
- w.push_object()
186
- begin
187
- w.push_value(59)
188
- rescue Exception
189
- assert(true)
190
- return
191
- end
192
- assert(false, "*** expected an exception")
193
- end
194
-
195
- def test_string_writer_deep
196
- cnt = 1000
197
- w = Oj::StringWriter.new(:indent => 0)
198
- cnt.times do
199
- w.push_array()
200
- end
201
- cnt.times do
202
- w.pop()
203
- end
204
- # if no exception then passed
205
- assert(true)
206
- end
207
-
208
- def test_string_writer_pop_all
209
- w = Oj::StringWriter.new(:indent => 0)
210
- w.push_object()
211
- w.push_object("a1")
212
- w.pop()
213
- w.push_array("a2")
214
- w.push_value(3)
215
- w.push_array()
216
- w.pop_all()
217
- assert_equal(%|{"a1":{},"a2":[3,[]]}\n|, w.to_s)
218
- end
219
-
220
- def test_string_writer_reset
221
- w = Oj::StringWriter.new(:indent => 0)
222
- w.push_array()
223
- w.pop()
224
- w.reset()
225
- assert_equal('', w.to_s)
226
- end
227
-
228
- # Stream Writer
229
-
230
- def test_stream_writer_empty_array
231
- output = StringIO.open("", "w+")
232
- w = Oj::StreamWriter.new(output, :indent => 0)
233
- w.push_array()
234
- w.pop()
235
- assert_equal("[]\n", output.string())
236
- end
237
-
238
- def test_stream_writer_mixed_stringio
239
- output = StringIO.open("", "w+")
240
- w = Oj::StreamWriter.new(output, :indent => 0)
241
- w.push_object()
242
- w.push_object("a1")
243
- w.pop()
244
- w.push_object("a2")
245
- w.push_array("b")
246
- w.push_value(7)
247
- w.push_value(true)
248
- w.push_value("string")
249
- w.pop()
250
- w.pop()
251
- w.push_object("a3")
252
- w.pop()
253
- w.pop()
254
- assert_equal(%|{"a1":{},"a2":{"b":[7,true,"string"]},"a3":{}}\n|, output.string())
255
- end
256
-
257
- def test_stream_writer_mixed_file
258
- filename = File.join(File.dirname(__FILE__), 'open_file_test.json')
259
- File.open(filename, "w") do |f|
260
- w = Oj::StreamWriter.new(f, :indent => 0)
261
- w.push_object()
262
- w.push_object("a1")
263
- w.pop()
264
- w.push_object("a2")
265
- w.push_array("b")
266
- w.push_value(7)
267
- w.push_value(true)
268
- w.push_value("string")
269
- w.pop()
270
- w.pop()
271
- w.push_object("a3")
272
- w.pop()
273
- w.pop()
274
- end
275
- content = File.read(filename)
276
- assert_equal(%|{"a1":{},"a2":{"b":[7,true,"string"]},"a3":{}}\n|, content)
277
- end
278
-
279
- def test_stream_writer_nested_key_object
280
- output = StringIO.open("", "w+")
281
- w = Oj::StreamWriter.new(output, :indent => 0)
282
- w.push_object()
283
- w.push_key('a1')
284
- w.push_object()
285
- w.pop()
286
- w.push_key('a2')
287
- w.push_object('x')
288
- w.push_object('b')
289
- w.pop()
290
- w.pop()
291
- w.push_key('a3')
292
- w.push_object()
293
- w.push_key('a4')
294
- w.push_value(37)
295
- w.pop()
296
- w.pop()
297
- assert_equal(%|{"a1":{},"a2":{"b":{}},"a3":{"a4":37}}\n|, output.string())
298
- end
299
-
300
- def test_stream_writer_push_null_value_with_key
301
- output = StringIO.open("", "w+")
302
- w = Oj::StreamWriter.new(output, :indent => 0)
303
- w.push_object()
304
- w.push_value(nil, 'nothing')
305
- w.pop()
306
- assert_equal(%|{"nothing":null}\n|, output.string())
307
- end
308
- end # OjWriter
@@ -1,31 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
-
4
- %w(lib ext).each do |dir|
5
- $LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
6
- end
7
-
8
- require 'stringio'
9
- require 'oj'
10
-
11
-
12
- filename = File.join(File.dirname(__FILE__), 'day.json')
13
- File.open(filename, "w") do |f|
14
- w = Oj::StreamWriter.new(f, :indent => -1)
15
- 390.times do |i|
16
- w.push_object()
17
- w.push_value(12, 'msgType')
18
- w.push_value(1, 'version')
19
- w.push_value(1_400_074_200 + i * 60, 'bar')
20
- w.push_value('TBC', 'source')
21
- w.push_array('timebars')
22
- w.push_object()
23
- w.push_value('aapl_24', 'asset')
24
- w.push_value(91.87, 'close')
25
- w.pop()
26
- w.pop()
27
- w.pop()
28
- end
29
- f.write("\n")
30
- end
31
-