oj 3.10.0 → 3.10.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 62a52be7754c5ef34c3006fb28fa918cb18f23c26ffa94e8daedf05396bbe0fb
4
- data.tar.gz: 9cf9cfab00cf1e28f8b42c6d3e88ee6a2a785093cc024c558eeceb25eaf39cd1
3
+ metadata.gz: 3dd1cae4ccf720f35b777913213b66466c7d9752055c60d828cdf681956731a3
4
+ data.tar.gz: e913c57a4619bfbea97144f6f4783219aca294e598c8c6449ddfc6cb997b46f7
5
5
  SHA512:
6
- metadata.gz: 931cf30643fc1be050ec4f3c0c69f85b643b073e7bd5d16c5c8a5431c8d3701ae73fc5b68311246f2db993fa1c3e40b6169978f10b377a947cc937a7d26afd6e
7
- data.tar.gz: 779d173d00513d830f825cc9e0f51a5a066beece8fe9289d1face779c34210d6f7506e8e8af380fc5f2d3c2dd727b46f14cc985d4a2867e3a71fb1de4217361a
6
+ metadata.gz: dc0b7bd0e9ea90e69eda6a6205c09540e2217f9ccdcb3c6e937fb82e4b979fada30a028b64559ac5dfddc22afb9d4302669de35315bb5c5392ad100a373bb472
7
+ data.tar.gz: 8d8ad9eeb68fb2d058c3f499ad51fc8c50d3349b36a237769f996a43de58449fbae36d3bff82c6be6a16828331f12aa19df6a1ef90b5bdff78ecdf732450a268
@@ -65,7 +65,7 @@ hash_set_cstr(ParseInfo pi, Val kval, const char *str, size_t len, const char *o
65
65
  static VALUE
66
66
  start_hash(ParseInfo pi) {
67
67
  volatile VALUE h;
68
-
68
+
69
69
  if (Qnil != pi->options.hash_class) {
70
70
  h = rb_class_new_instance(0, NULL, pi->options.hash_class);
71
71
  } else {
@@ -87,7 +87,7 @@ end_hash(struct _parseInfo *pi) {
87
87
  clas = oj_name2class(pi, parent->classname, parent->clen, 0, rb_eArgError);
88
88
  if (Qundef != clas) { // else an error
89
89
  ID creatable = rb_intern("json_creatable?");
90
-
90
+
91
91
  if (!rb_respond_to(clas, creatable) || Qtrue == rb_funcall(clas, creatable, 0)) {
92
92
  parent->val = rb_funcall(clas, oj_json_create_id, 1, parent->val);
93
93
  }
@@ -146,7 +146,7 @@ add_num(ParseInfo pi, NumInfo ni) {
146
146
  static void
147
147
  hash_set_num(struct _parseInfo *pi, Val parent, NumInfo ni) {
148
148
  volatile VALUE rval = oj_num_as_value(ni);
149
-
149
+
150
150
  if (!oj_use_hash_alt && rb_cHash != rb_obj_class(parent->val)) {
151
151
  // The rb_hash_set would still work but the unit tests for the
152
152
  // json gem require the less efficient []= method be called to set
@@ -192,7 +192,7 @@ static void
192
192
  array_append_num(ParseInfo pi, NumInfo ni) {
193
193
  Val parent = stack_peek(&pi->stack);
194
194
  volatile VALUE rval = oj_num_as_value(ni);
195
-
195
+
196
196
  if (!oj_use_array_alt && rb_cArray != rb_obj_class(parent->val)) {
197
197
  // The rb_ary_push would still work but the unit tests for the json
198
198
  // gem require the less efficient << method be called to push the
@@ -274,7 +274,7 @@ oj_compat_load(int argc, VALUE *argv, VALUE self) {
274
274
  pi.options.nilnil = Yes;
275
275
  pi.options.empty_string = Yes;
276
276
  oj_set_compat_callbacks(&pi);
277
-
277
+
278
278
  if (T_STRING == rb_type(*argv)) {
279
279
  return oj_pi_parse(argc, argv, &pi, 0, 0, false);
280
280
  } else {
@@ -297,7 +297,8 @@ static struct _code codes[] = {
297
297
  };
298
298
 
299
299
  static int
300
- hash_cb(VALUE key, VALUE value, Out out) {
300
+ hash_cb(VALUE key, VALUE value, VALUE ov) {
301
+ Out out = (Out)ov;
301
302
  int depth = out->depth;
302
303
 
303
304
  if (oj_dump_ignore(out->opts, value)) {
@@ -592,7 +593,8 @@ dump_common(VALUE obj, int depth, Out out) {
592
593
  }
593
594
 
594
595
  static int
595
- dump_attr_cb(ID key, VALUE value, Out out) {
596
+ dump_attr_cb(ID key, VALUE value, VALUE ov) {
597
+ Out out = (Out)ov;
596
598
  int depth = out->depth;
597
599
  size_t size;
598
600
  const char *attr;
@@ -648,7 +648,8 @@ dump_float(VALUE obj, int depth, Out out, bool as_ok) {
648
648
  }
649
649
 
650
650
  static int
651
- hash_cb(VALUE key, VALUE value, Out out) {
651
+ hash_cb(VALUE key, VALUE value, VALUE ov) {
652
+ Out out = (Out)ov;
652
653
  int depth = out->depth;
653
654
 
654
655
  if (out->omit_nil && Qnil == value) {
@@ -224,7 +224,8 @@ dump_sym(VALUE obj, int depth, Out out, bool as_ok) {
224
224
  }
225
225
 
226
226
  static int
227
- hash_cb(VALUE key, VALUE value, Out out) {
227
+ hash_cb(VALUE key, VALUE value, VALUE ov) {
228
+ Out out = (Out)ov;
228
229
  int depth = out->depth;
229
230
  long size = depth * out->indent + 1;
230
231
 
@@ -348,7 +349,8 @@ dump_hash_class(VALUE obj, VALUE clas, int depth, Out out) {
348
349
 
349
350
  #ifdef HAVE_RB_IVAR_FOREACH
350
351
  static int
351
- dump_attr_cb(ID key, VALUE value, Out out) {
352
+ dump_attr_cb(ID key, VALUE value, VALUE ov) {
353
+ Out out = (Out)ov;
352
354
  int depth = out->depth;
353
355
  size_t size = depth * out->indent + 1;
354
356
  const char *attr = rb_id2name(key);
@@ -45,7 +45,7 @@ dump_float(VALUE obj, int depth, Out out, bool as_ok) {
45
45
  cnt = 3;
46
46
  } else {
47
47
  NanDump nd = out->opts->dump_opts.nan_dump;
48
-
48
+
49
49
  if (AutoNan == nd) {
50
50
  nd = RaiseNan;
51
51
  }
@@ -195,11 +195,12 @@ dump_array(VALUE a, int depth, Out out, bool as_ok) {
195
195
  }
196
196
 
197
197
  static int
198
- hash_cb(VALUE key, VALUE value, Out out) {
198
+ hash_cb(VALUE key, VALUE value, VALUE ov) {
199
+ Out out = (Out)ov;
199
200
  int depth = out->depth;
200
201
  long size;
201
202
  int rtype = rb_type(key);
202
-
203
+
203
204
  if (rtype != T_STRING && rtype != T_SYMBOL) {
204
205
  rb_raise(rb_eTypeError, "In :strict and :null mode all Hash keys must be Strings or Symbols, not %s.\n", rb_class2name(rb_obj_class(key)));
205
206
  }
@@ -359,7 +360,7 @@ static DumpFunc strict_funcs[] = {
359
360
  void
360
361
  oj_dump_strict_val(VALUE obj, int depth, Out out) {
361
362
  int type = rb_type(obj);
362
-
363
+
363
364
  if (Yes == out->opts->trace) {
364
365
  oj_trace("dump", obj, __FILE__, __LINE__, depth, TraceIn);
365
366
  }
@@ -408,7 +409,7 @@ static DumpFunc null_funcs[] = {
408
409
  void
409
410
  oj_dump_null_val(VALUE obj, int depth, Out out) {
410
411
  int type = rb_type(obj);
411
-
412
+
412
413
  if (Yes == out->opts->trace) {
413
414
  oj_trace("dump", obj, __FILE__, __LINE__, depth, TraceOut);
414
415
  }
@@ -42,6 +42,11 @@ end
42
42
 
43
43
  $CPPFLAGS += ' -Wall'
44
44
  #puts "*** $CPPFLAGS: #{$CPPFLAGS}"
45
+ # Adding the __attribute__ flag only works with gcc compilers and even then it
46
+ # does not work to check args with varargs so just remove the check.
47
+ CONFIG['warnflags'].slice!(/ -Wsuggest-attribute=format/)
48
+ CONFIG['warnflags'].slice!(/ -Wdeclaration-after-statement/)
49
+ CONFIG['warnflags'].slice!(/ -Wmissing-noreturn/)
45
50
 
46
51
  create_makefile(File.join(extension_name, extension_name))
47
52
 
@@ -199,6 +199,7 @@ mimic_dump(int argc, VALUE *argv, VALUE self) {
199
199
  struct _out out;
200
200
  struct _options copts = oj_default_options;
201
201
  VALUE rstr;
202
+ VALUE active_hack[1];
202
203
 
203
204
  copts.str_rx.head = NULL;
204
205
  copts.str_rx.tail = NULL;
@@ -216,6 +217,7 @@ mimic_dump(int argc, VALUE *argv, VALUE self) {
216
217
  */
217
218
  copts.dump_opts.max_depth = MAX_DEPTH; // when using dump there is no limit
218
219
  out.omit_nil = copts.dump_opts.omit_nil;
220
+
219
221
  if (2 <= argc) {
220
222
  int limit;
221
223
 
@@ -230,7 +232,15 @@ mimic_dump(int argc, VALUE *argv, VALUE self) {
230
232
  copts.dump_opts.max_depth = limit;
231
233
  }
232
234
  }
233
- oj_dump_obj_to_json(*argv, &copts, &out);
235
+ // ActiveSupport in active_support/core_ext/object/json.rb check the
236
+ // optional argument type to to_json and it the argument is a
237
+ // ::JSON::State it calls the JSON gem code otherwise it calls the active
238
+ // support encoder code. To make sure the desired branch is called a
239
+ // default ::JSON::State argument is passed in. Basically a hack to get
240
+ // around the active support hack so two wrongs make a right this time.
241
+ active_hack[0] = rb_funcall(state_class, oj_new_id, 0);
242
+ oj_dump_obj_to_json_using_params(*argv, &copts, &out, 1, active_hack);
243
+
234
244
  if (0 == out.buf) {
235
245
  rb_raise(rb_eNoMemError, "Not enough memory.");
236
246
  }
@@ -766,7 +766,9 @@ oj_parse_options(VALUE ropts, Options copts) {
766
766
  }
767
767
 
768
768
  static int
769
- match_string_cb(VALUE key, VALUE value, RxClass rc) {
769
+ match_string_cb(VALUE key, VALUE value, VALUE rx) {
770
+ RxClass rc = (RxClass)rx;
771
+
770
772
  if (T_CLASS != rb_type(value)) {
771
773
  rb_raise(rb_eArgError, "for :match_string, the hash values must be a Class.");
772
774
  }
@@ -740,7 +740,7 @@ oj_parse2(ParseInfo pi) {
740
740
  }
741
741
 
742
742
  static VALUE
743
- rescue_big_decimal(VALUE str) {
743
+ rescue_big_decimal(VALUE str, VALUE ignore) {
744
744
  rb_raise(oj_parse_error_class, "Invalid value for BigDecimal()");
745
745
  return Qnil;
746
746
  }
@@ -87,7 +87,8 @@ copy_opts(ROptTable src, ROptTable dest) {
87
87
  }
88
88
 
89
89
  static int
90
- dump_attr_cb(ID key, VALUE value, Out out) {
90
+ dump_attr_cb(ID key, VALUE value, VALUE ov) {
91
+ Out out = (Out)ov;
91
92
  int depth = out->depth;
92
93
  size_t size = depth * out->indent + 1;
93
94
  const char *attr = rb_id2name(key);
@@ -1011,9 +1012,11 @@ rails_encode(int argc, VALUE *argv, VALUE self) {
1011
1012
  }
1012
1013
  }
1013
1014
 
1015
+ // TBD provide a get function as well
1014
1016
  static VALUE
1015
1017
  rails_use_standard_json_time_format(VALUE self, VALUE state) {
1016
1018
  if (Qtrue == state || Qfalse == state) {
1019
+ // no change needed
1017
1020
  } else if (Qnil == state) {
1018
1021
  state = Qfalse;
1019
1022
  } else {
@@ -1025,6 +1028,11 @@ rails_use_standard_json_time_format(VALUE self, VALUE state) {
1025
1028
  return state;
1026
1029
  }
1027
1030
 
1031
+ static VALUE
1032
+ rails_use_standard_json_time_format_get(VALUE self) {
1033
+ return xml_time ? Qtrue : Qfalse;
1034
+ }
1035
+
1028
1036
  static VALUE
1029
1037
  rails_escape_html_entities_in_json(VALUE self, VALUE state) {
1030
1038
  rb_iv_set(self, "@escape_html_entities_in_json", state);
@@ -1033,6 +1041,11 @@ rails_escape_html_entities_in_json(VALUE self, VALUE state) {
1033
1041
  return state;
1034
1042
  }
1035
1043
 
1044
+ static VALUE
1045
+ rails_escape_html_entities_in_json_get(VALUE self) {
1046
+ return escape_html ? Qtrue : Qfalse;
1047
+ }
1048
+
1036
1049
  static VALUE
1037
1050
  rails_time_precision(VALUE self, VALUE prec) {
1038
1051
  rb_iv_set(self, "@time_precision", prec);
@@ -1056,7 +1069,12 @@ rails_set_encoder(VALUE self) {
1056
1069
  VALUE encoding;
1057
1070
  VALUE pv;
1058
1071
  VALUE verbose;
1072
+ VALUE enc = resolve_classpath("ActiveSupport::JSON::Encoding");
1059
1073
 
1074
+ if (Qnil != enc) {
1075
+ escape_html = Qtrue == rb_iv_get(self, "@escape_html_entities_in_json");
1076
+ xml_time = Qtrue == rb_iv_get(enc, "@use_standard_json_time_format");
1077
+ }
1060
1078
  if (rb_const_defined_at(rb_cObject, rb_intern("ActiveSupport"))) {
1061
1079
  active = rb_const_get_at(rb_cObject, rb_intern("ActiveSupport"));
1062
1080
  } else {
@@ -1073,11 +1091,15 @@ rails_set_encoder(VALUE self) {
1073
1091
  rb_gv_set("$VERBOSE", Qfalse);
1074
1092
  rb_undef_method(encoding, "use_standard_json_time_format=");
1075
1093
  rb_define_module_function(encoding, "use_standard_json_time_format=", rails_use_standard_json_time_format, 1);
1094
+ rb_undef_method(encoding, "use_standard_json_time_format");
1095
+ rb_define_module_function(encoding, "use_standard_json_time_format", rails_use_standard_json_time_format_get, 0);
1076
1096
 
1077
1097
  pv = rb_iv_get(encoding, "@escape_html_entities_in_json");
1078
1098
  escape_html = Qtrue == pv;
1079
1099
  rb_undef_method(encoding, "escape_html_entities_in_json=");
1080
1100
  rb_define_module_function(encoding, "escape_html_entities_in_json=", rails_escape_html_entities_in_json, 1);
1101
+ rb_undef_method(encoding, "escape_html_entities_in_json");
1102
+ rb_define_module_function(encoding, "escape_html_entities_in_json", rails_escape_html_entities_in_json_get, 0);
1081
1103
 
1082
1104
  pv = rb_iv_get(encoding, "@time_precision");
1083
1105
  oj_default_options.sec_prec = NUM2INT(pv);
@@ -1289,7 +1311,8 @@ dump_array(VALUE a, int depth, Out out, bool as_ok) {
1289
1311
  }
1290
1312
 
1291
1313
  static int
1292
- hash_cb(VALUE key, VALUE value, Out out) {
1314
+ hash_cb(VALUE key, VALUE value, VALUE ov) {
1315
+ Out out = (Out)ov;
1293
1316
  int depth = out->depth;
1294
1317
  long size;
1295
1318
  int rtype = rb_type(key);
@@ -1402,14 +1425,17 @@ dump_hash(VALUE obj, int depth, Out out, bool as_ok) {
1402
1425
 
1403
1426
  static void
1404
1427
  dump_obj(VALUE obj, int depth, Out out, bool as_ok) {
1428
+ VALUE clas;
1429
+
1405
1430
  if (oj_code_dump(oj_compat_codes, obj, depth, out)) {
1406
1431
  out->argc = 0;
1407
1432
  return;
1408
1433
  }
1434
+ clas = rb_obj_class(obj);
1409
1435
  if (as_ok) {
1410
1436
  ROpt ro;
1411
1437
 
1412
- if (NULL != (ro = oj_rails_get_opt(out->ropts, rb_obj_class(obj))) && ro->on) {
1438
+ if (NULL != (ro = oj_rails_get_opt(out->ropts, clas)) && ro->on) {
1413
1439
  ro->dump(obj, depth, out, as_ok);
1414
1440
  } else if (Yes == out->opts->raw_json && rb_respond_to(obj, oj_raw_json_id)) {
1415
1441
  oj_dump_raw_json(obj, depth, out);
@@ -1417,6 +1443,8 @@ dump_obj(VALUE obj, int depth, Out out, bool as_ok) {
1417
1443
  dump_as_json(obj, depth, out, true);
1418
1444
  } else if (rb_respond_to(obj, oj_to_hash_id)) {
1419
1445
  dump_to_hash(obj, depth, out);
1446
+ } else if (oj_bigdecimal_class == clas) {
1447
+ dump_bigdecimal(obj, depth, out, false);
1420
1448
  } else {
1421
1449
  oj_dump_obj_to_s(obj, out);
1422
1450
  }
@@ -1425,6 +1453,8 @@ dump_obj(VALUE obj, int depth, Out out, bool as_ok) {
1425
1453
  } else if (rb_respond_to(obj, oj_to_hash_id)) {
1426
1454
  // Always attempt to_hash.
1427
1455
  dump_to_hash(obj, depth, out);
1456
+ } else if (oj_bigdecimal_class == clas) {
1457
+ dump_bigdecimal(obj, depth, out, false);
1428
1458
  } else {
1429
1459
  oj_dump_obj_to_s(obj, out);
1430
1460
  }
@@ -1442,8 +1472,7 @@ static DumpFunc rails_funcs[] = {
1442
1472
  dump_array, // RUBY_T_ARRAY = 0x07,
1443
1473
  dump_hash, // RUBY_T_HASH = 0x08,
1444
1474
  dump_obj, // RUBY_T_STRUCT = 0x09,
1445
- dump_bigdecimal, // RUBY_T_BIGNUM = 0x0a,
1446
- //oj_dump_bignum, // RUBY_T_BIGNUM = 0x0a,
1475
+ oj_dump_bignum, // RUBY_T_BIGNUM = 0x0a,
1447
1476
  dump_as_string, // RUBY_T_FILE = 0x0b,
1448
1477
  dump_obj, // RUBY_T_DATA = 0x0c,
1449
1478
  NULL, // RUBY_T_MATCH = 0x0d,
@@ -773,6 +773,7 @@ oj_sparse2(ParseInfo pi) {
773
773
  first = 0;
774
774
  }
775
775
  start = pi->rd.pos;
776
+ // TBD break if option set to allow that
776
777
  }
777
778
  }
778
779
  }
@@ -148,11 +148,12 @@ dump_array(VALUE a, int depth, Out out, bool as_ok) {
148
148
  }
149
149
 
150
150
  static int
151
- hash_cb(VALUE key, VALUE value, Out out) {
151
+ hash_cb(VALUE key, VALUE value, VALUE ov) {
152
+ Out out = (Out)ov;
152
153
  int depth = out->depth;
153
154
  long size;
154
155
  int rtype = rb_type(key);
155
-
156
+
156
157
  if (rtype != T_SYMBOL) {
157
158
  rb_raise(rb_eTypeError, "In :wab mode all Hash keys must be Symbols, not %s.\n", rb_class2name(rb_obj_class(key)));
158
159
  }
@@ -270,7 +271,7 @@ static DumpFunc wab_funcs[] = {
270
271
  void
271
272
  oj_dump_wab_val(VALUE obj, int depth, Out out) {
272
273
  int type = rb_type(obj);
273
-
274
+
274
275
  if (Yes == out->opts->trace) {
275
276
  oj_trace("dump", obj, __FILE__, __LINE__, depth, TraceIn);
276
277
  }
@@ -324,7 +325,7 @@ add_value(ParseInfo pi, VALUE val) {
324
325
  static bool
325
326
  uuid_check(const char *str, int len) {
326
327
  int i;
327
-
328
+
328
329
  for (i = 0; i < 8; i++, str++) {
329
330
  if ('x' != hex_chars[*(uint8_t*)str]) {
330
331
  return false;
@@ -380,7 +381,7 @@ time_parse(const char *s, int len) {
380
381
  long nsecs = 0;
381
382
  int i;
382
383
  time_t secs;
383
-
384
+
384
385
  memset(&tm, 0, sizeof(tm));
385
386
  if ('-' == *s) {
386
387
  s++;
@@ -444,7 +445,7 @@ protect_uri(VALUE rstr) {
444
445
  static VALUE
445
446
  cstr_to_rstr(const char *str, size_t len) {
446
447
  volatile VALUE v = Qnil;
447
-
448
+
448
449
  if (30 == len && '-' == str[4] && '-' == str[7] && 'T' == str[10] && ':' == str[13] && ':' == str[16] && '.' == str[19] && 'Z' == str[29]) {
449
450
  if (Qnil != (v = time_parse(str, (int)len))) {
450
451
  return v;
@@ -521,7 +522,7 @@ hash_set_cstr(ParseInfo pi, Val parent, const char *str, size_t len, const char
521
522
  static void
522
523
  hash_set_num(ParseInfo pi, Val parent, NumInfo ni) {
523
524
  volatile VALUE rval = Qnil;
524
-
525
+
525
526
  if (ni->infinity || ni->nan) {
526
527
  oj_set_error_at(pi, oj_parse_error_class, __FILE__, __LINE__, "not a number or other value");
527
528
  }
@@ -551,7 +552,7 @@ start_array(ParseInfo pi) {
551
552
  static void
552
553
  array_append_cstr(ParseInfo pi, const char *str, size_t len, const char *orig) {
553
554
  volatile VALUE rval = cstr_to_rstr(str, len);
554
-
555
+
555
556
  rb_ary_push(stack_peek(&pi->stack)->val, rval);
556
557
  if (Yes == pi->options.trace) {
557
558
  oj_trace_parse_call("set_value", pi, __FILE__, __LINE__, rval);
@@ -628,4 +629,3 @@ oj_wab_parse_cstr(int argc, VALUE *argv, char *json, size_t len) {
628
629
 
629
630
  return oj_pi_parse(argc, argv, &pi, json, len, true);
630
631
  }
631
-
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Oj
3
3
  # Current version of the module.
4
- VERSION = '3.10.0'
4
+ VERSION = '3.10.1'
5
5
  end
@@ -1,5 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
- # encoding: UTF-8
3
2
 
4
3
  $: << File.dirname(__FILE__)
5
4
  $oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
@@ -7,161 +6,47 @@ $oj_dir = File.dirname(File.expand_path(File.dirname(__FILE__)))
7
6
  $: << File.join($oj_dir, dir)
8
7
  end
9
8
 
10
- #require 'json'
9
+ require 'json'
10
+
11
+ t = [Time.now.utc]
12
+
13
+ puts "t.to_json - #{t.to_json}"
14
+
15
+ puts "--- active support"
16
+
17
+ require 'active_support'
18
+ require "active_support/json"
19
+
20
+ ActiveSupport::JSON::Encoding.use_standard_json_time_format = false
21
+
22
+ puts "t.as_json - #{t.as_json}"
23
+ puts "t.to_json - #{t.to_json}"
24
+
11
25
  require 'oj'
12
26
 
13
- Oj.mimic_JSON
14
-
15
- obj = {
16
- ab: {
17
- cbbb: {
18
- tilbeb: [
19
- {
20
- coob: {
21
- uijwts: [
22
- {
23
- prrrrr: {
24
- yakj: "pvebbx",
25
- lbhqy: {
26
- uhyw: {
27
- uijwts: [
28
- {
29
- jangi: {
30
- ubentg7haineued8atnr8w: {
31
- abc: "uejdncbncnamnasdasdasdasd",
32
- cde: "skfjskdfjskdfjsdkfjsdkfjs"
33
- }
34
- }
35
- }
36
- ]
37
- }
38
- }
39
- }
40
- },
41
- {
42
- kdncg: {
43
- lvbnt8b9ounv: {
44
- qk: 9
45
- }
46
- }
47
- }
48
- ],
49
- jenfjbhe: {}
50
- }
51
- }
52
- ]
53
- }
54
- },
55
- ijbh: {
56
- jsnbrpbnunt: {
57
- b88dibalbvp: {
58
- mnbvd: "9uhbqlpiev"
59
- }
60
- },
61
- ncnwkl: {
62
- ksdfsf: {
63
- mjln: "mnklkn"
64
- },
65
- kbrh: {
66
- sdfn83nnalbmgnansdd: {
67
- uijwts: {
68
- ibha: {
69
- uijwts: [
70
- {
71
- lnrbf: {
72
- nbvtmqbhap9ebeb7btnnaw: {
73
- ksb: "sdfksdfjsdfsb39242dnasddd",
74
- mnm: "1293dsfnsdmfnsdfsd,fmnsd,"
75
- }
76
- }
77
- }
78
- ]
79
- }
80
- },
81
- kbrh: {
82
- bo8libts: {
83
- nag40n: {
84
- kyen: "sdfasnc92nsn"
85
- },
86
- kbrh: {
87
- nbwyu26snfcbajsdkj8: {
88
- uijwts: {
89
- mdfnkjsdd: {}
90
- },
91
- kbrh: {
92
- kneahce: {
93
- uijwts: {
94
- kwnb: {
95
- uijwts: [
96
- {
97
- fhfd: {
98
- sfasdnfmasndfamsdnfajsmdf: false
99
- }
100
- }
101
- ],
102
- asdfsdff: [
103
- {
104
- cwdf: {
105
- sddlkfajsdkfjabskdfjalsdkfjansdkfjf: ""
106
- }
107
- },
108
- {
109
- bsdj: {
110
- sdfsjdlfkasy8kljsfsdf83jlkjfals: true
111
- }
112
- }
113
- ]
114
- }
115
- },
116
- kbrh: {
117
- sdfsdfsddfk: {
118
- uijwts: {
119
- sdfsd: {
120
- sdfsadf89mnlrrrqurqwvdnff: {
121
- "kj": 8
122
- }
123
- }
124
- },
125
- kbrh: {
126
- dkdjd: {
127
- dfeteu: {
128
- sdfd: "sdfasdfjlkjslrsdbb"
129
- },
130
- kbrh: {
131
- sdfskjdfldk: {
132
- buqpen: {
133
- kjlkj: {
134
- sdflskdjfalsdkrjalwkjfsrlfjasdf: {
135
- sd: 0
136
- }
137
- }
138
- },
139
- kbrh: {
140
- sdfksljdlfksdfl: {
141
- sdfsdkfjssd: {
142
- ksdjf: "sdflsdkfjasdkaufs;ldkfjsdlf",
143
- sdfsdfsl: [5]
144
- }
145
- }
146
- }
147
- }
148
- }
149
- }
150
- }
151
- }
152
- }
153
- }
154
- }
155
- }
156
- }
157
- }
158
- }
159
- }
160
- }
161
- }
162
- }
163
- }
164
-
165
- #Oj.dump(obj)
166
- JSON.pretty_generate(obj)
167
- #JSON.generate(obj)
27
+ t = [Time.now.utc]
28
+
29
+ puts "-----------------------"
30
+
31
+ #puts "t.as_json - #{t.as_json}"
32
+ puts "t.to_json - #{t.to_json}"
33
+
34
+ #Oj.mimic_JSON
35
+
36
+ #puts "Oj - t.as_json - #{t.as_json}"
37
+
38
+ puts "--- active support"
39
+
40
+ require 'active_support'
41
+ require "active_support/json"
42
+
43
+ ActiveSupport::JSON::Encoding.use_standard_json_time_format = false
44
+
45
+ puts "t.as_json - #{t.as_json}"
46
+ puts "t.to_json - #{t.to_json}"
47
+
48
+ puts "--- optimize"
49
+ Oj.optimize_rails
50
+
51
+ puts "t.as_json - #{t.as_json}"
52
+ puts "t.to_json - #{t.to_json}"
@@ -470,10 +470,10 @@ class CustomJuice < Minitest::Test
470
470
 
471
471
  def test_time
472
472
  obj = Time.now()
473
- dump_and_load(obj, false, :time_format => :unix, :create_id => "^o", :create_additions => true)
474
- dump_and_load_inspect(obj, false, :time_format => :unix_zone, :create_id => "^o", :create_additions => true)
475
- dump_and_load_inspect(obj, false, :time_format => :xmlschema, :create_id => "^o", :create_additions => true)
476
- dump_and_load_inspect(obj, false, :time_format => :ruby, :create_id => "^o", :create_additions => true)
473
+ dump_load_dump(obj, false, :time_format => :unix, :create_id => "^o", :create_additions => true)
474
+ dump_load_dump(obj, false, :time_format => :unix_zone, :create_id => "^o", :create_additions => true)
475
+ dump_load_dump(obj, false, :time_format => :xmlschema, :create_id => "^o", :create_additions => true)
476
+ dump_load_dump(obj, false, :time_format => :ruby, :create_id => "^o", :create_additions => true)
477
477
  end
478
478
 
479
479
  def dump_and_load(obj, trace=false, options={})
@@ -504,4 +504,19 @@ class CustomJuice < Minitest::Test
504
504
  loaded
505
505
  end
506
506
 
507
+ def dump_load_dump(obj, trace=false, options={})
508
+ options = options.merge(:indent => 2, :mode => :custom)
509
+ json = Oj.dump(obj, options)
510
+ puts json if trace
511
+
512
+ loaded = Oj.load(json, options);
513
+ if obj.nil?
514
+ assert_nil(loaded)
515
+ else
516
+ json2 = Oj.dump(loaded, options)
517
+ assert_equal(json, json2)
518
+ end
519
+ loaded
520
+ end
521
+
507
522
  end
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+ # encoding: utf-8
3
+
4
+ $: << File.dirname(__FILE__)
5
+
6
+ require 'helper'
7
+
8
+ class RailsJuice < Minitest::Test
9
+
10
+ def test_bigdecimal_dump
11
+ orig = Oj.default_options
12
+ Oj.default_options = { mode: :rails, bigdecimal_as_decimal: true }
13
+ bd = BigDecimal('123')
14
+ json = Oj.dump(bd)
15
+ Oj.default_options = orig
16
+
17
+ assert_equal('0.123e3', json.downcase)
18
+
19
+ json = Oj.dump(bd, mode: :rails, bigdecimal_as_decimal: false)
20
+ assert_equal('"0.123e3"', json.downcase)
21
+
22
+ json = Oj.dump(bd, mode: :rails, bigdecimal_as_decimal: true)
23
+ assert_equal('0.123e3', json.downcase)
24
+ end
25
+
26
+ end
@@ -19,6 +19,7 @@ require 'test_saj'
19
19
  require 'test_scp'
20
20
  require 'test_strict'
21
21
  require 'test_various'
22
+ require 'test_rails'
22
23
  require 'test_wab'
23
24
  require 'test_writer'
24
25
  require 'test_integer_range'
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.10.0
4
+ version: 3.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Peter Ohler
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-11-28 00:00:00.000000000 Z
11
+ date: 2020-01-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -243,6 +243,7 @@ files:
243
243
  - test/test_integer_range.rb
244
244
  - test/test_null.rb
245
245
  - test/test_object.rb
246
+ - test/test_rails.rb
246
247
  - test/test_saj.rb
247
248
  - test/test_scp.rb
248
249
  - test/test_strict.rb
@@ -354,6 +355,7 @@ test_files:
354
355
  - test/baz.rb
355
356
  - test/tests_mimic_addition.rb
356
357
  - test/test_writer.rb
358
+ - test/test_rails.rb
357
359
  - test/perf.rb
358
360
  - test/isolated/test_mimic_define.rb
359
361
  - test/isolated/test_mimic_after.rb