oj 3.11.5 → 3.16.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +1421 -0
- data/README.md +19 -5
- data/RELEASE_NOTES.md +61 -0
- data/ext/oj/buf.h +20 -6
- data/ext/oj/cache.c +329 -0
- data/ext/oj/cache.h +22 -0
- data/ext/oj/cache8.c +10 -9
- data/ext/oj/circarray.c +8 -6
- data/ext/oj/circarray.h +2 -2
- data/ext/oj/code.c +19 -33
- data/ext/oj/code.h +2 -2
- data/ext/oj/compat.c +27 -77
- data/ext/oj/custom.c +86 -179
- data/ext/oj/debug.c +126 -0
- data/ext/oj/dump.c +256 -249
- data/ext/oj/dump.h +26 -12
- data/ext/oj/dump_compat.c +565 -642
- data/ext/oj/dump_leaf.c +17 -63
- data/ext/oj/dump_object.c +65 -187
- data/ext/oj/dump_strict.c +27 -51
- data/ext/oj/encoder.c +43 -0
- data/ext/oj/err.c +2 -13
- data/ext/oj/err.h +24 -8
- data/ext/oj/extconf.rb +21 -6
- data/ext/oj/fast.c +149 -149
- data/ext/oj/intern.c +313 -0
- data/ext/oj/intern.h +22 -0
- data/ext/oj/mem.c +318 -0
- data/ext/oj/mem.h +53 -0
- data/ext/oj/mimic_json.c +121 -106
- data/ext/oj/object.c +85 -162
- data/ext/oj/odd.c +89 -67
- data/ext/oj/odd.h +15 -15
- data/ext/oj/oj.c +542 -411
- data/ext/oj/oj.h +99 -73
- data/ext/oj/parse.c +175 -187
- data/ext/oj/parse.h +26 -24
- data/ext/oj/parser.c +1600 -0
- data/ext/oj/parser.h +101 -0
- data/ext/oj/rails.c +112 -159
- data/ext/oj/rails.h +1 -1
- data/ext/oj/reader.c +11 -14
- data/ext/oj/reader.h +4 -2
- data/ext/oj/resolve.c +5 -24
- data/ext/oj/rxclass.c +7 -6
- data/ext/oj/rxclass.h +1 -1
- data/ext/oj/saj.c +22 -33
- data/ext/oj/saj2.c +584 -0
- data/ext/oj/saj2.h +23 -0
- data/ext/oj/scp.c +5 -28
- data/ext/oj/sparse.c +28 -72
- data/ext/oj/stream_writer.c +50 -40
- data/ext/oj/strict.c +56 -61
- data/ext/oj/string_writer.c +72 -39
- data/ext/oj/trace.h +31 -4
- data/ext/oj/usual.c +1218 -0
- data/ext/oj/usual.h +69 -0
- data/ext/oj/util.h +1 -1
- data/ext/oj/val_stack.c +14 -3
- data/ext/oj/val_stack.h +8 -7
- data/ext/oj/validate.c +46 -0
- data/ext/oj/wab.c +63 -88
- data/lib/oj/active_support_helper.rb +1 -3
- data/lib/oj/bag.rb +7 -1
- data/lib/oj/easy_hash.rb +4 -5
- data/lib/oj/error.rb +1 -2
- data/lib/oj/json.rb +162 -150
- data/lib/oj/mimic.rb +9 -7
- data/lib/oj/saj.rb +20 -6
- data/lib/oj/schandler.rb +5 -4
- data/lib/oj/state.rb +12 -8
- data/lib/oj/version.rb +1 -2
- data/lib/oj.rb +2 -0
- data/pages/Compatibility.md +1 -1
- data/pages/InstallOptions.md +20 -0
- data/pages/JsonGem.md +15 -0
- data/pages/Modes.md +8 -3
- data/pages/Options.md +43 -5
- data/pages/Parser.md +309 -0
- data/pages/Rails.md +14 -2
- data/test/_test_active.rb +8 -9
- data/test/_test_active_mimic.rb +7 -8
- data/test/_test_mimic_rails.rb +17 -20
- data/test/activerecord/result_test.rb +5 -6
- data/test/activesupport6/encoding_test.rb +63 -28
- data/test/{activesupport5 → activesupport7}/abstract_unit.rb +16 -12
- data/test/{activesupport5 → activesupport7}/decoding_test.rb +2 -10
- data/test/{activesupport5 → activesupport7}/encoding_test.rb +86 -50
- data/test/{activesupport5 → activesupport7}/encoding_test_cases.rb +6 -0
- data/test/{activesupport5 → activesupport7}/time_zone_test_helpers.rb +8 -0
- data/test/files.rb +15 -15
- data/test/foo.rb +16 -45
- data/test/helper.rb +11 -8
- data/test/isolated/shared.rb +3 -2
- data/test/json_gem/json_addition_test.rb +2 -2
- data/test/json_gem/json_common_interface_test.rb +8 -6
- data/test/json_gem/json_encoding_test.rb +0 -0
- data/test/json_gem/json_ext_parser_test.rb +1 -0
- data/test/json_gem/json_fixtures_test.rb +3 -2
- data/test/json_gem/json_generator_test.rb +56 -38
- data/test/json_gem/json_generic_object_test.rb +11 -11
- data/test/json_gem/json_parser_test.rb +54 -47
- data/test/json_gem/json_string_matching_test.rb +9 -9
- data/test/json_gem/test_helper.rb +7 -3
- data/test/mem.rb +34 -0
- data/test/perf.rb +22 -27
- data/test/perf_compat.rb +31 -33
- data/test/perf_dump.rb +50 -0
- data/test/perf_fast.rb +80 -82
- data/test/perf_file.rb +27 -29
- data/test/perf_object.rb +65 -69
- data/test/perf_once.rb +59 -0
- data/test/perf_parser.rb +183 -0
- data/test/perf_saj.rb +46 -54
- data/test/perf_scp.rb +58 -69
- data/test/perf_simple.rb +41 -39
- data/test/perf_strict.rb +74 -82
- data/test/perf_wab.rb +67 -69
- data/test/prec.rb +5 -5
- data/test/sample/change.rb +0 -1
- data/test/sample/dir.rb +0 -1
- data/test/sample/doc.rb +0 -1
- data/test/sample/file.rb +0 -1
- data/test/sample/group.rb +0 -1
- data/test/sample/hasprops.rb +0 -1
- data/test/sample/layer.rb +0 -1
- data/test/sample/rect.rb +0 -1
- data/test/sample/shape.rb +0 -1
- data/test/sample/text.rb +0 -1
- data/test/sample.rb +16 -16
- data/test/sample_json.rb +8 -8
- data/test/test_compat.rb +95 -43
- data/test/test_custom.rb +73 -51
- data/test/test_debian.rb +7 -10
- data/test/test_fast.rb +135 -79
- data/test/test_file.rb +41 -30
- data/test/test_gc.rb +16 -5
- data/test/test_generate.rb +5 -5
- data/test/test_hash.rb +5 -5
- data/test/test_integer_range.rb +9 -9
- data/test/test_null.rb +20 -20
- data/test/test_object.rb +99 -96
- data/test/test_parser.rb +11 -0
- data/test/test_parser_debug.rb +27 -0
- data/test/test_parser_saj.rb +337 -0
- data/test/test_parser_usual.rb +251 -0
- data/test/test_rails.rb +2 -2
- data/test/test_saj.rb +10 -8
- data/test/test_scp.rb +37 -39
- data/test/test_strict.rb +40 -32
- data/test/test_various.rb +165 -84
- data/test/test_wab.rb +48 -44
- data/test/test_writer.rb +47 -47
- data/test/tests.rb +13 -5
- data/test/tests_mimic.rb +12 -3
- data/test/tests_mimic_addition.rb +12 -3
- metadata +74 -128
- data/ext/oj/hash.c +0 -131
- data/ext/oj/hash.h +0 -19
- data/ext/oj/hash_test.c +0 -491
- data/test/activesupport4/decoding_test.rb +0 -108
- data/test/activesupport4/encoding_test.rb +0 -531
- data/test/activesupport4/test_helper.rb +0 -41
- data/test/activesupport5/test_helper.rb +0 -72
- data/test/bar.rb +0 -35
- data/test/baz.rb +0 -16
- data/test/zoo.rb +0 -13
data/ext/oj/dump_leaf.c
CHANGED
@@ -8,45 +8,16 @@
|
|
8
8
|
|
9
9
|
static void dump_leaf(Leaf leaf, int depth, Out out);
|
10
10
|
|
11
|
-
static void grow(Out out, size_t len) {
|
12
|
-
size_t size = out->end - out->buf;
|
13
|
-
long pos = out->cur - out->buf;
|
14
|
-
char * buf;
|
15
|
-
|
16
|
-
size *= 2;
|
17
|
-
if (size <= len * 2 + pos) {
|
18
|
-
size += len;
|
19
|
-
}
|
20
|
-
if (out->allocated) {
|
21
|
-
buf = REALLOC_N(out->buf, char, (size + BUFFER_EXTRA));
|
22
|
-
} else {
|
23
|
-
buf = ALLOC_N(char, (size + BUFFER_EXTRA));
|
24
|
-
out->allocated = true;
|
25
|
-
memcpy(buf, out->buf, out->end - out->buf + BUFFER_EXTRA);
|
26
|
-
}
|
27
|
-
if (0 == buf) {
|
28
|
-
rb_raise(rb_eNoMemError, "Failed to create string. [%d:%s]\n", ENOSPC, strerror(ENOSPC));
|
29
|
-
}
|
30
|
-
out->buf = buf;
|
31
|
-
out->end = buf + size;
|
32
|
-
out->cur = out->buf + pos;
|
33
|
-
}
|
34
|
-
|
35
11
|
inline static void dump_chars(const char *s, size_t size, Out out) {
|
36
|
-
|
37
|
-
|
38
|
-
}
|
39
|
-
memcpy(out->cur, s, size);
|
40
|
-
out->cur += size;
|
12
|
+
assure_size(out, size);
|
13
|
+
APPEND_CHARS(out->cur, s, size);
|
41
14
|
*out->cur = '\0';
|
42
15
|
}
|
43
16
|
|
44
17
|
static void dump_leaf_str(Leaf leaf, Out out) {
|
45
18
|
switch (leaf->value_type) {
|
46
19
|
case STR_VAL: oj_dump_cstr(leaf->str, strlen(leaf->str), 0, 0, out); break;
|
47
|
-
case RUBY_VAL:
|
48
|
-
oj_dump_cstr(rb_string_value_cstr(&leaf->value), (int)RSTRING_LEN(leaf->value), 0, 0, out);
|
49
|
-
break;
|
20
|
+
case RUBY_VAL: oj_dump_cstr(StringValueCStr(leaf->value), (int)RSTRING_LEN(leaf->value), 0, 0, out); break;
|
50
21
|
case COL_VAL:
|
51
22
|
default: rb_raise(rb_eTypeError, "Unexpected value type %02x.\n", leaf->value_type); break;
|
52
23
|
}
|
@@ -81,9 +52,7 @@ static void dump_leaf_array(Leaf leaf, int depth, Out out) {
|
|
81
52
|
int d2 = depth + 1;
|
82
53
|
|
83
54
|
size = 2;
|
84
|
-
|
85
|
-
grow(out, size);
|
86
|
-
}
|
55
|
+
assure_size(out, size);
|
87
56
|
*out->cur++ = '[';
|
88
57
|
if (0 == leaf->elements) {
|
89
58
|
*out->cur++ = ']';
|
@@ -93,9 +62,7 @@ static void dump_leaf_array(Leaf leaf, int depth, Out out) {
|
|
93
62
|
|
94
63
|
size = d2 * out->indent + 2;
|
95
64
|
do {
|
96
|
-
|
97
|
-
grow(out, size);
|
98
|
-
}
|
65
|
+
assure_size(out, size);
|
99
66
|
fill_indent(out, d2);
|
100
67
|
dump_leaf(e, d2, out);
|
101
68
|
if (e->next != first) {
|
@@ -104,9 +71,7 @@ static void dump_leaf_array(Leaf leaf, int depth, Out out) {
|
|
104
71
|
e = e->next;
|
105
72
|
} while (e != first);
|
106
73
|
size = depth * out->indent + 1;
|
107
|
-
|
108
|
-
grow(out, size);
|
109
|
-
}
|
74
|
+
assure_size(out, size);
|
110
75
|
fill_indent(out, depth);
|
111
76
|
*out->cur++ = ']';
|
112
77
|
}
|
@@ -118,9 +83,7 @@ static void dump_leaf_hash(Leaf leaf, int depth, Out out) {
|
|
118
83
|
int d2 = depth + 1;
|
119
84
|
|
120
85
|
size = 2;
|
121
|
-
|
122
|
-
grow(out, size);
|
123
|
-
}
|
86
|
+
assure_size(out, size);
|
124
87
|
*out->cur++ = '{';
|
125
88
|
if (0 == leaf->elements) {
|
126
89
|
*out->cur++ = '}';
|
@@ -130,9 +93,7 @@ static void dump_leaf_hash(Leaf leaf, int depth, Out out) {
|
|
130
93
|
|
131
94
|
size = d2 * out->indent + 2;
|
132
95
|
do {
|
133
|
-
|
134
|
-
grow(out, size);
|
135
|
-
}
|
96
|
+
assure_size(out, size);
|
136
97
|
fill_indent(out, d2);
|
137
98
|
oj_dump_cstr(e->key, strlen(e->key), 0, 0, out);
|
138
99
|
*out->cur++ = ':';
|
@@ -143,9 +104,7 @@ static void dump_leaf_hash(Leaf leaf, int depth, Out out) {
|
|
143
104
|
e = e->next;
|
144
105
|
} while (e != first);
|
145
106
|
size = depth * out->indent + 1;
|
146
|
-
|
147
|
-
grow(out, size);
|
148
|
-
}
|
107
|
+
assure_size(out, size);
|
149
108
|
fill_indent(out, depth);
|
150
109
|
*out->cur++ = '}';
|
151
110
|
}
|
@@ -168,10 +127,7 @@ static void dump_leaf(Leaf leaf, int depth, Out out) {
|
|
168
127
|
|
169
128
|
void oj_dump_leaf_to_json(Leaf leaf, Options copts, Out out) {
|
170
129
|
if (0 == out->buf) {
|
171
|
-
out
|
172
|
-
out->end = out->buf + 4095 -
|
173
|
-
BUFFER_EXTRA; // 1 less than end plus extra for possible errors
|
174
|
-
out->allocated = true;
|
130
|
+
oj_out_init(out);
|
175
131
|
}
|
176
132
|
out->cur = out->buf;
|
177
133
|
out->circ_cnt = 0;
|
@@ -182,15 +138,13 @@ void oj_dump_leaf_to_json(Leaf leaf, Options copts, Out out) {
|
|
182
138
|
}
|
183
139
|
|
184
140
|
void oj_write_leaf_to_file(Leaf leaf, const char *path, Options copts) {
|
185
|
-
char buf[4096];
|
186
141
|
struct _out out;
|
187
142
|
size_t size;
|
188
|
-
FILE
|
143
|
+
FILE *f;
|
189
144
|
|
190
|
-
out
|
191
|
-
|
192
|
-
out.
|
193
|
-
out.omit_nil = copts->dump_opts.omit_nil;
|
145
|
+
oj_out_init(&out);
|
146
|
+
|
147
|
+
out.omit_nil = copts->dump_opts.omit_nil;
|
194
148
|
oj_dump_leaf_to_json(leaf, copts, &out);
|
195
149
|
size = out.cur - out.buf;
|
196
150
|
if (0 == (f = fopen(path, "w"))) {
|
@@ -201,8 +155,8 @@ void oj_write_leaf_to_file(Leaf leaf, const char *path, Options copts) {
|
|
201
155
|
|
202
156
|
rb_raise(rb_eIOError, "Write failed. [%d:%s]\n", err, strerror(err));
|
203
157
|
}
|
204
|
-
|
205
|
-
|
206
|
-
|
158
|
+
|
159
|
+
oj_out_free(&out);
|
160
|
+
|
207
161
|
fclose(f);
|
208
162
|
}
|