oj 3.16.9 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +11 -0
- data/ext/oj/custom.c +10 -9
- data/ext/oj/dump.c +319 -20
- data/ext/oj/dump.h +7 -2
- data/ext/oj/dump_compat.c +9 -8
- data/ext/oj/dump_leaf.c +1 -1
- data/ext/oj/dump_object.c +27 -17
- data/ext/oj/dump_strict.c +7 -6
- data/ext/oj/fast.c +4 -7
- data/ext/oj/mimic_json.c +3 -6
- data/ext/oj/object.c +8 -8
- data/ext/oj/oj.c +12 -9
- data/ext/oj/parse.c +15 -5
- data/ext/oj/parser.c +1 -1
- data/ext/oj/parser.h +2 -0
- data/ext/oj/rails.c +20 -19
- data/ext/oj/saj.c +3 -6
- data/ext/oj/scp.c +3 -6
- data/ext/oj/simd.h +10 -0
- data/ext/oj/stream_writer.c +1 -7
- data/ext/oj/strict.c +2 -4
- data/ext/oj/string_writer.c +1 -3
- data/ext/oj/wab.c +4 -3
- data/lib/oj/version.rb +1 -1
- data/pages/Encoding.md +1 -1
- metadata +4 -98
- data/test/_test_active.rb +0 -75
- data/test/_test_active_mimic.rb +0 -95
- data/test/_test_mimic_rails.rb +0 -123
- data/test/activerecord/result_test.rb +0 -31
- data/test/activesupport6/abstract_unit.rb +0 -44
- data/test/activesupport6/decoding_test.rb +0 -133
- data/test/activesupport6/encoding_test.rb +0 -542
- data/test/activesupport6/encoding_test_cases.rb +0 -98
- data/test/activesupport6/test_common.rb +0 -17
- data/test/activesupport6/test_helper.rb +0 -163
- data/test/activesupport6/time_zone_test_helpers.rb +0 -39
- data/test/activesupport7/abstract_unit.rb +0 -52
- data/test/activesupport7/decoding_test.rb +0 -125
- data/test/activesupport7/encoding_test.rb +0 -536
- data/test/activesupport7/encoding_test_cases.rb +0 -104
- data/test/activesupport7/time_zone_test_helpers.rb +0 -47
- data/test/files.rb +0 -29
- data/test/foo.rb +0 -26
- data/test/helper.rb +0 -39
- data/test/isolated/shared.rb +0 -309
- data/test/isolated/test_mimic_after.rb +0 -13
- data/test/isolated/test_mimic_alone.rb +0 -12
- data/test/isolated/test_mimic_as_json.rb +0 -45
- data/test/isolated/test_mimic_before.rb +0 -13
- data/test/isolated/test_mimic_define.rb +0 -28
- data/test/isolated/test_mimic_rails_after.rb +0 -22
- data/test/isolated/test_mimic_rails_before.rb +0 -21
- data/test/isolated/test_mimic_redefine.rb +0 -15
- data/test/json_gem/json_addition_test.rb +0 -216
- data/test/json_gem/json_common_interface_test.rb +0 -155
- data/test/json_gem/json_encoding_test.rb +0 -107
- data/test/json_gem/json_ext_parser_test.rb +0 -21
- data/test/json_gem/json_fixtures_test.rb +0 -36
- data/test/json_gem/json_generator_test.rb +0 -413
- data/test/json_gem/json_generic_object_test.rb +0 -90
- data/test/json_gem/json_parser_test.rb +0 -477
- data/test/json_gem/json_string_matching_test.rb +0 -42
- data/test/json_gem/test_helper.rb +0 -30
- data/test/mem.rb +0 -34
- data/test/perf.rb +0 -102
- data/test/perf_compat.rb +0 -128
- data/test/perf_dump.rb +0 -50
- data/test/perf_fast.rb +0 -162
- data/test/perf_file.rb +0 -62
- data/test/perf_object.rb +0 -134
- data/test/perf_once.rb +0 -59
- data/test/perf_parser.rb +0 -183
- data/test/perf_saj.rb +0 -101
- data/test/perf_scp.rb +0 -140
- data/test/perf_simple.rb +0 -289
- data/test/perf_strict.rb +0 -137
- data/test/perf_wab.rb +0 -129
- data/test/prec.rb +0 -23
- data/test/sample/change.rb +0 -13
- data/test/sample/dir.rb +0 -18
- data/test/sample/doc.rb +0 -35
- data/test/sample/file.rb +0 -47
- data/test/sample/group.rb +0 -15
- data/test/sample/hasprops.rb +0 -15
- data/test/sample/layer.rb +0 -11
- data/test/sample/line.rb +0 -20
- data/test/sample/oval.rb +0 -10
- data/test/sample/rect.rb +0 -9
- data/test/sample/shape.rb +0 -34
- data/test/sample/text.rb +0 -19
- data/test/sample.rb +0 -54
- data/test/sample_json.rb +0 -37
- data/test/test_compat.rb +0 -567
- data/test/test_custom.rb +0 -555
- data/test/test_debian.rb +0 -50
- data/test/test_fast.rb +0 -526
- data/test/test_file.rb +0 -250
- data/test/test_gc.rb +0 -60
- data/test/test_generate.rb +0 -21
- data/test/test_hash.rb +0 -39
- data/test/test_integer_range.rb +0 -72
- data/test/test_null.rb +0 -376
- data/test/test_object.rb +0 -1030
- data/test/test_parser.rb +0 -11
- data/test/test_parser_debug.rb +0 -27
- data/test/test_parser_saj.rb +0 -337
- data/test/test_parser_usual.rb +0 -255
- data/test/test_rails.rb +0 -35
- data/test/test_saj.rb +0 -188
- data/test/test_scp.rb +0 -431
- data/test/test_strict.rb +0 -441
- data/test/test_various.rb +0 -801
- data/test/test_wab.rb +0 -311
- data/test/test_writer.rb +0 -396
- data/test/tests.rb +0 -33
- data/test/tests_mimic.rb +0 -23
- data/test/tests_mimic_addition.rb +0 -16
data/ext/oj/saj.c
CHANGED
@@ -94,8 +94,7 @@ inline static void call_add_value(VALUE handler, VALUE value, const char *key) {
|
|
94
94
|
if (0 == key) {
|
95
95
|
k = Qnil;
|
96
96
|
} else {
|
97
|
-
k =
|
98
|
-
k = oj_encode(k);
|
97
|
+
k = rb_utf8_str_new_cstr(key);
|
99
98
|
}
|
100
99
|
rb_funcall(handler, oj_add_value_id, 2, value, k);
|
101
100
|
}
|
@@ -106,8 +105,7 @@ inline static void call_no_value(VALUE handler, ID method, const char *key) {
|
|
106
105
|
if (0 == key) {
|
107
106
|
k = Qnil;
|
108
107
|
} else {
|
109
|
-
k =
|
110
|
-
k = oj_encode(k);
|
108
|
+
k = rb_utf8_str_new_cstr(key);
|
111
109
|
}
|
112
110
|
rb_funcall(handler, method, 1, k);
|
113
111
|
}
|
@@ -257,9 +255,8 @@ static void read_str(ParseInfo pi, const char *key) {
|
|
257
255
|
|
258
256
|
text = read_quoted_value(pi);
|
259
257
|
if (pi->has_add_value) {
|
260
|
-
VALUE s =
|
258
|
+
VALUE s = rb_utf8_str_new_cstr(text);
|
261
259
|
|
262
|
-
s = oj_encode(s);
|
263
260
|
call_add_value(pi->handler, s, key);
|
264
261
|
}
|
265
262
|
}
|
data/ext/oj/scp.c
CHANGED
@@ -56,9 +56,8 @@ static void add_value(ParseInfo pi, VALUE val) {
|
|
56
56
|
}
|
57
57
|
|
58
58
|
static void add_cstr(ParseInfo pi, const char *str, size_t len, const char *orig) {
|
59
|
-
volatile VALUE rstr =
|
59
|
+
volatile VALUE rstr = rb_utf8_str_new(str, len);
|
60
60
|
|
61
|
-
rstr = oj_encode(rstr);
|
62
61
|
rb_funcall(pi->handler, oj_add_value_id, 1, rstr);
|
63
62
|
}
|
64
63
|
|
@@ -87,9 +86,8 @@ static VALUE hash_key(ParseInfo pi, const char *key, size_t klen) {
|
|
87
86
|
}
|
88
87
|
|
89
88
|
static void hash_set_cstr(ParseInfo pi, Val kval, const char *str, size_t len, const char *orig) {
|
90
|
-
volatile VALUE rstr =
|
89
|
+
volatile VALUE rstr = rb_utf8_str_new(str, len);
|
91
90
|
|
92
|
-
rstr = oj_encode(rstr);
|
93
91
|
rb_funcall(pi->handler, oj_hash_set_id, 3, stack_peek(&pi->stack)->val, oj_calc_hash_key(pi, kval), rstr);
|
94
92
|
}
|
95
93
|
|
@@ -107,9 +105,8 @@ static void hash_set_value(ParseInfo pi, Val kval, VALUE value) {
|
|
107
105
|
}
|
108
106
|
|
109
107
|
static void array_append_cstr(ParseInfo pi, const char *str, size_t len, const char *orig) {
|
110
|
-
volatile VALUE rstr =
|
108
|
+
volatile VALUE rstr = rb_utf8_str_new(str, len);
|
111
109
|
|
112
|
-
rstr = oj_encode(rstr);
|
113
110
|
rb_funcall(pi->handler, oj_array_append_id, 2, stack_peek(&pi->stack)->val, rstr);
|
114
111
|
}
|
115
112
|
|
data/ext/oj/simd.h
ADDED
data/ext/oj/stream_writer.c
CHANGED
@@ -44,13 +44,7 @@ static void stream_writer_write(StreamWriter sw) {
|
|
44
44
|
case STRING_IO:
|
45
45
|
case STREAM_IO:
|
46
46
|
case FILE_IO: {
|
47
|
-
volatile VALUE rs =
|
48
|
-
|
49
|
-
// Oddly enough, when pushing ASCII characters with UTF-8 encoding or
|
50
|
-
// even ASCII-8BIT does not change the output encoding. Pushing any
|
51
|
-
// non-ASCII no matter what the encoding changes the output encoding
|
52
|
-
// to ASCII-8BIT if it the string is not forced to UTF-8 here.
|
53
|
-
rs = oj_encode(rs);
|
47
|
+
volatile VALUE rs = rb_utf8_str_new(sw->sw.out.buf, size);
|
54
48
|
rb_funcall(sw->stream, oj_write_id, 1, rs);
|
55
49
|
break;
|
56
50
|
}
|
data/ext/oj/strict.c
CHANGED
@@ -19,8 +19,7 @@ VALUE oj_cstr_to_value(const char *str, size_t len, size_t cache_str) {
|
|
19
19
|
if (len < cache_str) {
|
20
20
|
rstr = oj_str_intern(str, len);
|
21
21
|
} else {
|
22
|
-
rstr =
|
23
|
-
rstr = oj_encode(rstr);
|
22
|
+
rstr = rb_utf8_str_new(str, len);
|
24
23
|
}
|
25
24
|
return rstr;
|
26
25
|
}
|
@@ -35,8 +34,7 @@ VALUE oj_calc_hash_key(ParseInfo pi, Val parent) {
|
|
35
34
|
if (Yes == pi->options.sym_key) {
|
36
35
|
rkey = ID2SYM(rb_intern3(parent->key, parent->klen, oj_utf8_encoding));
|
37
36
|
} else {
|
38
|
-
rkey =
|
39
|
-
rkey = oj_encode(rkey);
|
37
|
+
rkey = rb_utf8_str_new(parent->key, parent->klen);
|
40
38
|
OBJ_FREEZE(rkey); // frozen when used as a Hash key anyway
|
41
39
|
}
|
42
40
|
return rkey;
|
data/ext/oj/string_writer.c
CHANGED
@@ -469,9 +469,7 @@ static VALUE str_writer_reset(VALUE self) {
|
|
469
469
|
static VALUE str_writer_to_s(VALUE self) {
|
470
470
|
StrWriter sw;
|
471
471
|
TypedData_Get_Struct(self, struct _strWriter, &oj_string_writer_type, sw);
|
472
|
-
|
473
|
-
|
474
|
-
return oj_encode(rstr);
|
472
|
+
return rb_utf8_str_new(sw->out.buf, sw->out.cur - sw->out.buf);
|
475
473
|
}
|
476
474
|
|
477
475
|
/* Document-method: as_json
|
data/ext/oj/wab.c
CHANGED
@@ -111,10 +111,11 @@ static void dump_float(VALUE obj, int depth, Out out, bool as_ok) {
|
|
111
111
|
|
112
112
|
static void dump_array(VALUE a, int depth, Out out, bool as_ok) {
|
113
113
|
size_t size;
|
114
|
-
|
114
|
+
size_t i;
|
115
|
+
size_t cnt;
|
115
116
|
int d2 = depth + 1;
|
116
117
|
|
117
|
-
cnt =
|
118
|
+
cnt = RARRAY_LEN(a);
|
118
119
|
*out->cur++ = '[';
|
119
120
|
size = 2;
|
120
121
|
assure_size(out, size);
|
@@ -226,7 +227,7 @@ static void dump_obj(VALUE obj, int depth, Out out, bool as_ok) {
|
|
226
227
|
} else if (oj_bigdecimal_class == clas) {
|
227
228
|
volatile VALUE rstr = oj_safe_string_convert(obj);
|
228
229
|
|
229
|
-
oj_dump_raw(RSTRING_PTR(rstr),
|
230
|
+
oj_dump_raw(RSTRING_PTR(rstr), RSTRING_LEN(rstr), out);
|
230
231
|
} else if (resolve_wab_uuid_class() == clas) {
|
231
232
|
oj_dump_str(oj_safe_string_convert(obj), depth, out, false);
|
232
233
|
} else if (resolve_uri_http_class() == clas) {
|
data/lib/oj/version.rb
CHANGED
data/pages/Encoding.md
CHANGED
@@ -15,7 +15,7 @@ in a JSON document. The formatting follows these rules.
|
|
15
15
|
* The `'^'` character denotes a special key value when in a JSON Object sequence.
|
16
16
|
|
17
17
|
* A Ruby String that starts with `':'`or the sequence `'^i'` or `'^r'` are
|
18
|
-
encoded by
|
18
|
+
encoded by escaping the first character so that it appears as `'\u005e'` or
|
19
19
|
`'\u003a'` instead of `':'` or `'^'`.
|
20
20
|
|
21
21
|
* A `"^c"` JSON Object key indicates the value should be converted to a Ruby
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.16.
|
4
|
+
version: 3.16.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Ohler
|
8
|
-
autorequire:
|
9
8
|
bindir: bin
|
10
9
|
cert_chain: []
|
11
|
-
date:
|
10
|
+
date: 2025-05-30 00:00:00.000000000 Z
|
12
11
|
dependencies:
|
13
12
|
- !ruby/object:Gem::Dependency
|
14
13
|
name: bigdecimal
|
@@ -163,6 +162,7 @@ files:
|
|
163
162
|
- ext/oj/saj2.c
|
164
163
|
- ext/oj/saj2.h
|
165
164
|
- ext/oj/scp.c
|
165
|
+
- ext/oj/simd.h
|
166
166
|
- ext/oj/sparse.c
|
167
167
|
- ext/oj/stream_writer.c
|
168
168
|
- ext/oj/strict.c
|
@@ -200,98 +200,6 @@ files:
|
|
200
200
|
- pages/Rails.md
|
201
201
|
- pages/Security.md
|
202
202
|
- pages/WAB.md
|
203
|
-
- test/_test_active.rb
|
204
|
-
- test/_test_active_mimic.rb
|
205
|
-
- test/_test_mimic_rails.rb
|
206
|
-
- test/activerecord/result_test.rb
|
207
|
-
- test/activesupport6/abstract_unit.rb
|
208
|
-
- test/activesupport6/decoding_test.rb
|
209
|
-
- test/activesupport6/encoding_test.rb
|
210
|
-
- test/activesupport6/encoding_test_cases.rb
|
211
|
-
- test/activesupport6/test_common.rb
|
212
|
-
- test/activesupport6/test_helper.rb
|
213
|
-
- test/activesupport6/time_zone_test_helpers.rb
|
214
|
-
- test/activesupport7/abstract_unit.rb
|
215
|
-
- test/activesupport7/decoding_test.rb
|
216
|
-
- test/activesupport7/encoding_test.rb
|
217
|
-
- test/activesupport7/encoding_test_cases.rb
|
218
|
-
- test/activesupport7/time_zone_test_helpers.rb
|
219
|
-
- test/files.rb
|
220
|
-
- test/foo.rb
|
221
|
-
- test/helper.rb
|
222
|
-
- test/isolated/shared.rb
|
223
|
-
- test/isolated/test_mimic_after.rb
|
224
|
-
- test/isolated/test_mimic_alone.rb
|
225
|
-
- test/isolated/test_mimic_as_json.rb
|
226
|
-
- test/isolated/test_mimic_before.rb
|
227
|
-
- test/isolated/test_mimic_define.rb
|
228
|
-
- test/isolated/test_mimic_rails_after.rb
|
229
|
-
- test/isolated/test_mimic_rails_before.rb
|
230
|
-
- test/isolated/test_mimic_redefine.rb
|
231
|
-
- test/json_gem/json_addition_test.rb
|
232
|
-
- test/json_gem/json_common_interface_test.rb
|
233
|
-
- test/json_gem/json_encoding_test.rb
|
234
|
-
- test/json_gem/json_ext_parser_test.rb
|
235
|
-
- test/json_gem/json_fixtures_test.rb
|
236
|
-
- test/json_gem/json_generator_test.rb
|
237
|
-
- test/json_gem/json_generic_object_test.rb
|
238
|
-
- test/json_gem/json_parser_test.rb
|
239
|
-
- test/json_gem/json_string_matching_test.rb
|
240
|
-
- test/json_gem/test_helper.rb
|
241
|
-
- test/mem.rb
|
242
|
-
- test/perf.rb
|
243
|
-
- test/perf_compat.rb
|
244
|
-
- test/perf_dump.rb
|
245
|
-
- test/perf_fast.rb
|
246
|
-
- test/perf_file.rb
|
247
|
-
- test/perf_object.rb
|
248
|
-
- test/perf_once.rb
|
249
|
-
- test/perf_parser.rb
|
250
|
-
- test/perf_saj.rb
|
251
|
-
- test/perf_scp.rb
|
252
|
-
- test/perf_simple.rb
|
253
|
-
- test/perf_strict.rb
|
254
|
-
- test/perf_wab.rb
|
255
|
-
- test/prec.rb
|
256
|
-
- test/sample.rb
|
257
|
-
- test/sample/change.rb
|
258
|
-
- test/sample/dir.rb
|
259
|
-
- test/sample/doc.rb
|
260
|
-
- test/sample/file.rb
|
261
|
-
- test/sample/group.rb
|
262
|
-
- test/sample/hasprops.rb
|
263
|
-
- test/sample/layer.rb
|
264
|
-
- test/sample/line.rb
|
265
|
-
- test/sample/oval.rb
|
266
|
-
- test/sample/rect.rb
|
267
|
-
- test/sample/shape.rb
|
268
|
-
- test/sample/text.rb
|
269
|
-
- test/sample_json.rb
|
270
|
-
- test/test_compat.rb
|
271
|
-
- test/test_custom.rb
|
272
|
-
- test/test_debian.rb
|
273
|
-
- test/test_fast.rb
|
274
|
-
- test/test_file.rb
|
275
|
-
- test/test_gc.rb
|
276
|
-
- test/test_generate.rb
|
277
|
-
- test/test_hash.rb
|
278
|
-
- test/test_integer_range.rb
|
279
|
-
- test/test_null.rb
|
280
|
-
- test/test_object.rb
|
281
|
-
- test/test_parser.rb
|
282
|
-
- test/test_parser_debug.rb
|
283
|
-
- test/test_parser_saj.rb
|
284
|
-
- test/test_parser_usual.rb
|
285
|
-
- test/test_rails.rb
|
286
|
-
- test/test_saj.rb
|
287
|
-
- test/test_scp.rb
|
288
|
-
- test/test_strict.rb
|
289
|
-
- test/test_various.rb
|
290
|
-
- test/test_wab.rb
|
291
|
-
- test/test_writer.rb
|
292
|
-
- test/tests.rb
|
293
|
-
- test/tests_mimic.rb
|
294
|
-
- test/tests_mimic_addition.rb
|
295
203
|
homepage: http://www.ohler.com/oj
|
296
204
|
licenses:
|
297
205
|
- MIT
|
@@ -303,7 +211,6 @@ metadata:
|
|
303
211
|
source_code_uri: https://github.com/ohler55/oj
|
304
212
|
wiki_uri: https://github.com/ohler55/oj/wiki
|
305
213
|
rubygems_mfa_required: 'true'
|
306
|
-
post_install_message:
|
307
214
|
rdoc_options:
|
308
215
|
- "--title"
|
309
216
|
- Oj
|
@@ -322,8 +229,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
322
229
|
- !ruby/object:Gem::Version
|
323
230
|
version: '0'
|
324
231
|
requirements: []
|
325
|
-
rubygems_version: 3.
|
326
|
-
signing_key:
|
232
|
+
rubygems_version: 3.6.2
|
327
233
|
specification_version: 4
|
328
234
|
summary: A fast JSON parser and serializer.
|
329
235
|
test_files: []
|
data/test/_test_active.rb
DELETED
@@ -1,75 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
$LOAD_PATH << __dir__
|
5
|
-
%w(lib ext test).each do |dir|
|
6
|
-
$LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
|
7
|
-
end
|
8
|
-
|
9
|
-
require 'minitest'
|
10
|
-
require 'minitest/autorun'
|
11
|
-
|
12
|
-
require 'sqlite3'
|
13
|
-
require 'active_record'
|
14
|
-
require 'oj'
|
15
|
-
|
16
|
-
# Oj.mimic_JSON()
|
17
|
-
Oj.default_options = {mode: :compat, indent: 2}
|
18
|
-
|
19
|
-
# ActiveRecord::Base.logger = Logger.new(STDERR)
|
20
|
-
|
21
|
-
ActiveRecord::Base.establish_connection(
|
22
|
-
:adapter => 'sqlite3',
|
23
|
-
:database => ':memory:'
|
24
|
-
)
|
25
|
-
|
26
|
-
ActiveRecord::Schema.define do
|
27
|
-
create_table :users do |table|
|
28
|
-
table.column :first_name, :string
|
29
|
-
table.column :last_name, :string
|
30
|
-
table.column :email, :string
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
class User < ActiveRecord::Base
|
35
|
-
end
|
36
|
-
|
37
|
-
class ActiveTest < Minitest::Test
|
38
|
-
|
39
|
-
def test_active
|
40
|
-
User.find_or_create_by(first_name: 'John', last_name: 'Smith', email: 'john@example.com')
|
41
|
-
User.find_or_create_by(first_name: 'Joan', last_name: 'Smith', email: 'joan@example.com')
|
42
|
-
|
43
|
-
# Single instance.
|
44
|
-
assert_equal(%|{
|
45
|
-
"id":1,
|
46
|
-
"first_name":"John",
|
47
|
-
"last_name":"Smith",
|
48
|
-
"email":"john@example.com"
|
49
|
-
}
|
50
|
-
|, Oj.dump(User.first))
|
51
|
-
|
52
|
-
# Array of instances.
|
53
|
-
assert_equal(%|[
|
54
|
-
{
|
55
|
-
"id":1,
|
56
|
-
"first_name":"John",
|
57
|
-
"last_name":"Smith",
|
58
|
-
"email":"john@example.com"
|
59
|
-
},
|
60
|
-
{
|
61
|
-
"id":2,
|
62
|
-
"first_name":"Joan",
|
63
|
-
"last_name":"Smith",
|
64
|
-
"email":"joan@example.com"
|
65
|
-
}
|
66
|
-
]
|
67
|
-
|, Oj.dump(User.all))
|
68
|
-
|
69
|
-
# Single instance as json. (not Oj)
|
70
|
-
assert_equal(%|{"id":1,"first_name":"John","last_name":"Smith","email":"john@example.com"}|, User.first.to_json)
|
71
|
-
|
72
|
-
# Array of instances as json. (not Oj)
|
73
|
-
assert_equal(%|[{"id":1,"first_name":"John","last_name":"Smith","email":"john@example.com"},{"id":2,"first_name":"Joan","last_name":"Smith","email":"joan@example.com"}]|, User.all.to_json)
|
74
|
-
end
|
75
|
-
end
|
data/test/_test_active_mimic.rb
DELETED
@@ -1,95 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
$LOAD_PATH << __dir__
|
5
|
-
%w(lib ext test).each do |dir|
|
6
|
-
$LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
|
7
|
-
end
|
8
|
-
|
9
|
-
require 'minitest'
|
10
|
-
require 'minitest/autorun'
|
11
|
-
|
12
|
-
require 'sqlite3'
|
13
|
-
require 'active_record'
|
14
|
-
require 'oj'
|
15
|
-
|
16
|
-
Oj.mimic_JSON()
|
17
|
-
Oj.default_options = {mode: :compat, indent: 2}
|
18
|
-
|
19
|
-
# ActiveRecord::Base.logger = Logger.new(STDERR)
|
20
|
-
|
21
|
-
ActiveRecord::Base.establish_connection(
|
22
|
-
:adapter => 'sqlite3',
|
23
|
-
:database => ':memory:'
|
24
|
-
)
|
25
|
-
|
26
|
-
ActiveRecord::Schema.define do
|
27
|
-
create_table :users do |table|
|
28
|
-
table.column :first_name, :string
|
29
|
-
table.column :last_name, :string
|
30
|
-
table.column :email, :string
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
class User < ActiveRecord::Base
|
35
|
-
end
|
36
|
-
|
37
|
-
class ActiveTest < Minitest::Test
|
38
|
-
|
39
|
-
def test_active
|
40
|
-
User.find_or_create_by(first_name: 'John', last_name: 'Smith', email: 'john@example.com')
|
41
|
-
User.find_or_create_by(first_name: 'Joan', last_name: 'Smith', email: 'joan@example.com')
|
42
|
-
|
43
|
-
# Single instance.
|
44
|
-
assert_equal(%|{
|
45
|
-
"id":1,
|
46
|
-
"first_name":"John",
|
47
|
-
"last_name":"Smith",
|
48
|
-
"email":"john@example.com"
|
49
|
-
}
|
50
|
-
|, Oj.dump(User.first))
|
51
|
-
|
52
|
-
# Array of instances.
|
53
|
-
assert_equal(%|[
|
54
|
-
{
|
55
|
-
"id":1,
|
56
|
-
"first_name":"John",
|
57
|
-
"last_name":"Smith",
|
58
|
-
"email":"john@example.com"
|
59
|
-
},
|
60
|
-
{
|
61
|
-
"id":2,
|
62
|
-
"first_name":"Joan",
|
63
|
-
"last_name":"Smith",
|
64
|
-
"email":"joan@example.com"
|
65
|
-
}
|
66
|
-
]
|
67
|
-
|, Oj.dump(User.all))
|
68
|
-
|
69
|
-
# Single instance as json. (not Oj)
|
70
|
-
assert_equal(%|{
|
71
|
-
"id":1,
|
72
|
-
"first_name":"John",
|
73
|
-
"last_name":"Smith",
|
74
|
-
"email":"john@example.com"
|
75
|
-
}
|
76
|
-
|, User.first.to_json)
|
77
|
-
|
78
|
-
# Array of instances as json. (not Oj)
|
79
|
-
assert_equal(%|[
|
80
|
-
{
|
81
|
-
"id":1,
|
82
|
-
"first_name":"John",
|
83
|
-
"last_name":"Smith",
|
84
|
-
"email":"john@example.com"
|
85
|
-
},
|
86
|
-
{
|
87
|
-
"id":2,
|
88
|
-
"first_name":"Joan",
|
89
|
-
"last_name":"Smith",
|
90
|
-
"email":"joan@example.com"
|
91
|
-
}
|
92
|
-
]
|
93
|
-
|, User.all.to_json)
|
94
|
-
end
|
95
|
-
end
|
data/test/_test_mimic_rails.rb
DELETED
@@ -1,123 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
# frozen_string_literal: true
|
3
|
-
|
4
|
-
$LOAD_PATH << __dir__
|
5
|
-
|
6
|
-
require 'helper'
|
7
|
-
# Oj.mimic_JSON
|
8
|
-
require 'rails/all'
|
9
|
-
|
10
|
-
require 'active_model'
|
11
|
-
require 'active_model_serializers'
|
12
|
-
require 'active_support/json'
|
13
|
-
require 'active_support/time'
|
14
|
-
require 'active_support/all'
|
15
|
-
|
16
|
-
require 'oj/active_support_helper'
|
17
|
-
|
18
|
-
Oj.mimic_JSON
|
19
|
-
|
20
|
-
class Category
|
21
|
-
include ActiveModel::Model
|
22
|
-
include ActiveModel::SerializerSupport
|
23
|
-
|
24
|
-
attr_accessor :id, :name
|
25
|
-
|
26
|
-
def initialize(id, name)
|
27
|
-
@id = id
|
28
|
-
@name = name
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class CategorySerializer < ActiveModel::Serializer
|
33
|
-
attributes :id, :name
|
34
|
-
end
|
35
|
-
|
36
|
-
class MimicRails < Minitest::Test
|
37
|
-
|
38
|
-
def test_mimic_exception
|
39
|
-
ActiveSupport::JSON.decode('{')
|
40
|
-
puts 'Failed'
|
41
|
-
rescue ActiveSupport::JSON.parse_error
|
42
|
-
assert(true)
|
43
|
-
rescue Exception
|
44
|
-
assert(false, 'Expected a JSON::ParserError')
|
45
|
-
end
|
46
|
-
|
47
|
-
def test_dump_string
|
48
|
-
Oj.default_options= {:indent => 2}
|
49
|
-
json = ActiveSupport::JSON.encode([1, true, nil])
|
50
|
-
assert_equal(%{[
|
51
|
-
1,
|
52
|
-
true,
|
53
|
-
null
|
54
|
-
]
|
55
|
-
}, json)
|
56
|
-
end
|
57
|
-
|
58
|
-
def test_dump_rational
|
59
|
-
Oj.default_options= {:indent => 2}
|
60
|
-
json = ActiveSupport::JSON.encode([1, true, Rational(1)])
|
61
|
-
assert_equal(%{[
|
62
|
-
1,
|
63
|
-
true,
|
64
|
-
"1/1"
|
65
|
-
]
|
66
|
-
}, json)
|
67
|
-
end
|
68
|
-
|
69
|
-
def test_dump_range
|
70
|
-
Oj.default_options= {:indent => 2}
|
71
|
-
json = ActiveSupport::JSON.encode([1, true, '01'..'12'])
|
72
|
-
assert_equal(%{[
|
73
|
-
1,
|
74
|
-
true,
|
75
|
-
"01..12"
|
76
|
-
]
|
77
|
-
}, json)
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_dump_object
|
81
|
-
Oj.default_options= {:indent => 2}
|
82
|
-
category = Category.new(1, 'test')
|
83
|
-
serializer = CategorySerializer.new(category)
|
84
|
-
|
85
|
-
serializer.to_json()
|
86
|
-
puts "*** serializer.to_json() #{serializer.to_json()}"
|
87
|
-
serializer.as_json()
|
88
|
-
puts "*** serializer.as_json() #{serializer.as_json()}"
|
89
|
-
JSON.dump(serializer)
|
90
|
-
puts "*** JSON.dump(serializer) #{JSON.dump(serializer)}"
|
91
|
-
|
92
|
-
puts "*** category.to_json() #{category.to_json()}"
|
93
|
-
puts "*** category.as_json() #{category.as_json()}"
|
94
|
-
puts "*** JSON.dump(serializer) #{JSON.dump(category)}"
|
95
|
-
puts "*** Oj.dump(serializer) #{Oj.dump(category)}"
|
96
|
-
end
|
97
|
-
|
98
|
-
def test_dump_object_array
|
99
|
-
Oj.default_options= {:indent => 2}
|
100
|
-
cat1 = Category.new(1, 'test')
|
101
|
-
cat2 = Category.new(2, 'test')
|
102
|
-
a = Array.wrap([cat1, cat2])
|
103
|
-
|
104
|
-
# serializer = CategorySerializer.new(a)
|
105
|
-
|
106
|
-
puts "*** a.to_json() #{a.to_json()}"
|
107
|
-
puts "*** a.as_json() #{a.as_json()}"
|
108
|
-
puts "*** JSON.dump(a) #{JSON.dump(a)}"
|
109
|
-
puts "*** Oj.dump(a) #{Oj.dump(a)}"
|
110
|
-
end
|
111
|
-
|
112
|
-
def test_dump_time
|
113
|
-
Oj.default_options= {:indent => 2}
|
114
|
-
now = ActiveSupport::TimeZone['America/Chicago'].parse('2014-11-01 13:20:47')
|
115
|
-
json = Oj.dump(now, mode: :object, time_format: :xmlschema)
|
116
|
-
# puts "*** json: #{json}"
|
117
|
-
|
118
|
-
oj_dump = Oj.load(json, mode: :object, time_format: :xmlschema)
|
119
|
-
# puts "Now: #{now}\n Oj: #{oj_dump}"
|
120
|
-
assert_equal('2014-11-01T13:20:47-05:00', oj_dump.xmlschema)
|
121
|
-
end
|
122
|
-
|
123
|
-
end # MimicRails
|
@@ -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"
|