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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +81 -0
- data/README.md +0 -16
- data/ext/oj/compat.c +3 -3
- data/ext/oj/custom.c +17 -11
- data/ext/oj/dump.c +592 -81
- data/ext/oj/dump.h +9 -2
- data/ext/oj/dump_compat.c +15 -9
- data/ext/oj/dump_leaf.c +1 -1
- data/ext/oj/dump_object.c +32 -17
- data/ext/oj/dump_strict.c +20 -14
- data/ext/oj/extconf.rb +10 -7
- data/ext/oj/fast.c +40 -23
- data/ext/oj/intern.c +1 -1
- data/ext/oj/mimic_json.c +11 -7
- data/ext/oj/object.c +8 -8
- data/ext/oj/oj.c +256 -10
- data/ext/oj/oj.h +55 -52
- data/ext/oj/parse.c +243 -46
- data/ext/oj/parser.c +113 -37
- data/ext/oj/parser.h +2 -0
- data/ext/oj/rails.c +41 -36
- data/ext/oj/rxclass.c +1 -1
- data/ext/oj/rxclass.h +1 -1
- data/ext/oj/safe.c +230 -0
- data/ext/oj/safe.h +79 -0
- data/ext/oj/saj.c +13 -8
- data/ext/oj/scp.c +3 -6
- data/ext/oj/simd.h +219 -0
- data/ext/oj/sparse.c +6 -3
- data/ext/oj/stream_writer.c +3 -13
- data/ext/oj/strict.c +2 -4
- data/ext/oj/string_writer.c +5 -7
- data/ext/oj/usual.c +20 -7
- data/ext/oj/wab.c +5 -4
- data/lib/oj/version.rb +1 -1
- data/pages/Encoding.md +1 -1
- metadata +22 -114
- 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 -251
- 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 -380
- data/test/tests.rb +0 -33
- data/test/tests_mimic.rb +0 -23
- data/test/tests_mimic_addition.rb +0 -16
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,22 +469,20 @@ 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
|
|
478
|
-
* call-seq: as_json()
|
|
476
|
+
* call-seq: as_json(*)
|
|
479
477
|
*
|
|
480
478
|
* Returns the contents of the writer as a JSON element. If called from inside
|
|
481
479
|
* an array or hash by Oj the raw buffer will be used othersize a more
|
|
482
480
|
* inefficient parse of the contents and a return of the result is
|
|
483
|
-
* completed. The parse uses the strict mode.
|
|
481
|
+
* completed. The parse uses the strict mode. Optional arguments are ignored.
|
|
484
482
|
*
|
|
485
483
|
* *return* [_Hash_|_Array_|_String_|_Integer_|_Float_|_True_|_False_|_nil|)
|
|
486
484
|
*/
|
|
487
|
-
static VALUE str_writer_as_json(VALUE self) {
|
|
485
|
+
static VALUE str_writer_as_json(int argc, VALUE *argv, VALUE self) {
|
|
488
486
|
if (string_writer_optimized) {
|
|
489
487
|
return self;
|
|
490
488
|
}
|
|
@@ -515,5 +513,5 @@ void oj_string_writer_init(void) {
|
|
|
515
513
|
rb_define_method(oj_string_writer_class, "reset", str_writer_reset, 0);
|
|
516
514
|
rb_define_method(oj_string_writer_class, "to_s", str_writer_to_s, 0);
|
|
517
515
|
rb_define_method(oj_string_writer_class, "raw_json", str_writer_to_s, 0);
|
|
518
|
-
rb_define_method(oj_string_writer_class, "as_json", str_writer_as_json,
|
|
516
|
+
rb_define_method(oj_string_writer_class, "as_json", str_writer_as_json, -1);
|
|
519
517
|
}
|
data/ext/oj/usual.c
CHANGED
|
@@ -63,7 +63,7 @@ static VALUE form_attr(const char *str, size_t len) {
|
|
|
63
63
|
memcpy(b + 1, str, len);
|
|
64
64
|
b[len + 1] = '\0';
|
|
65
65
|
|
|
66
|
-
id = rb_intern3(
|
|
66
|
+
id = rb_intern3(b, len + 1, oj_utf8_encoding);
|
|
67
67
|
OJ_R_FREE(b);
|
|
68
68
|
return id;
|
|
69
69
|
}
|
|
@@ -200,7 +200,10 @@ static void push_key(ojParser p) {
|
|
|
200
200
|
d->ktail = d->khead + pos;
|
|
201
201
|
d->kend = d->khead + cap;
|
|
202
202
|
}
|
|
203
|
-
|
|
203
|
+
if (32000 < klen) {
|
|
204
|
+
rb_raise(oj_json_parser_error_class, "Key too long. Keys are limited to 32,000 bytes.");
|
|
205
|
+
}
|
|
206
|
+
d->ktail->len = (int16_t)klen;
|
|
204
207
|
if (klen < sizeof(d->ktail->buf)) {
|
|
205
208
|
memcpy(d->ktail->buf, key, klen);
|
|
206
209
|
d->ktail->buf[klen] = '\0';
|
|
@@ -608,12 +611,16 @@ static void dfree(ojParser p) {
|
|
|
608
611
|
Usual d = (Usual)p->ctx;
|
|
609
612
|
|
|
610
613
|
cache_free(d->str_cache);
|
|
614
|
+
d->str_cache = NULL;
|
|
611
615
|
cache_free(d->attr_cache);
|
|
616
|
+
d->attr_cache = NULL;
|
|
612
617
|
if (NULL != d->sym_cache) {
|
|
613
618
|
cache_free(d->sym_cache);
|
|
619
|
+
d->sym_cache = NULL;
|
|
614
620
|
}
|
|
615
621
|
if (NULL != d->class_cache) {
|
|
616
622
|
cache_free(d->class_cache);
|
|
623
|
+
d->class_cache = NULL;
|
|
617
624
|
}
|
|
618
625
|
OJ_R_FREE(d->vhead);
|
|
619
626
|
OJ_R_FREE(d->chead);
|
|
@@ -640,6 +647,12 @@ static void mark(ojParser p) {
|
|
|
640
647
|
if (NULL != d->class_cache) {
|
|
641
648
|
cache_mark(d->class_cache);
|
|
642
649
|
}
|
|
650
|
+
if (Qnil != d->hash_class) {
|
|
651
|
+
rb_gc_mark(d->hash_class);
|
|
652
|
+
}
|
|
653
|
+
if (Qnil != d->array_class) {
|
|
654
|
+
rb_gc_mark(d->array_class);
|
|
655
|
+
}
|
|
643
656
|
for (vp = d->vhead; vp < d->vtail; vp++) {
|
|
644
657
|
if (Qundef != *vp) {
|
|
645
658
|
rb_gc_mark(*vp);
|
|
@@ -834,8 +847,8 @@ static VALUE opt_create_id_set(ojParser p, VALUE value) {
|
|
|
834
847
|
rb_check_type(value, T_STRING);
|
|
835
848
|
size_t len = RSTRING_LEN(value);
|
|
836
849
|
|
|
837
|
-
if (1 << sizeof(d->create_id_len) <= len) {
|
|
838
|
-
rb_raise(rb_eArgError, "The create_id values is limited to %d bytes.", 1 << sizeof(d->create_id_len));
|
|
850
|
+
if (1 << (8 * sizeof(d->create_id_len)) <= len) {
|
|
851
|
+
rb_raise(rb_eArgError, "The create_id values is limited to %d bytes.", 1 << (8 * sizeof(d->create_id_len)));
|
|
839
852
|
}
|
|
840
853
|
d->create_id_len = (uint8_t)len;
|
|
841
854
|
d->create_id = str_dup(RSTRING_PTR(value), len);
|
|
@@ -1050,10 +1063,10 @@ static VALUE opt_symbol_keys_set(ojParser p, VALUE value) {
|
|
|
1050
1063
|
if (NULL != d->sym_cache) {
|
|
1051
1064
|
cache_free(d->sym_cache);
|
|
1052
1065
|
d->sym_cache = NULL;
|
|
1066
|
+
d->key_cache = NULL;
|
|
1053
1067
|
}
|
|
1054
|
-
|
|
1055
|
-
|
|
1056
|
-
}
|
|
1068
|
+
d->cache_keys = false;
|
|
1069
|
+
d->get_key = str_key;
|
|
1057
1070
|
}
|
|
1058
1071
|
return (NULL != d->sym_cache) ? Qtrue : Qfalse;
|
|
1059
1072
|
}
|
data/ext/oj/wab.c
CHANGED
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
// Workaround in case INFINITY is not defined in math.h or if the OS is CentOS
|
|
20
20
|
#define OJ_INFINITY (1.0 / 0.0)
|
|
21
21
|
|
|
22
|
-
static char hex_chars[
|
|
22
|
+
static char hex_chars[257] = "\
|
|
23
23
|
................................\
|
|
24
24
|
................xxxxxxxxxx......\
|
|
25
25
|
.xxxxxx.........................\
|
|
@@ -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.
|
|
4
|
+
version: 3.17.3
|
|
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: 1980-01-02 00:00:00.000000000 Z
|
|
12
11
|
dependencies:
|
|
13
12
|
- !ruby/object:Gem::Dependency
|
|
14
13
|
name: bigdecimal
|
|
@@ -24,20 +23,6 @@ dependencies:
|
|
|
24
23
|
- - ">="
|
|
25
24
|
- !ruby/object:Gem::Version
|
|
26
25
|
version: '3.0'
|
|
27
|
-
- !ruby/object:Gem::Dependency
|
|
28
|
-
name: ostruct
|
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
|
30
|
-
requirements:
|
|
31
|
-
- - ">="
|
|
32
|
-
- !ruby/object:Gem::Version
|
|
33
|
-
version: '0.2'
|
|
34
|
-
type: :runtime
|
|
35
|
-
prerelease: false
|
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
37
|
-
requirements:
|
|
38
|
-
- - ">="
|
|
39
|
-
- !ruby/object:Gem::Version
|
|
40
|
-
version: '0.2'
|
|
41
26
|
- !ruby/object:Gem::Dependency
|
|
42
27
|
name: minitest
|
|
43
28
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -86,15 +71,29 @@ dependencies:
|
|
|
86
71
|
- - "~>"
|
|
87
72
|
- !ruby/object:Gem::Version
|
|
88
73
|
version: '3.0'
|
|
74
|
+
- !ruby/object:Gem::Dependency
|
|
75
|
+
name: ostruct
|
|
76
|
+
requirement: !ruby/object:Gem::Requirement
|
|
77
|
+
requirements:
|
|
78
|
+
- - ">="
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
version: '0.2'
|
|
81
|
+
type: :runtime
|
|
82
|
+
prerelease: false
|
|
83
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
84
|
+
requirements:
|
|
85
|
+
- - ">="
|
|
86
|
+
- !ruby/object:Gem::Version
|
|
87
|
+
version: '0.2'
|
|
89
88
|
description: The fastest JSON parser and object serializer.
|
|
90
89
|
email: peter@ohler.com
|
|
91
90
|
executables: []
|
|
92
91
|
extensions:
|
|
93
92
|
- ext/oj/extconf.rb
|
|
94
93
|
extra_rdoc_files:
|
|
95
|
-
- README.md
|
|
96
|
-
- LICENSE
|
|
97
94
|
- CHANGELOG.md
|
|
95
|
+
- LICENSE
|
|
96
|
+
- README.md
|
|
98
97
|
- RELEASE_NOTES.md
|
|
99
98
|
- pages/Advanced.md
|
|
100
99
|
- pages/Compatibility.md
|
|
@@ -159,10 +158,13 @@ files:
|
|
|
159
158
|
- ext/oj/resolve.h
|
|
160
159
|
- ext/oj/rxclass.c
|
|
161
160
|
- ext/oj/rxclass.h
|
|
161
|
+
- ext/oj/safe.c
|
|
162
|
+
- ext/oj/safe.h
|
|
162
163
|
- ext/oj/saj.c
|
|
163
164
|
- ext/oj/saj2.c
|
|
164
165
|
- ext/oj/saj2.h
|
|
165
166
|
- ext/oj/scp.c
|
|
167
|
+
- ext/oj/simd.h
|
|
166
168
|
- ext/oj/sparse.c
|
|
167
169
|
- ext/oj/stream_writer.c
|
|
168
170
|
- ext/oj/strict.c
|
|
@@ -200,98 +202,6 @@ files:
|
|
|
200
202
|
- pages/Rails.md
|
|
201
203
|
- pages/Security.md
|
|
202
204
|
- 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
205
|
homepage: http://www.ohler.com/oj
|
|
296
206
|
licenses:
|
|
297
207
|
- MIT
|
|
@@ -303,7 +213,6 @@ metadata:
|
|
|
303
213
|
source_code_uri: https://github.com/ohler55/oj
|
|
304
214
|
wiki_uri: https://github.com/ohler55/oj/wiki
|
|
305
215
|
rubygems_mfa_required: 'true'
|
|
306
|
-
post_install_message:
|
|
307
216
|
rdoc_options:
|
|
308
217
|
- "--title"
|
|
309
218
|
- Oj
|
|
@@ -322,8 +231,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
322
231
|
- !ruby/object:Gem::Version
|
|
323
232
|
version: '0'
|
|
324
233
|
requirements: []
|
|
325
|
-
rubygems_version:
|
|
326
|
-
signing_key:
|
|
234
|
+
rubygems_version: 4.0.3
|
|
327
235
|
specification_version: 4
|
|
328
236
|
summary: A fast JSON parser and serializer.
|
|
329
237
|
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
|