oj 3.3.9 → 3.3.10
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/custom.c +2 -0
- data/ext/oj/dump.c +1 -1
- data/ext/oj/dump_object.c +1 -1
- data/ext/oj/object.c +5 -5
- data/ext/oj/oj.c +12 -7
- data/ext/oj/oj.h +1 -0
- data/ext/oj/parse.c +2 -2
- data/ext/oj/rails.c +52 -2
- data/ext/oj/saj.c +2 -2
- data/lib/oj/version.rb +1 -1
- data/pages/Modes.md +11 -7
- data/test/bug.rb +16 -15
- data/test/test_compat.rb +4 -8
- data/test/test_custom.rb +4 -7
- data/test/test_file.rb +3 -3
- data/test/test_null.rb +2 -2
- data/test/test_object.rb +14 -6
- data/test/test_strict.rb +2 -2
- data/test/test_various.rb +2 -2
- data/test/test_wab.rb +2 -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: 687f7d149d0cf1490c71c850e9b899211bf93dff
|
4
|
+
data.tar.gz: e60c06c52ab2946307618cdc78a180ed2333f19b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '0287e158af4e2637f70aeaef9bd90fbdd92270ba8b94d58eb77f3371671ead837638440677a67f00880b1b0024098ea31530f843950c434154f72dfd844d8854'
|
7
|
+
data.tar.gz: 279a77556142e021b88e6e2b1b75ae93a11aa373dad3098f994559004ecfa4089ebd3514cd412b08004896438d014fde5a2c9dc27f87ad3558627920146870df
|
data/ext/oj/custom.c
CHANGED
@@ -42,6 +42,8 @@ bigdecimal_dump(VALUE obj, int depth, Out out) {
|
|
42
42
|
} else if (0 == strcasecmp("-Infinity", str)) {
|
43
43
|
str = oj_nan_str(obj, out->opts->dump_opts.nan_dump, out->opts->mode, false, &len);
|
44
44
|
oj_dump_raw(str, len, out);
|
45
|
+
} else if (No == out->opts->bigdec_as_num) {
|
46
|
+
oj_dump_cstr(str, len, 0, 0, out);
|
45
47
|
} else {
|
46
48
|
oj_dump_raw(str, len, out);
|
47
49
|
}
|
data/ext/oj/dump.c
CHANGED
@@ -830,7 +830,7 @@ oj_dump_cstr(const char *str, size_t cnt, bool is_sym, bool escape1, Out out) {
|
|
830
830
|
if (JXEsc == out->opts->escape_mode && 0 < str - orig && 0 != (0x80 & *(str - 1))) {
|
831
831
|
uint8_t c = (uint8_t)*(str - 1);
|
832
832
|
int i;
|
833
|
-
int scnt = str - orig;
|
833
|
+
int scnt = (int)(str - orig);
|
834
834
|
|
835
835
|
// Last utf-8 characters must be 0x10xxxxxx. The start must be
|
836
836
|
// 0x110xxxxx for 2 characters, 0x1110xxxx for 3, and 0x11110xxx for
|
data/ext/oj/dump_object.c
CHANGED
@@ -42,7 +42,7 @@ dump_data(VALUE obj, int depth, Out out, bool as_ok) {
|
|
42
42
|
const char *str = rb_string_value_ptr((VALUE*)&rstr);
|
43
43
|
int len = (int)RSTRING_LEN(rstr);
|
44
44
|
|
45
|
-
if (
|
45
|
+
if (No != out->opts->bigdec_as_num) {
|
46
46
|
oj_dump_raw(str, len, out);
|
47
47
|
} else if (0 == strcasecmp("Infinity", str)) {
|
48
48
|
str = oj_nan_str(obj, out->opts->dump_opts.nan_dump, out->opts->mode, true, &len);
|
data/ext/oj/object.c
CHANGED
@@ -341,7 +341,7 @@ hat_value(ParseInfo pi, Val parent, const char *key, size_t klen, volatile VALUE
|
|
341
341
|
volatile VALUE sc;
|
342
342
|
volatile VALUE e1;
|
343
343
|
int slen;
|
344
|
-
|
344
|
+
|
345
345
|
if (0 == len) {
|
346
346
|
oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "Invalid struct data");
|
347
347
|
return 1;
|
@@ -380,14 +380,14 @@ hat_value(ParseInfo pi, Val parent, const char *key, size_t klen, volatile VALUE
|
|
380
380
|
} else {
|
381
381
|
int i;
|
382
382
|
|
383
|
-
for (i = 0; i <
|
383
|
+
for (i = 0; i < len - 1; i++) {
|
384
384
|
rb_struct_aset(parent->val, INT2FIX(i), RARRAY_PTR(value)[i + 1]);
|
385
385
|
}
|
386
386
|
}
|
387
387
|
return 1;
|
388
388
|
} else if (3 <= klen && '#' == key[1]) {
|
389
389
|
volatile VALUE *a;
|
390
|
-
|
390
|
+
|
391
391
|
if (2 != len) {
|
392
392
|
oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "invalid hash pair");
|
393
393
|
return 1;
|
@@ -602,7 +602,7 @@ hash_set_value(ParseInfo pi, Val kval, VALUE value) {
|
|
602
602
|
if (3 <= klen && '^' == *key && '#' == key[1] && T_ARRAY == rb_type(value)) {
|
603
603
|
long len = RARRAY_LEN(value);
|
604
604
|
volatile VALUE *a = RARRAY_PTR(value);
|
605
|
-
|
605
|
+
|
606
606
|
if (2 != len) {
|
607
607
|
oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "invalid hash pair");
|
608
608
|
return;
|
@@ -683,7 +683,7 @@ array_append_cstr(ParseInfo pi, const char *str, size_t len, const char *orig) {
|
|
683
683
|
rb_ary_push(stack_peek(&pi->stack)->val, oj_circ_array_get(pi->circ_array, i));
|
684
684
|
return;
|
685
685
|
}
|
686
|
-
|
686
|
+
|
687
687
|
}
|
688
688
|
}
|
689
689
|
rb_ary_push(stack_peek(&pi->stack)->val, str_to_value(pi, str, len, orig));
|
data/ext/oj/oj.c
CHANGED
@@ -38,6 +38,7 @@ ID oj_array_end_id;
|
|
38
38
|
ID oj_array_start_id;
|
39
39
|
ID oj_as_json_id;
|
40
40
|
ID oj_begin_id;
|
41
|
+
ID oj_bigdecimal_id;
|
41
42
|
ID oj_end_id;
|
42
43
|
ID oj_exclude_end_id;
|
43
44
|
ID oj_error_id;
|
@@ -167,7 +168,7 @@ struct _Options oj_default_options = {
|
|
167
168
|
ObjectMode, // mode
|
168
169
|
Yes, // class_cache
|
169
170
|
UnixTime, // time_format
|
170
|
-
|
171
|
+
NotSet, // bigdec_as_num
|
171
172
|
AutoDec, // bigdec_load
|
172
173
|
No, // to_hash
|
173
174
|
No, // to_json
|
@@ -545,13 +546,16 @@ oj_parse_options(VALUE ropts, Options copts) {
|
|
545
546
|
}
|
546
547
|
}
|
547
548
|
for (o = ynos; 0 != o->attr; o++) {
|
548
|
-
if (
|
549
|
-
|
549
|
+
if (Qtrue == rb_funcall(ropts, oj_has_key_id, 1, o->sym)) {
|
550
|
+
v = rb_hash_lookup(ropts, o->sym);
|
551
|
+
if (Qnil == v) {
|
552
|
+
*o->attr = NotSet;
|
553
|
+
} else if (Qtrue == v) {
|
550
554
|
*o->attr = Yes;
|
551
555
|
} else if (Qfalse == v) {
|
552
556
|
*o->attr = No;
|
553
557
|
} else {
|
554
|
-
rb_raise(rb_eArgError, "%s must be true or
|
558
|
+
rb_raise(rb_eArgError, "%s must be true, false, or nil.", rb_id2name(SYM2ID(o->sym)));
|
555
559
|
}
|
556
560
|
}
|
557
561
|
}
|
@@ -1525,13 +1529,15 @@ Init_oj() {
|
|
1525
1529
|
oj_array_end_id = rb_intern("array_end");
|
1526
1530
|
oj_array_start_id = rb_intern("array_start");
|
1527
1531
|
oj_as_json_id = rb_intern("as_json");
|
1528
|
-
oj_error_id = rb_intern("error");
|
1529
1532
|
oj_begin_id = rb_intern("begin");
|
1533
|
+
oj_bigdecimal_id = rb_intern("BigDecimal");
|
1530
1534
|
oj_end_id = rb_intern("end");
|
1535
|
+
oj_error_id = rb_intern("error");
|
1531
1536
|
oj_exclude_end_id = rb_intern("exclude_end?");
|
1532
1537
|
oj_file_id = rb_intern("file?");
|
1533
1538
|
oj_fileno_id = rb_intern("fileno");
|
1534
1539
|
oj_ftype_id = rb_intern("ftype");
|
1540
|
+
oj_has_key_id = rb_intern("has_key?");
|
1535
1541
|
oj_hash_end_id = rb_intern("hash_end");
|
1536
1542
|
oj_hash_key_id = rb_intern("hash_key");
|
1537
1543
|
oj_hash_set_id = rb_intern("hash_set");
|
@@ -1548,8 +1554,8 @@ Init_oj() {
|
|
1548
1554
|
oj_replace_id = rb_intern("replace");
|
1549
1555
|
oj_stat_id = rb_intern("stat");
|
1550
1556
|
oj_string_id = rb_intern("string");
|
1551
|
-
oj_to_hash_id = rb_intern("to_hash");
|
1552
1557
|
oj_to_h_id = rb_intern("to_h");
|
1558
|
+
oj_to_hash_id = rb_intern("to_hash");
|
1553
1559
|
oj_to_json_id = rb_intern("to_json");
|
1554
1560
|
oj_to_s_id = rb_intern("to_s");
|
1555
1561
|
oj_to_sym_id = rb_intern("to_sym");
|
@@ -1561,7 +1567,6 @@ Init_oj() {
|
|
1561
1567
|
oj_utc_offset_id = rb_intern("utc_offset");
|
1562
1568
|
oj_utcq_id = rb_intern("utc?");
|
1563
1569
|
oj_write_id = rb_intern("write");
|
1564
|
-
oj_has_key_id = rb_intern("has_key?");
|
1565
1570
|
|
1566
1571
|
rb_require("oj/bag");
|
1567
1572
|
rb_require("oj/error");
|
data/ext/oj/oj.h
CHANGED
data/ext/oj/parse.c
CHANGED
@@ -757,7 +757,7 @@ oj_num_as_value(NumInfo ni) {
|
|
757
757
|
}
|
758
758
|
} else { // decimal
|
759
759
|
if (ni->big) {
|
760
|
-
rnum = rb_funcall(
|
760
|
+
rnum = rb_funcall(rb_cObject, oj_bigdecimal_id, 1, rb_str_new(ni->str, ni->len));
|
761
761
|
if (ni->no_big) {
|
762
762
|
rnum = rb_funcall(rnum, rb_intern("to_f"), 0);
|
763
763
|
}
|
@@ -770,7 +770,7 @@ oj_num_as_value(NumInfo ni) {
|
|
770
770
|
// 15 digits. This attempts to fix those few cases where this
|
771
771
|
// occurs.
|
772
772
|
if ((long double)INT64_MAX > d && (int64_t)d != (ni->i * ni->div + ni->num)) {
|
773
|
-
rnum = rb_funcall(
|
773
|
+
rnum = rb_funcall(rb_cObject, oj_bigdecimal_id, 1, rb_str_new(ni->str, ni->len));
|
774
774
|
if (ni->no_big) {
|
775
775
|
rnum = rb_funcall(rnum, rb_intern("to_f"), 0);
|
776
776
|
}
|
data/ext/oj/rails.c
CHANGED
@@ -212,6 +212,8 @@ dump_bigdecimal(VALUE obj, int depth, Out out, bool as_ok) {
|
|
212
212
|
|
213
213
|
if ('I' == *str || 'N' == *str || ('-' == *str && 'I' == str[1])) {
|
214
214
|
oj_dump_nil(Qnil, depth, out, false);
|
215
|
+
} else if (Yes == out->opts->bigdec_as_num) {
|
216
|
+
oj_dump_raw(str, RSTRING_LEN(rstr), out);
|
215
217
|
} else {
|
216
218
|
oj_dump_cstr(str, RSTRING_LEN(rstr), 0, 0, out);
|
217
219
|
}
|
@@ -475,17 +477,65 @@ encoder_new(int argc, VALUE *argv, VALUE self) {
|
|
475
477
|
return Data_Wrap_Struct(encoder_class, encoder_mark, encoder_free, e);
|
476
478
|
}
|
477
479
|
|
480
|
+
static VALUE
|
481
|
+
resolve_classpath(const char *name) {
|
482
|
+
char class_name[1024];
|
483
|
+
VALUE clas;
|
484
|
+
char *end = class_name + sizeof(class_name) - 1;
|
485
|
+
char *s;
|
486
|
+
const char *n = name;
|
487
|
+
ID cid;
|
488
|
+
|
489
|
+
clas = rb_cObject;
|
490
|
+
for (s = class_name; '\0' != *n; n++) {
|
491
|
+
if (':' == *n) {
|
492
|
+
*s = '\0';
|
493
|
+
n++;
|
494
|
+
if (':' != *n) {
|
495
|
+
return Qnil;
|
496
|
+
}
|
497
|
+
cid = rb_intern(class_name);
|
498
|
+
if (!rb_const_defined_at(clas, cid)) {
|
499
|
+
return Qnil;
|
500
|
+
}
|
501
|
+
clas = rb_const_get_at(clas, cid);
|
502
|
+
s = class_name;
|
503
|
+
} else if (end <= s) {
|
504
|
+
return Qnil;
|
505
|
+
} else {
|
506
|
+
*s++ = *n;
|
507
|
+
}
|
508
|
+
}
|
509
|
+
*s = '\0';
|
510
|
+
cid = rb_intern(class_name);
|
511
|
+
if (!rb_const_defined_at(clas, cid)) {
|
512
|
+
return Qnil;
|
513
|
+
}
|
514
|
+
clas = rb_const_get_at(clas, cid);
|
515
|
+
|
516
|
+
return clas;
|
517
|
+
}
|
518
|
+
|
478
519
|
static void
|
479
520
|
optimize(int argc, VALUE *argv, ROptTable rot, bool on) {
|
480
521
|
ROpt ro;
|
481
|
-
|
522
|
+
|
482
523
|
if (0 == argc) {
|
483
|
-
int
|
524
|
+
int i;
|
525
|
+
NamedFunc nf;
|
526
|
+
VALUE clas;
|
484
527
|
|
485
528
|
oj_rails_hash_opt = on;
|
486
529
|
oj_rails_array_opt = on;
|
487
530
|
oj_rails_float_opt = on;
|
488
531
|
|
532
|
+
for (nf = dump_map; NULL != nf->name; nf++) {
|
533
|
+
if (Qnil != (clas = resolve_classpath(nf->name))) {
|
534
|
+
if (NULL == oj_rails_get_opt(rot, clas)) {
|
535
|
+
create_opt(rot, clas);
|
536
|
+
}
|
537
|
+
}
|
538
|
+
}
|
489
539
|
for (i = 0; i < rot->len; i++) {
|
490
540
|
rot->table[i].on = on;
|
491
541
|
}
|
data/ext/oj/saj.c
CHANGED
@@ -381,7 +381,7 @@ read_num(ParseInfo pi, const char *key) {
|
|
381
381
|
|
382
382
|
*pi->s = '\0';
|
383
383
|
if (pi->has_add_value) {
|
384
|
-
call_add_value(pi->handler, rb_funcall(
|
384
|
+
call_add_value(pi->handler, rb_funcall(rb_cObject, oj_bigdecimal_id, 1, rb_str_new2(start)), key);
|
385
385
|
}
|
386
386
|
*pi->s = c;
|
387
387
|
} else {
|
@@ -399,7 +399,7 @@ read_num(ParseInfo pi, const char *key) {
|
|
399
399
|
|
400
400
|
*pi->s = '\0';
|
401
401
|
if (pi->has_add_value) {
|
402
|
-
call_add_value(pi->handler, rb_funcall(
|
402
|
+
call_add_value(pi->handler, rb_funcall(rb_cObject, oj_bigdecimal_id, 1, rb_str_new2(start)), key);
|
403
403
|
}
|
404
404
|
*pi->s = c;
|
405
405
|
} else {
|
data/lib/oj/version.rb
CHANGED
data/pages/Modes.md
CHANGED
@@ -94,7 +94,7 @@ information.
|
|
94
94
|
| :array_nl | String | | | | | | x | |
|
95
95
|
| :ascii_only | Boolean | x | x | 2 | 2 | x | x | |
|
96
96
|
| :auto_define | Boolean | | | | | x | x | |
|
97
|
-
| :bigdecimal_as_decimal | Boolean | | | |
|
97
|
+
| :bigdecimal_as_decimal | Boolean | | | | 3 | x | x | |
|
98
98
|
| :bigdecimal_load | Boolean | | | | | | x | |
|
99
99
|
| :circular | Boolean | x | x | x | x | x | x | |
|
100
100
|
| :class_cache | Boolean | | | | | x | x | |
|
@@ -104,17 +104,17 @@ information.
|
|
104
104
|
| :escape_mode | Symbol | | | | | | x | |
|
105
105
|
| :float_precision | Fixnum | x | x | | | | x | |
|
106
106
|
| :hash_class | Class | | | x | x | | x | |
|
107
|
-
| :indent | Integer | x | x | 3 |
|
107
|
+
| :indent | Integer | x | x | 3 | 4 | x | x | x |
|
108
108
|
| :indent_str | String | | | x | x | | x | |
|
109
109
|
| :match_string | Hash | | | x | x | | x | |
|
110
|
-
| :max_nesting | Fixnum | 4 | 4 | x | |
|
110
|
+
| :max_nesting | Fixnum | 4 | 4 | x | | 5 | 4 | |
|
111
111
|
| :mode | Symbol | - | - | - | - | - | - | |
|
112
112
|
| :nan | Symbol | | | | | | x | |
|
113
113
|
| :nilnil | Boolean | | | | | | x | |
|
114
114
|
| :object_class | Class | | | x | | | x | |
|
115
115
|
| :object_nl | String | | | x | x | | x | |
|
116
116
|
| :omit_nil | Boolean | x | x | x | x | x | x | |
|
117
|
-
| :quirks_mode | Boolean | | |
|
117
|
+
| :quirks_mode | Boolean | | | 6 | | | x | |
|
118
118
|
| :second_precision | Fixnum | | | | | x | x | |
|
119
119
|
| :space | String | | | x | x | | x | |
|
120
120
|
| :space_before | String | | | x | x | | x | |
|
@@ -129,19 +129,23 @@ information.
|
|
129
129
|
|
130
130
|
2. The :ascii_only options is an undocumented json gem option.
|
131
131
|
|
132
|
-
3.
|
132
|
+
3. By default the bigdecimal_as decimal is not set and the default encoding
|
133
|
+
for Rails is as a string. Setting the value to true will encode a
|
134
|
+
BigDecimal as a number which breaks compatibility.
|
135
|
+
|
136
|
+
4. The integer indent value in the default options will be honored by since
|
133
137
|
the json gem expects a String type the indent in calls to 'to_json()',
|
134
138
|
'Oj.generate()', or 'Oj.generate_fast()' expect a String and not an
|
135
139
|
integer.
|
136
140
|
|
137
|
-
|
141
|
+
5. The max_nesting option is for the json gem and rails only. It exists for
|
138
142
|
compatibility. For other Oj dump modes the maximum nesting is set to over
|
139
143
|
1000. If reference loops exist in the object being dumped then using the
|
140
144
|
`:circular` option is a far better choice. It adds a slight overhead but
|
141
145
|
detects an object that appears more than once in a dump and does not dump
|
142
146
|
that object a second time.
|
143
147
|
|
144
|
-
|
148
|
+
6. The quirks mode option is no longer supported in the most recent json
|
145
149
|
gem. It is supported by Oj for backward compatibility with older json gem
|
146
150
|
versions.
|
147
151
|
|
data/test/bug.rb
CHANGED
@@ -5,20 +5,21 @@
|
|
5
5
|
$LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
|
6
6
|
end
|
7
7
|
|
8
|
+
require 'rails'
|
9
|
+
require 'active_support'
|
10
|
+
require 'active_support/json'
|
8
11
|
require 'oj'
|
9
12
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
puts Oj.dump(data, mode: :object)
|
13
|
+
x = {"a": BigDecimal("1.1"), "t": Time.now}
|
14
|
+
|
15
|
+
#ActiveSupport.encode_big_decimal_as_string = false
|
16
|
+
|
17
|
+
Oj.optimize_rails
|
18
|
+
|
19
|
+
puts "to_json #{x.to_json}"
|
20
|
+
|
21
|
+
Oj.default_options = { bigdecimal_as_decimal: true}
|
22
|
+
#puts Oj.default_options
|
23
|
+
|
24
|
+
puts "to_json #{x.to_json}"
|
25
|
+
|
data/test/test_compat.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# encoding:
|
2
|
+
# encoding: utf-8
|
3
3
|
|
4
4
|
$: << File.dirname(__FILE__)
|
5
5
|
$oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
|
@@ -274,13 +274,9 @@ class CompatJuice < Minitest::Test
|
|
274
274
|
def test_bigdecimal
|
275
275
|
# BigDecimals are dumped as strings and can not be restored to the
|
276
276
|
# original value.
|
277
|
-
json = Oj.dump(BigDecimal
|
278
|
-
|
279
|
-
|
280
|
-
assert_equal('"0.314159265358979323846e1"', json)
|
281
|
-
else
|
282
|
-
assert_equal('"0.314159265358979323846E1"', json)
|
283
|
-
end
|
277
|
+
json = Oj.dump(BigDecimal('3.14159265358979323846'))
|
278
|
+
# 2.4.0 changes the exponent to lowercase
|
279
|
+
assert_equal('"0.314159265358979323846e1"', json.downcase)
|
284
280
|
end
|
285
281
|
|
286
282
|
def test_infinity
|
data/test/test_custom.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
-
# encoding:
|
2
|
+
# encoding: utf-8
|
3
3
|
|
4
4
|
$: << File.dirname(__FILE__)
|
5
5
|
$oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
|
@@ -203,12 +203,9 @@ class CustomJuice < Minitest::Test
|
|
203
203
|
end
|
204
204
|
|
205
205
|
def test_bigdecimal
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
assert_equal('0.314159265358979323846E1', Oj.dump(BigDecimal.new('3.14159265358979323846'), :bigdecimal_load => true))
|
210
|
-
end
|
211
|
-
dump_and_load(BigDecimal.new('3.14159265358979323846'), false, :bigdecimal_load => true)
|
206
|
+
assert_equal('0.314159265358979323846e1', Oj.dump(BigDecimal('3.14159265358979323846'), bigdecimal_as_decimal: true).downcase())
|
207
|
+
assert_equal('"0.314159265358979323846e1"', Oj.dump(BigDecimal('3.14159265358979323846'), bigdecimal_as_decimal: false).downcase())
|
208
|
+
dump_and_load(BigDecimal('3.14159265358979323846'), false, :bigdecimal_load => true)
|
212
209
|
end
|
213
210
|
|
214
211
|
def test_object
|
data/test/test_file.rb
CHANGED
@@ -184,20 +184,20 @@ class FileJuice < Minitest::Test
|
|
184
184
|
def test_bigdecimal_strict
|
185
185
|
mode = Oj.default_options[:mode]
|
186
186
|
Oj.default_options = {:mode => :strict}
|
187
|
-
dump_and_load(BigDecimal
|
187
|
+
dump_and_load(BigDecimal('3.14159265358979323846'), false)
|
188
188
|
Oj.default_options = {:mode => mode}
|
189
189
|
end
|
190
190
|
|
191
191
|
def test_bigdecimal_null
|
192
192
|
mode = Oj.default_options[:mode]
|
193
193
|
Oj.default_options = {:mode => :null}
|
194
|
-
dump_and_load(BigDecimal
|
194
|
+
dump_and_load(BigDecimal('3.14159265358979323846'), false)
|
195
195
|
Oj.default_options = {:mode => mode}
|
196
196
|
end
|
197
197
|
|
198
198
|
def test_bigdecimal_object
|
199
199
|
Oj.default_options = {:mode => :object}
|
200
|
-
dump_and_load(BigDecimal
|
200
|
+
dump_and_load(BigDecimal('3.14159265358979323846'), false)
|
201
201
|
end
|
202
202
|
|
203
203
|
# Date
|
data/test/test_null.rb
CHANGED
@@ -208,11 +208,11 @@ class NullJuice < Minitest::Test
|
|
208
208
|
# BigDecimal
|
209
209
|
def test_bigdecimal_strict
|
210
210
|
Oj.default_options = { :bigdecimal_load => true}
|
211
|
-
dump_and_load(BigDecimal
|
211
|
+
dump_and_load(BigDecimal('3.14159265358979323846'), false)
|
212
212
|
end
|
213
213
|
|
214
214
|
def test_bigdecimal_load
|
215
|
-
orig = BigDecimal
|
215
|
+
orig = BigDecimal('80.51')
|
216
216
|
json = Oj.dump(orig, :mode => :strict, :bigdecimal_as_decimal => true)
|
217
217
|
bg = Oj.load(json, :mode => :strict, :bigdecimal_load => true)
|
218
218
|
assert_equal(BigDecimal, bg.class)
|
data/test/test_object.rb
CHANGED
@@ -345,19 +345,19 @@ class ObjectJuice < Minitest::Test
|
|
345
345
|
|
346
346
|
# BigDecimal
|
347
347
|
def test_bigdecimal_object
|
348
|
-
dump_and_load(BigDecimal
|
348
|
+
dump_and_load(BigDecimal('3.14159265358979323846'), false)
|
349
349
|
end
|
350
350
|
|
351
351
|
def test_bigdecimal_load
|
352
|
-
orig = BigDecimal
|
352
|
+
orig = BigDecimal('80.51')
|
353
353
|
json = Oj.dump(orig, :mode => :object, :bigdecimal_as_decimal => true)
|
354
354
|
bg = Oj.load(json, :mode => :object, :bigdecimal_load => true)
|
355
355
|
assert_equal(BigDecimal, bg.class)
|
356
356
|
assert_equal(orig, bg)
|
357
357
|
# Infinity is the same for Float and BigDecimal
|
358
|
-
json = Oj.dump(BigDecimal
|
358
|
+
json = Oj.dump(BigDecimal('Infinity'), :mode => :object)
|
359
359
|
assert_equal('Infinity', json)
|
360
|
-
json = Oj.dump(BigDecimal
|
360
|
+
json = Oj.dump(BigDecimal('-Infinity'), :mode => :object)
|
361
361
|
assert_equal('-Infinity', json)
|
362
362
|
end
|
363
363
|
|
@@ -805,6 +805,14 @@ class ObjectJuice < Minitest::Test
|
|
805
805
|
assert_equal(h2['b'].__id__, h2.__id__)
|
806
806
|
end
|
807
807
|
|
808
|
+
|
809
|
+
def test_json_object_missing_fields
|
810
|
+
json = %{{ "^u": [ "ObjectJuice::Stuck",1]}}
|
811
|
+
|
812
|
+
obj = Oj.load(json, mode: :object)
|
813
|
+
assert_nil(obj['b'])
|
814
|
+
end
|
815
|
+
|
808
816
|
def test_circular_array
|
809
817
|
a = [7]
|
810
818
|
a << a
|
@@ -895,11 +903,11 @@ class ObjectJuice < Minitest::Test
|
|
895
903
|
json = Oj.dump(jam, :omit_nil => true, :mode => :object)
|
896
904
|
assert_equal(%|{"^o":"ObjectJuice::Jam","x":{"a":1}}|, json)
|
897
905
|
end
|
898
|
-
|
906
|
+
|
899
907
|
def test_odd_date
|
900
908
|
dump_and_load(Date.new(2012, 6, 19), false)
|
901
909
|
end
|
902
|
-
|
910
|
+
|
903
911
|
def test_odd_datetime
|
904
912
|
dump_and_load(DateTime.new(2012, 6, 19, 13, 5, Rational(4, 3)), false)
|
905
913
|
dump_and_load(DateTime.new(2012, 6, 19, 13, 5, Rational(7123456789, 1000000000)), false)
|
data/test/test_strict.rb
CHANGED
@@ -217,11 +217,11 @@ class StrictJuice < Minitest::Test
|
|
217
217
|
# BigDecimal
|
218
218
|
def test_bigdecimal_strict
|
219
219
|
Oj.default_options = { :bigdecimal_load => true}
|
220
|
-
dump_and_load(BigDecimal
|
220
|
+
dump_and_load(BigDecimal('3.14159265358979323846'), false)
|
221
221
|
end
|
222
222
|
|
223
223
|
def test_bigdecimal_load
|
224
|
-
orig = BigDecimal
|
224
|
+
orig = BigDecimal('80.51')
|
225
225
|
json = Oj.dump(orig, :mode => :strict, :bigdecimal_as_decimal => true)
|
226
226
|
bg = Oj.load(json, :mode => :strict, :bigdecimal_load => true)
|
227
227
|
assert_equal(BigDecimal, bg.class)
|
data/test/test_various.rb
CHANGED
@@ -486,13 +486,13 @@ class Juice < Minitest::Test
|
|
486
486
|
def test_bigdecimal_null
|
487
487
|
mode = Oj.default_options[:mode]
|
488
488
|
Oj.default_options = {:mode => :null}
|
489
|
-
dump_and_load(BigDecimal
|
489
|
+
dump_and_load(BigDecimal('3.14159265358979323846'), false)
|
490
490
|
Oj.default_options = {:mode => mode}
|
491
491
|
end
|
492
492
|
|
493
493
|
def test_infinity
|
494
494
|
n = Oj.load('Infinity', :mode => :object)
|
495
|
-
assert_equal(BigDecimal
|
495
|
+
assert_equal(BigDecimal('Infinity').to_f, n);
|
496
496
|
x = Oj.load('Infinity', :mode => :compat)
|
497
497
|
assert_equal('Infinity', x.to_s)
|
498
498
|
end
|
data/test/test_wab.rb
CHANGED
@@ -157,11 +157,11 @@ class WabJuice < Minitest::Test
|
|
157
157
|
|
158
158
|
# BigDecimal
|
159
159
|
def test_bigdecimal_wab
|
160
|
-
dump_and_load(BigDecimal
|
160
|
+
dump_and_load(BigDecimal('3.14159265358979323846'), false)
|
161
161
|
end
|
162
162
|
|
163
163
|
def test_bigdecimal_load
|
164
|
-
orig = BigDecimal
|
164
|
+
orig = BigDecimal('80.51')
|
165
165
|
json = Oj.dump(orig, mode: :wab)
|
166
166
|
bg = Oj.load(json, :mode => :wab, :bigdecimal_load => true)
|
167
167
|
assert_equal(BigDecimal, bg.class)
|
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.3.
|
4
|
+
version: 3.3.10
|
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-
|
11
|
+
date: 2017-12-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|