oj 3.6.0 → 3.6.2

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
- SHA256:
3
- metadata.gz: c39b2eaf82ca583abb1636a96c5b68c87d870243f1857fb3901fa653f5699336
4
- data.tar.gz: ad6b0824c146f26271c212fae1f27b359c692ca36f554e499b9a9b56c753c999
2
+ SHA1:
3
+ metadata.gz: d0f7d6dbca5f0271c4a6e2296c56881940e85b4b
4
+ data.tar.gz: 879796b3fdfee0aa99c3a8913a13bd6047e7f957
5
5
  SHA512:
6
- metadata.gz: 6344b7a10952348c49e21d85779dd9a4fd25c81566594a34945f3e81785bab6449ad015ad4fe1f9bf8d0cb5acfe20ce6eba2f228dae6a76f085e2531b5b93f5a
7
- data.tar.gz: 8f21dd978b252c74315f8988c0352d771c683dcddb340fbdbfa800a249c9187ec622d9e3bb7dfbd76d61b8c1ee1e8709494b69feecea50a97251ab5bfb5fdc52
6
+ metadata.gz: c919d3e606b41de048d2d150834e6b795494ef6b9d9c80676c217e773e23126a928638dccbf96bb372c4e473997c1811ebc46ab3189b323a1ff00abc5b8a73e4
7
+ data.tar.gz: 13114820906d6af519314be9dee39224f79071490b5ee23bbf7b1a7bb01d89725fd751f4c056f88f1f7e837457df49885f31f556ca03f25a2767bae0fa77eea0
@@ -896,14 +896,14 @@ void
896
896
  oj_grow_out(Out out, size_t len) {
897
897
  size_t size = out->end - out->buf;
898
898
  long pos = out->cur - out->buf;
899
- char *buf;
899
+ char *buf = out->buf;
900
900
 
901
901
  size *= 2;
902
902
  if (size <= len * 2 + pos) {
903
903
  size += len;
904
904
  }
905
905
  if (out->allocated) {
906
- buf = REALLOC_N(out->buf, char, (size + BUFFER_EXTRA));
906
+ REALLOC_N(buf, char, (size + BUFFER_EXTRA));
907
907
  } else {
908
908
  buf = ALLOC_N(char, (size + BUFFER_EXTRA));
909
909
  out->allocated = true;
@@ -13,7 +13,7 @@
13
13
  #define MAX_DEPTH 1000
14
14
 
15
15
  // Extra padding at end of buffer.
16
- #define BUFFER_EXTRA 10
16
+ #define BUFFER_EXTRA 64
17
17
 
18
18
  extern void oj_dump_nil(VALUE obj, int depth, Out out, bool as_ok);
19
19
  extern void oj_dump_true(VALUE obj, int depth, Out out, bool as_ok);
@@ -21,9 +21,6 @@
21
21
  // Workaround in case INFINITY is not defined in math.h or if the OS is CentOS
22
22
  #define OJ_INFINITY (1.0/0.0)
23
23
 
24
- // Extra padding at end of buffer.
25
- #define BUFFER_EXTRA 10
26
-
27
24
  typedef unsigned long ulong;
28
25
 
29
26
  static const char inf_val[] = INF_VAL;
@@ -319,11 +319,13 @@ dump_time(VALUE obj, int depth, Out out, bool as_ok) {
319
319
  static void
320
320
  dump_timewithzone(VALUE obj, int depth, Out out, bool as_ok) {
321
321
  time_t sec = NUM2LONG(rb_funcall2(obj, oj_tv_sec_id, 0, 0));
322
- #if HAS_NANO_TIME
323
- long long nsec = rb_num2ll(rb_funcall2(obj, oj_tv_nsec_id, 0, 0));
324
- #else
325
- long long nsec = rb_num2ll(rb_funcall2(obj, oj_tv_usec_id, 0, 0)) * 1000;
326
- #endif
322
+ long long nsec = 0;
323
+
324
+ if (rb_respond_to(obj, oj_tv_nsec_id)) {
325
+ nsec = rb_num2ll(rb_funcall2(obj, oj_tv_nsec_id, 0, 0));
326
+ } else if (rb_respond_to(obj, oj_tv_usec_id)) {
327
+ nsec = rb_num2ll(rb_funcall2(obj, oj_tv_usec_id, 0, 0)) * 1000;
328
+ }
327
329
  dump_sec_nano(obj, sec, nsec, out);
328
330
  }
329
331
 
@@ -502,13 +504,70 @@ typedef struct _NamedFunc {
502
504
  DumpFunc func;
503
505
  } *NamedFunc;
504
506
 
507
+ static void
508
+ dump_as_string(VALUE obj, int depth, Out out, bool as_ok) {
509
+ if (oj_code_dump(oj_compat_codes, obj, depth, out)) {
510
+ out->argc = 0;
511
+ return;
512
+ }
513
+ oj_dump_obj_to_s(obj, out);
514
+ }
515
+
516
+ static void
517
+ dump_as_json(VALUE obj, int depth, Out out, bool as_ok) {
518
+ volatile VALUE ja;
519
+
520
+ if (Yes == out->opts->trace) {
521
+ oj_trace("as_json", obj, __FILE__, __LINE__, depth + 1, TraceRubyIn);
522
+ }
523
+ // Some classes elect to not take an options argument so check the arity
524
+ // of as_json.
525
+ #if HAS_METHOD_ARITY
526
+ if (0 == rb_obj_method_arity(obj, oj_as_json_id)) {
527
+ ja = rb_funcall(obj, oj_as_json_id, 0);
528
+ } else {
529
+ ja = rb_funcall2(obj, oj_as_json_id, out->argc, out->argv);
530
+ }
531
+ #else
532
+ ja = rb_funcall2(obj, oj_as_json_id, out->argc, out->argv);
533
+ #endif
534
+ if (Yes == out->opts->trace) {
535
+ oj_trace("as_json", obj, __FILE__, __LINE__, depth + 1, TraceRubyOut);
536
+ }
537
+
538
+ out->argc = 0;
539
+ if (ja == obj || !as_ok) {
540
+ // Once as_json is called it should never be called again on the same
541
+ // object with as_ok.
542
+ dump_rails_val(ja, depth, out, false);
543
+ } else {
544
+ int type = rb_type(ja);
545
+
546
+ if (T_HASH == type || T_ARRAY == type) {
547
+ dump_rails_val(ja, depth, out, true);
548
+ } else {
549
+ dump_rails_val(ja, depth, out, true);
550
+ }
551
+ }
552
+ }
553
+
554
+ static void
555
+ dump_regexp(VALUE obj, int depth, Out out, bool as_ok) {
556
+ if (as_ok && rb_respond_to(obj, oj_as_json_id)) {
557
+ dump_as_json(obj, depth, out, false);
558
+ return;
559
+ }
560
+ dump_as_string(obj, depth, out, as_ok);
561
+ }
562
+
505
563
  static struct _NamedFunc dump_map[] = {
506
564
  { "ActionController::Parameters", dump_actioncontroller_parameters },
507
565
  { "ActiveRecord::Result", dump_activerecord_result },
508
566
  { "ActiveSupport::TimeWithZone", dump_timewithzone },
509
567
  { "BigDecimal", dump_bigdecimal },
510
568
  { "Range", dump_to_s },
511
- { "Regexp", dump_to_s },
569
+ { "Regexp", dump_regexp },
570
+ //{ "Regexp", dump_to_s },
512
571
  { "Time", dump_time },
513
572
  { NULL, NULL },
514
573
  };
@@ -1117,44 +1176,6 @@ oj_mimic_rails_init() {
1117
1176
  rb_define_method(encoder_class, "optimized?", encoder_optimized, 1);
1118
1177
  }
1119
1178
 
1120
- static void
1121
- dump_as_json(VALUE obj, int depth, Out out, bool as_ok) {
1122
- volatile VALUE ja;
1123
-
1124
- if (Yes == out->opts->trace) {
1125
- oj_trace("as_json", obj, __FILE__, __LINE__, depth + 1, TraceRubyIn);
1126
- }
1127
- // Some classes elect to not take an options argument so check the arity
1128
- // of as_json.
1129
- #if HAS_METHOD_ARITY
1130
- if (0 == rb_obj_method_arity(obj, oj_as_json_id)) {
1131
- ja = rb_funcall(obj, oj_as_json_id, 0);
1132
- } else {
1133
- ja = rb_funcall2(obj, oj_as_json_id, out->argc, out->argv);
1134
- }
1135
- #else
1136
- ja = rb_funcall2(obj, oj_as_json_id, out->argc, out->argv);
1137
- #endif
1138
- if (Yes == out->opts->trace) {
1139
- oj_trace("as_json", obj, __FILE__, __LINE__, depth + 1, TraceRubyOut);
1140
- }
1141
-
1142
- out->argc = 0;
1143
- if (ja == obj || !as_ok) {
1144
- // Once as_json is call it should never be called again on the same
1145
- // object with as_ok.
1146
- dump_rails_val(ja, depth, out, false);
1147
- } else {
1148
- int type = rb_type(ja);
1149
-
1150
- if (T_HASH == type || T_ARRAY == type) {
1151
- dump_rails_val(ja, depth, out, true);
1152
- } else {
1153
- dump_rails_val(ja, depth, out, true);
1154
- }
1155
- }
1156
- }
1157
-
1158
1179
  static void
1159
1180
  dump_to_hash(VALUE obj, int depth, Out out) {
1160
1181
  dump_rails_val(rb_funcall(obj, oj_to_hash_id, 0), depth, out, true);
@@ -1388,7 +1409,7 @@ dump_obj(VALUE obj, int depth, Out out, bool as_ok) {
1388
1409
  }
1389
1410
  if (as_ok) {
1390
1411
  ROpt ro;
1391
-
1412
+
1392
1413
  if (NULL != (ro = oj_rails_get_opt(out->ropts, rb_obj_class(obj))) && ro->on) {
1393
1414
  ro->dump(obj, depth, out, as_ok);
1394
1415
  } else if (rb_respond_to(obj, oj_as_json_id)) {
@@ -1406,15 +1427,6 @@ dump_obj(VALUE obj, int depth, Out out, bool as_ok) {
1406
1427
  }
1407
1428
  }
1408
1429
 
1409
- static void
1410
- dump_as_string(VALUE obj, int depth, Out out, bool as_ok) {
1411
- if (oj_code_dump(oj_compat_codes, obj, depth, out)) {
1412
- out->argc = 0;
1413
- return;
1414
- }
1415
- oj_dump_obj_to_s(obj, out);
1416
- }
1417
-
1418
1430
  static DumpFunc rails_funcs[] = {
1419
1431
  NULL, // RUBY_T_NONE = 0x00,
1420
1432
  dump_obj, // RUBY_T_OBJECT = 0x01,
@@ -1422,7 +1434,8 @@ static DumpFunc rails_funcs[] = {
1422
1434
  oj_dump_class, // RUBY_T_MODULE = 0x03,
1423
1435
  dump_float, // RUBY_T_FLOAT = 0x04,
1424
1436
  oj_dump_str, // RUBY_T_STRING = 0x05,
1425
- dump_as_string, // RUBY_T_REGEXP = 0x06,
1437
+ dump_regexp, // RUBY_T_REGEXP = 0x06,
1438
+ //dump_as_string, // RUBY_T_REGEXP = 0x06,
1426
1439
  dump_array, // RUBY_T_ARRAY = 0x07,
1427
1440
  dump_hash, // RUBY_T_HASH = 0x08,
1428
1441
  dump_obj, // RUBY_T_STRUCT = 0x09,
@@ -1,5 +1,5 @@
1
1
 
2
2
  module Oj
3
3
  # Current version of the module.
4
- VERSION = '3.6.0'
4
+ VERSION = '3.6.2'
5
5
  end
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.6.0
4
+ version: 3.6.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: 2018-05-04 00:00:00.000000000 Z
11
+ date: 2018-05-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake-compiler
@@ -270,7 +270,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
270
270
  version: '0'
271
271
  requirements: []
272
272
  rubyforge_project:
273
- rubygems_version: 2.7.3
273
+ rubygems_version: 2.5.1
274
274
  signing_key:
275
275
  specification_version: 4
276
276
  summary: A fast JSON parser and serializer.