oj 3.1.0 → 3.1.2
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/ext/oj/code.c +30 -22
- data/ext/oj/code.h +1 -1
- data/ext/oj/custom.c +25 -15
- data/ext/oj/dump_compat.c +8 -8
- data/ext/oj/mimic_json.c +19 -19
- data/ext/oj/rails.c +1 -1
- data/ext/oj/string_writer.c +26 -6
- data/lib/oj/version.rb +1 -1
- data/test/bug.rb +5 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 35634d84fa9efd54d2c6a5c82572386ab76dcbd9
|
4
|
+
data.tar.gz: b53f05e6cbb2159d88b800165e5e843bd0f8f10f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a7fd255fb03915f2d5bef8d5d9093693a7544345b9dcc3a5208d26db2009b264797a1879e70e1d25e2144813d90e690cbab992092fc65fa0b7aaf22e93fa265
|
7
|
+
data.tar.gz: 29166d47b6bdd0ef4fde76c532fd6227f163786ca1f9dd4b5f2a9f507658d078a8ef47ff25ffb59dfe98e5981f70a964e7b62c8703f246fa183f946d00ae115b
|
data/ext/oj/code.c
CHANGED
@@ -132,40 +132,48 @@ oj_code_has(Code codes, VALUE clas, bool encode) {
|
|
132
132
|
}
|
133
133
|
|
134
134
|
void
|
135
|
-
oj_code_attrs(VALUE obj, Attr attrs, int depth, Out out) {
|
135
|
+
oj_code_attrs(VALUE obj, Attr attrs, int depth, Out out, bool with_class) {
|
136
136
|
int d2 = depth + 1;
|
137
137
|
int d3 = d2 + 1;
|
138
138
|
size_t sep_len = out->opts->dump_opts.before_size + out->opts->dump_opts.after_size + 2;
|
139
139
|
const char *classname = rb_obj_classname(obj);
|
140
140
|
size_t len = strlen(classname);
|
141
141
|
size_t size = d2 * out->indent + 10 + len + out->opts->create_id_len + sep_len;
|
142
|
-
|
142
|
+
bool no_comma = true;
|
143
|
+
|
143
144
|
assure_size(out, size);
|
144
145
|
*out->cur++ = '{';
|
145
|
-
fill_indent(out, d2);
|
146
|
-
*out->cur++ = '"';
|
147
|
-
memcpy(out->cur, out->opts->create_id, out->opts->create_id_len);
|
148
|
-
out->cur += out->opts->create_id_len;
|
149
|
-
*out->cur++ = '"';
|
150
|
-
if (0 < out->opts->dump_opts.before_size) {
|
151
|
-
strcpy(out->cur, out->opts->dump_opts.before_sep);
|
152
|
-
out->cur += out->opts->dump_opts.before_size;
|
153
|
-
}
|
154
|
-
*out->cur++ = ':';
|
155
|
-
if (0 < out->opts->dump_opts.after_size) {
|
156
|
-
strcpy(out->cur, out->opts->dump_opts.after_sep);
|
157
|
-
out->cur += out->opts->dump_opts.after_size;
|
158
|
-
}
|
159
|
-
*out->cur++ = '"';
|
160
|
-
memcpy(out->cur, classname, len);
|
161
|
-
out->cur += len;
|
162
|
-
*out->cur++ = '"';
|
163
146
|
|
147
|
+
if (with_class) {
|
148
|
+
fill_indent(out, d2);
|
149
|
+
*out->cur++ = '"';
|
150
|
+
memcpy(out->cur, out->opts->create_id, out->opts->create_id_len);
|
151
|
+
out->cur += out->opts->create_id_len;
|
152
|
+
*out->cur++ = '"';
|
153
|
+
if (0 < out->opts->dump_opts.before_size) {
|
154
|
+
strcpy(out->cur, out->opts->dump_opts.before_sep);
|
155
|
+
out->cur += out->opts->dump_opts.before_size;
|
156
|
+
}
|
157
|
+
*out->cur++ = ':';
|
158
|
+
if (0 < out->opts->dump_opts.after_size) {
|
159
|
+
strcpy(out->cur, out->opts->dump_opts.after_sep);
|
160
|
+
out->cur += out->opts->dump_opts.after_size;
|
161
|
+
}
|
162
|
+
*out->cur++ = '"';
|
163
|
+
memcpy(out->cur, classname, len);
|
164
|
+
out->cur += len;
|
165
|
+
*out->cur++ = '"';
|
166
|
+
no_comma = false;
|
167
|
+
}
|
164
168
|
size = d3 * out->indent + 2;
|
165
169
|
for (; NULL != attrs->name; attrs++) {
|
166
170
|
assure_size(out, size + attrs->len + sep_len + 2);
|
167
|
-
|
168
|
-
|
171
|
+
if (no_comma) {
|
172
|
+
no_comma = false;
|
173
|
+
} else {
|
174
|
+
*out->cur++ = ',';
|
175
|
+
}
|
176
|
+
fill_indent(out, d2);
|
169
177
|
*out->cur++ = '"';
|
170
178
|
memcpy(out->cur, attrs->name, attrs->len);
|
171
179
|
out->cur += attrs->len;
|
data/ext/oj/code.h
CHANGED
@@ -35,7 +35,7 @@ extern VALUE oj_code_load(Code codes, VALUE clas, VALUE args);
|
|
35
35
|
extern void oj_code_set_active(Code codes, VALUE clas, bool active);
|
36
36
|
extern bool oj_code_has(Code codes, VALUE clas, bool encode);
|
37
37
|
|
38
|
-
extern void oj_code_attrs(VALUE obj, Attr attrs, int depth, Out out);
|
38
|
+
extern void oj_code_attrs(VALUE obj, Attr attrs, int depth, Out out, bool with_class);
|
39
39
|
|
40
40
|
extern struct _Code oj_compat_codes[];
|
41
41
|
|
data/ext/oj/custom.c
CHANGED
@@ -26,7 +26,7 @@ dump_obj_str(VALUE obj, int depth, Out out) {
|
|
26
26
|
};
|
27
27
|
attrs->value = rb_funcall(obj, oj_to_s_id, 0);
|
28
28
|
|
29
|
-
oj_code_attrs(obj, attrs, depth, out);
|
29
|
+
oj_code_attrs(obj, attrs, depth, out, Yes == out->opts->create_ok);
|
30
30
|
}
|
31
31
|
|
32
32
|
|
@@ -64,7 +64,7 @@ complex_dump(VALUE obj, int depth, Out out) {
|
|
64
64
|
attrs[0].value = rb_funcall(obj, real_id, 0);
|
65
65
|
attrs[1].value = rb_funcall(obj, imag_id, 0);
|
66
66
|
|
67
|
-
oj_code_attrs(obj, attrs, depth, out);
|
67
|
+
oj_code_attrs(obj, attrs, depth, out, Yes == out->opts->create_ok);
|
68
68
|
}
|
69
69
|
|
70
70
|
static VALUE
|
@@ -84,7 +84,7 @@ date_dump(VALUE obj, int depth, Out out) {
|
|
84
84
|
};
|
85
85
|
attrs->value = rb_funcall(obj, rb_intern("iso8601"), 0);
|
86
86
|
|
87
|
-
oj_code_attrs(obj, attrs, depth, out);
|
87
|
+
oj_code_attrs(obj, attrs, depth, out, Yes == out->opts->create_ok);
|
88
88
|
}
|
89
89
|
|
90
90
|
static VALUE
|
@@ -120,7 +120,7 @@ openstruct_dump(VALUE obj, int depth, Out out) {
|
|
120
120
|
}
|
121
121
|
attrs->value = rb_funcall(obj, table_id, 0);
|
122
122
|
|
123
|
-
oj_code_attrs(obj, attrs, depth, out);
|
123
|
+
oj_code_attrs(obj, attrs, depth, out, Yes == out->opts->create_ok);
|
124
124
|
}
|
125
125
|
|
126
126
|
static VALUE
|
@@ -143,7 +143,7 @@ range_dump(VALUE obj, int depth, Out out) {
|
|
143
143
|
attrs[1].value = rb_funcall(obj, oj_end_id, 0);
|
144
144
|
attrs[2].value = rb_funcall(obj, oj_exclude_end_id, 0);
|
145
145
|
|
146
|
-
oj_code_attrs(obj, attrs, depth, out);
|
146
|
+
oj_code_attrs(obj, attrs, depth, out, Yes == out->opts->create_ok);
|
147
147
|
}
|
148
148
|
|
149
149
|
static VALUE
|
@@ -174,7 +174,7 @@ rational_dump(VALUE obj, int depth, Out out) {
|
|
174
174
|
attrs[0].value = rb_funcall(obj, numerator_id, 0);
|
175
175
|
attrs[1].value = rb_funcall(obj, denominator_id, 0);
|
176
176
|
|
177
|
-
oj_code_attrs(obj, attrs, depth, out);
|
177
|
+
oj_code_attrs(obj, attrs, depth, out, Yes == out->opts->create_ok);
|
178
178
|
}
|
179
179
|
|
180
180
|
static VALUE
|
@@ -199,13 +199,23 @@ regexp_load(VALUE clas, VALUE args) {
|
|
199
199
|
|
200
200
|
static void
|
201
201
|
time_dump(VALUE obj, int depth, Out out) {
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
202
|
+
if (Yes == out->opts->create_ok) {
|
203
|
+
struct _Attr attrs[] = {
|
204
|
+
{ "time", 4, Qundef, 0, Qundef },
|
205
|
+
{ NULL, 0, Qnil },
|
206
|
+
};
|
207
|
+
attrs->time = obj;
|
208
|
+
|
209
|
+
oj_code_attrs(obj, attrs, depth, out, true);
|
210
|
+
} else {
|
211
|
+
switch (out->opts->time_format) {
|
212
|
+
case RubyTime: oj_dump_ruby_time(obj, out); break;
|
213
|
+
case XmlTime: oj_dump_xml_time(obj, out); break;
|
214
|
+
case UnixZTime: oj_dump_time(obj, out, true); break;
|
215
|
+
case UnixTime:
|
216
|
+
default: oj_dump_time(obj, out, false); break;
|
217
|
+
}
|
218
|
+
}
|
209
219
|
}
|
210
220
|
|
211
221
|
static VALUE
|
@@ -340,7 +350,7 @@ dump_odd(VALUE obj, Odd odd, VALUE clas, int depth, Out out) {
|
|
340
350
|
|
341
351
|
assure_size(out, 2);
|
342
352
|
*out->cur++ = '{';
|
343
|
-
if (NULL != out->opts->create_id) {
|
353
|
+
if (NULL != out->opts->create_id && Yes == out->opts->create_ok) {
|
344
354
|
const char *classname = rb_class2name(clas);
|
345
355
|
int clen = (int)strlen(classname);
|
346
356
|
size_t sep_len = out->opts->dump_opts.before_size + out->opts->dump_opts.after_size + 2;
|
@@ -557,7 +567,7 @@ dump_obj_attrs(VALUE obj, VALUE clas, slot_t id, int depth, Out out) {
|
|
557
567
|
|
558
568
|
assure_size(out, 2);
|
559
569
|
*out->cur++ = '{';
|
560
|
-
if (Qundef != clas) {
|
570
|
+
if (Qundef != clas && NULL != out->opts->create_id && Yes == out->opts->create_ok) {
|
561
571
|
size_t sep_len = out->opts->dump_opts.before_size + out->opts->dump_opts.after_size + 2;
|
562
572
|
const char *classname = rb_obj_classname(obj);
|
563
573
|
size_t len = strlen(classname);
|
data/ext/oj/dump_compat.c
CHANGED
@@ -224,7 +224,7 @@ bigdecimal_alt(VALUE obj, int depth, Out out) {
|
|
224
224
|
}
|
225
225
|
attrs[0].value = rb_funcall(obj, _dump_id, 0);
|
226
226
|
|
227
|
-
oj_code_attrs(obj, attrs, depth, out);
|
227
|
+
oj_code_attrs(obj, attrs, depth, out, true);
|
228
228
|
}
|
229
229
|
|
230
230
|
static ID real_id = 0;
|
@@ -245,7 +245,7 @@ complex_alt(VALUE obj, int depth, Out out) {
|
|
245
245
|
attrs[0].value = rb_funcall(obj, real_id, 0);
|
246
246
|
attrs[1].value = rb_funcall(obj, imag_id, 0);
|
247
247
|
|
248
|
-
oj_code_attrs(obj, attrs, depth, out);
|
248
|
+
oj_code_attrs(obj, attrs, depth, out, true);
|
249
249
|
}
|
250
250
|
|
251
251
|
static ID year_id = 0;
|
@@ -273,7 +273,7 @@ date_alt(VALUE obj, int depth, Out out) {
|
|
273
273
|
attrs[2].value = rb_funcall(obj, day_id, 0);
|
274
274
|
attrs[3].value = rb_funcall(obj, start_id, 0);
|
275
275
|
|
276
|
-
oj_code_attrs(obj, attrs, depth, out);
|
276
|
+
oj_code_attrs(obj, attrs, depth, out, true);
|
277
277
|
}
|
278
278
|
|
279
279
|
static ID hour_id = 0;
|
@@ -313,7 +313,7 @@ datetime_alt(VALUE obj, int depth, Out out) {
|
|
313
313
|
attrs[6].value = rb_funcall(rb_funcall(obj, offset_id, 0), oj_to_s_id, 0);
|
314
314
|
attrs[7].value = rb_funcall(obj, start_id, 0);
|
315
315
|
|
316
|
-
oj_code_attrs(obj, attrs, depth, out);
|
316
|
+
oj_code_attrs(obj, attrs, depth, out, true);
|
317
317
|
}
|
318
318
|
|
319
319
|
static ID message_id = 0;
|
@@ -381,7 +381,7 @@ openstruct_alt(VALUE obj, int depth, Out out) {
|
|
381
381
|
}
|
382
382
|
attrs[0].value = rb_funcall(obj, table_id, 0);
|
383
383
|
|
384
|
-
oj_code_attrs(obj, attrs, depth, out);
|
384
|
+
oj_code_attrs(obj, attrs, depth, out, true);
|
385
385
|
}
|
386
386
|
|
387
387
|
static void
|
@@ -434,7 +434,7 @@ rational_alt(VALUE obj, int depth, Out out) {
|
|
434
434
|
attrs[0].value = rb_funcall(obj, numerator_id, 0);
|
435
435
|
attrs[1].value = rb_funcall(obj, denominator_id, 0);
|
436
436
|
|
437
|
-
oj_code_attrs(obj, attrs, depth, out);
|
437
|
+
oj_code_attrs(obj, attrs, depth, out, true);
|
438
438
|
}
|
439
439
|
|
440
440
|
static ID options_id = 0;
|
@@ -454,7 +454,7 @@ regexp_alt(VALUE obj, int depth, Out out) {
|
|
454
454
|
attrs[0].value = rb_funcall(obj, options_id, 0);
|
455
455
|
attrs[1].value = rb_funcall(obj, source_id, 0);
|
456
456
|
|
457
|
-
oj_code_attrs(obj, attrs, depth, out);
|
457
|
+
oj_code_attrs(obj, attrs, depth, out, true);
|
458
458
|
}
|
459
459
|
|
460
460
|
static void
|
@@ -469,7 +469,7 @@ time_alt(VALUE obj, int depth, Out out) {
|
|
469
469
|
attrs[0].num = ts.tv_sec;
|
470
470
|
attrs[1].num = ts.tv_nsec;
|
471
471
|
|
472
|
-
oj_code_attrs(obj, attrs, depth, out);
|
472
|
+
oj_code_attrs(obj, attrs, depth, out, true);
|
473
473
|
}
|
474
474
|
|
475
475
|
struct _Code oj_compat_codes[] = {
|
data/ext/oj/mimic_json.c
CHANGED
@@ -753,6 +753,8 @@ mimic_state(VALUE self) {
|
|
753
753
|
void
|
754
754
|
oj_mimic_json_methods(VALUE json) {
|
755
755
|
VALUE json_error;
|
756
|
+
VALUE generator;
|
757
|
+
VALUE ext;
|
756
758
|
|
757
759
|
rb_define_module_function(json, "create_id=", mimic_set_create_id, 1);
|
758
760
|
rb_define_module_function(json, "create_id", mimic_create_id, 0);
|
@@ -796,6 +798,22 @@ oj_mimic_json_methods(VALUE json) {
|
|
796
798
|
} else {
|
797
799
|
rb_define_class_under(json, "NestingError", json_error);
|
798
800
|
}
|
801
|
+
|
802
|
+
if (rb_const_defined_at(json, rb_intern("Ext"))) {
|
803
|
+
ext = rb_const_get_at(json, rb_intern("Ext"));
|
804
|
+
} else {
|
805
|
+
ext = rb_define_module_under(json, "Ext");
|
806
|
+
}
|
807
|
+
if (rb_const_defined_at(ext, rb_intern("Generator"))) {
|
808
|
+
generator = rb_const_get_at(ext, rb_intern("Generator"));
|
809
|
+
} else {
|
810
|
+
generator = rb_define_module_under(ext, "Generator");
|
811
|
+
}
|
812
|
+
if (!rb_const_defined_at(generator, rb_intern("State"))) {
|
813
|
+
rb_require("oj/state");
|
814
|
+
}
|
815
|
+
// Pull in the JSON::State mimic file.
|
816
|
+
state_class = rb_const_get_at(generator, rb_intern("State"));
|
799
817
|
}
|
800
818
|
|
801
819
|
/* Document-module: JSON
|
@@ -804,11 +822,9 @@ oj_mimic_json_methods(VALUE json) {
|
|
804
822
|
*/
|
805
823
|
VALUE
|
806
824
|
oj_define_mimic_json(int argc, VALUE *argv, VALUE self) {
|
807
|
-
VALUE ext;
|
808
825
|
VALUE dummy;
|
809
826
|
VALUE verbose;
|
810
827
|
VALUE json;
|
811
|
-
VALUE generator;
|
812
828
|
|
813
829
|
// Either set the paths to indicate JSON has been loaded or replaces the
|
814
830
|
// methods if it has been loaded.
|
@@ -832,23 +848,7 @@ oj_define_mimic_json(int argc, VALUE *argv, VALUE self) {
|
|
832
848
|
rb_funcall2(Oj, rb_intern("mimic_loaded"), 0, 0);
|
833
849
|
}
|
834
850
|
}
|
835
|
-
|
836
|
-
ext = rb_const_get_at(json, rb_intern("Ext"));
|
837
|
-
} else {
|
838
|
-
ext = rb_define_module_under(json, "Ext");
|
839
|
-
}
|
840
|
-
if (rb_const_defined_at(ext, rb_intern("Generator"))) {
|
841
|
-
generator = rb_const_get_at(ext, rb_intern("Generator"));
|
842
|
-
} else {
|
843
|
-
generator = rb_define_module_under(ext, "Generator");
|
844
|
-
}
|
845
|
-
if (!rb_const_defined_at(generator, rb_intern("State"))) {
|
846
|
-
rb_require("oj/state");
|
847
|
-
}
|
848
|
-
|
849
|
-
// convince Ruby that the json gem has already been loaded
|
850
|
-
// Pull in the JSON::State mimic file.
|
851
|
-
state_class = rb_const_get_at(generator, rb_intern("State"));
|
851
|
+
|
852
852
|
// TBD create all modules in mimic_loaded
|
853
853
|
|
854
854
|
oj_mimic_json_methods(json);
|
data/ext/oj/rails.c
CHANGED
@@ -898,7 +898,7 @@ oj_mimic_rails_init() {
|
|
898
898
|
rb_define_module_function(rails, "optimize", rails_optimize, -1);
|
899
899
|
rb_define_module_function(rails, "deoptimize", rails_deoptimize, -1);
|
900
900
|
rb_define_module_function(rails, "optimized?", rails_optimized, 1);
|
901
|
-
rb_define_module_function(rails, "mimic_JSON
|
901
|
+
rb_define_module_function(rails, "mimic_JSON", rails_mimic_json, 0);
|
902
902
|
|
903
903
|
rb_define_module_function(rails, "set_encoder", rails_set_encoder, 0);
|
904
904
|
rb_define_module_function(rails, "set_decoder", rails_set_decoder, 0);
|
data/ext/oj/string_writer.c
CHANGED
@@ -66,6 +66,10 @@ oj_str_writer_init(StrWriter sw) {
|
|
66
66
|
sw->out.opts = &sw->opts;
|
67
67
|
sw->out.indent = sw->opts.indent;
|
68
68
|
sw->out.depth = 0;
|
69
|
+
sw->out.argc = 0;
|
70
|
+
sw->out.argv = NULL;
|
71
|
+
sw->out.caller = 0;
|
72
|
+
sw->out.ropts = NULL;
|
69
73
|
}
|
70
74
|
|
71
75
|
void
|
@@ -140,24 +144,34 @@ oj_str_writer_push_array(StrWriter sw, const char *key) {
|
|
140
144
|
|
141
145
|
void
|
142
146
|
oj_str_writer_push_value(StrWriter sw, VALUE val, const char *key) {
|
147
|
+
Out out = &sw->out;
|
148
|
+
|
143
149
|
if (sw->keyWritten) {
|
144
150
|
sw->keyWritten = 0;
|
145
151
|
} else {
|
146
152
|
long size;
|
147
153
|
|
148
154
|
key_check(sw, key);
|
149
|
-
size = sw->depth *
|
150
|
-
assure_size(
|
155
|
+
size = sw->depth * out->indent + 3;
|
156
|
+
assure_size(out, size);
|
151
157
|
maybe_comma(sw);
|
152
158
|
if (0 < sw->depth) {
|
153
159
|
fill_indent(&sw->out, sw->depth);
|
154
160
|
}
|
155
161
|
if (0 != key) {
|
156
|
-
oj_dump_cstr(key, strlen(key), 0, 0,
|
157
|
-
*
|
162
|
+
oj_dump_cstr(key, strlen(key), 0, 0, out);
|
163
|
+
*out->cur++ = ':';
|
158
164
|
}
|
159
165
|
}
|
160
|
-
|
166
|
+
switch (out->opts->mode) {
|
167
|
+
case StrictMode: oj_dump_strict_val(val, sw->depth, out); break;
|
168
|
+
case NullMode: oj_dump_null_val(val, sw->depth, out); break;
|
169
|
+
case ObjectMode: oj_dump_obj_val(val, sw->depth, out); break;
|
170
|
+
case CompatMode: oj_dump_compat_val(val, sw->depth, out, Yes == out->opts->to_json); break;
|
171
|
+
case RailsMode: oj_dump_rails_val(val, sw->depth, out); break;
|
172
|
+
case CustomMode: oj_dump_custom_val(val, sw->depth, out, true); break;
|
173
|
+
default: oj_dump_custom_val(val, sw->depth, out, true); break;
|
174
|
+
}
|
161
175
|
}
|
162
176
|
|
163
177
|
void
|
@@ -236,7 +250,11 @@ str_writer_free(void *ptr) {
|
|
236
250
|
/* Document-method: new
|
237
251
|
* call-seq: new(io, options)
|
238
252
|
*
|
239
|
-
* Creates a new StringWriter.
|
253
|
+
* Creates a new StringWriter. Options are supported according the the
|
254
|
+
* specified mode or the mode in the default options. Note that if mimic_JSON
|
255
|
+
* or Oj.optimize_rails has not been called then the behavior of the modes may
|
256
|
+
* not be the same as if they were.
|
257
|
+
*
|
240
258
|
* - *io* [_IO_] stream to write to
|
241
259
|
* - *options* [_Hash_] formating options
|
242
260
|
*/
|
@@ -248,6 +266,8 @@ str_writer_new(int argc, VALUE *argv, VALUE self) {
|
|
248
266
|
if (1 == argc) {
|
249
267
|
oj_parse_options(argv[0], &sw->opts);
|
250
268
|
}
|
269
|
+
sw->out.argc = argc - 1;
|
270
|
+
sw->out.argv = argv + 1;
|
251
271
|
sw->out.indent = sw->opts.indent;
|
252
272
|
|
253
273
|
return Data_Wrap_Struct(oj_string_writer_class, 0, str_writer_free, sw);
|
data/lib/oj/version.rb
CHANGED
data/test/bug.rb
CHANGED
@@ -4,9 +4,12 @@
|
|
4
4
|
%w(lib ext test).each do |dir|
|
5
5
|
$LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
|
6
6
|
end
|
7
|
+
|
7
8
|
require 'rails'
|
9
|
+
require 'active_support/json'
|
8
10
|
require 'oj'
|
9
11
|
|
10
|
-
Oj.
|
12
|
+
Oj.optimize_rails
|
13
|
+
|
14
|
+
JSON.pretty_generate({'a'=>1,'b'=>[true,false]})
|
11
15
|
|
12
|
-
nil.to_json
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oj
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.1.
|
4
|
+
version: 3.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Peter Ohler
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-06-
|
11
|
+
date: 2017-06-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|