oj 3.5.1 → 3.6.0
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/rails.c +153 -0
- data/ext/oj/trace.c +4 -4
- data/lib/oj/version.rb +1 -1
- data/test/activerecord/result_test.rb +27 -0
- data/test/big.rb +15 -0
- metadata +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c39b2eaf82ca583abb1636a96c5b68c87d870243f1857fb3901fa653f5699336
|
4
|
+
data.tar.gz: ad6b0824c146f26271c212fae1f27b359c692ca36f554e499b9a9b56c753c999
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6344b7a10952348c49e21d85779dd9a4fd25c81566594a34945f3e81785bab6449ad015ad4fe1f9bf8d0cb5acfe20ce6eba2f228dae6a76f085e2531b5b93f5a
|
7
|
+
data.tar.gz: 8f21dd978b252c74315f8988c0352d771c683dcddb340fbdbfa800a249c9187ec622d9e3bb7dfbd76d61b8c1ee1e8709494b69feecea50a97251ab5bfb5fdc52
|
data/ext/oj/rails.c
CHANGED
@@ -336,6 +336,11 @@ dump_to_s(VALUE obj, int depth, Out out, bool as_ok) {
|
|
336
336
|
|
337
337
|
static ID parameters_id = 0;
|
338
338
|
|
339
|
+
typedef struct _StrLen {
|
340
|
+
const char *str;
|
341
|
+
int len;
|
342
|
+
} *StrLen;
|
343
|
+
|
339
344
|
static void
|
340
345
|
dump_actioncontroller_parameters(VALUE obj, int depth, Out out, bool as_ok) {
|
341
346
|
if (0 == parameters_id) {
|
@@ -345,6 +350,153 @@ dump_actioncontroller_parameters(VALUE obj, int depth, Out out, bool as_ok) {
|
|
345
350
|
dump_rails_val(rb_ivar_get(obj, parameters_id), depth, out, true);
|
346
351
|
}
|
347
352
|
|
353
|
+
static StrLen
|
354
|
+
columns_array(VALUE rcols, int *ccnt) {
|
355
|
+
volatile VALUE v;
|
356
|
+
StrLen cp;
|
357
|
+
StrLen cols;
|
358
|
+
int i;
|
359
|
+
int cnt = (int)RARRAY_LEN(rcols);
|
360
|
+
|
361
|
+
*ccnt = cnt;
|
362
|
+
cols = ALLOC_N(struct _StrLen, cnt);
|
363
|
+
for (i = 0, cp = cols; i < cnt; i++, cp++) {
|
364
|
+
v = rb_ary_entry(rcols, i);
|
365
|
+
if (T_STRING != rb_type(v)) {
|
366
|
+
v = rb_funcall(v, oj_to_s_id, 0);
|
367
|
+
}
|
368
|
+
cp->str = StringValuePtr(v);
|
369
|
+
cp->len = (int)RSTRING_LEN(v);
|
370
|
+
}
|
371
|
+
return cols;
|
372
|
+
}
|
373
|
+
|
374
|
+
static void
|
375
|
+
dump_row(VALUE row, StrLen cols, int ccnt, int depth, Out out) {
|
376
|
+
size_t size;
|
377
|
+
int d2 = depth + 1;
|
378
|
+
int i;
|
379
|
+
|
380
|
+
assure_size(out, 2);
|
381
|
+
*out->cur++ = '{';
|
382
|
+
size = depth * out->indent + 3;
|
383
|
+
for (i = 0; i < ccnt; i++, cols++) {
|
384
|
+
assure_size(out, size);
|
385
|
+
if (out->opts->dump_opts.use) {
|
386
|
+
if (0 < out->opts->dump_opts.array_size) {
|
387
|
+
strcpy(out->cur, out->opts->dump_opts.array_nl);
|
388
|
+
out->cur += out->opts->dump_opts.array_size;
|
389
|
+
}
|
390
|
+
if (0 < out->opts->dump_opts.indent_size) {
|
391
|
+
int i;
|
392
|
+
for (i = d2; 0 < i; i--) {
|
393
|
+
strcpy(out->cur, out->opts->dump_opts.indent_str);
|
394
|
+
out->cur += out->opts->dump_opts.indent_size;
|
395
|
+
}
|
396
|
+
}
|
397
|
+
} else {
|
398
|
+
fill_indent(out, d2);
|
399
|
+
}
|
400
|
+
oj_dump_cstr(cols->str, cols->len, 0, 0, out);
|
401
|
+
*out->cur++ = ':';
|
402
|
+
dump_rails_val(rb_ary_entry(row, i), depth, out, true);
|
403
|
+
if (i < ccnt - 1) {
|
404
|
+
*out->cur++ = ',';
|
405
|
+
}
|
406
|
+
}
|
407
|
+
size = depth * out->indent + 1;
|
408
|
+
assure_size(out, size);
|
409
|
+
if (out->opts->dump_opts.use) {
|
410
|
+
if (0 < out->opts->dump_opts.array_size) {
|
411
|
+
strcpy(out->cur, out->opts->dump_opts.array_nl);
|
412
|
+
out->cur += out->opts->dump_opts.array_size;
|
413
|
+
}
|
414
|
+
if (0 < out->opts->dump_opts.indent_size) {
|
415
|
+
int i;
|
416
|
+
|
417
|
+
for (i = depth; 0 < i; i--) {
|
418
|
+
strcpy(out->cur, out->opts->dump_opts.indent_str);
|
419
|
+
out->cur += out->opts->dump_opts.indent_size;
|
420
|
+
}
|
421
|
+
}
|
422
|
+
} else {
|
423
|
+
fill_indent(out, depth);
|
424
|
+
}
|
425
|
+
*out->cur++ = '}';
|
426
|
+
}
|
427
|
+
|
428
|
+
static ID rows_id = 0;
|
429
|
+
static ID columns_id = 0;
|
430
|
+
|
431
|
+
static void
|
432
|
+
dump_activerecord_result(VALUE obj, int depth, Out out, bool as_ok) {
|
433
|
+
volatile VALUE rows;
|
434
|
+
StrLen cols;
|
435
|
+
int ccnt = 0;
|
436
|
+
int i, rcnt;
|
437
|
+
size_t size;
|
438
|
+
int d2 = depth + 1;
|
439
|
+
|
440
|
+
if (0 == rows_id) {
|
441
|
+
rows_id = rb_intern("@rows");
|
442
|
+
columns_id = rb_intern("@columns");
|
443
|
+
}
|
444
|
+
out->argc = 0;
|
445
|
+
cols = columns_array(rb_ivar_get(obj, columns_id), &ccnt);
|
446
|
+
rows = rb_ivar_get(obj, rows_id);
|
447
|
+
rcnt = RARRAY_LEN(rows);
|
448
|
+
assure_size(out, 2);
|
449
|
+
*out->cur++ = '[';
|
450
|
+
if (out->opts->dump_opts.use) {
|
451
|
+
size = d2 * out->opts->dump_opts.indent_size + out->opts->dump_opts.array_size + 1;
|
452
|
+
} else {
|
453
|
+
size = d2 * out->indent + 2;
|
454
|
+
}
|
455
|
+
assure_size(out, 2);
|
456
|
+
for (i = 0; i < rcnt; i++) {
|
457
|
+
assure_size(out, size);
|
458
|
+
if (out->opts->dump_opts.use) {
|
459
|
+
if (0 < out->opts->dump_opts.array_size) {
|
460
|
+
strcpy(out->cur, out->opts->dump_opts.array_nl);
|
461
|
+
out->cur += out->opts->dump_opts.array_size;
|
462
|
+
}
|
463
|
+
if (0 < out->opts->dump_opts.indent_size) {
|
464
|
+
int i;
|
465
|
+
for (i = d2; 0 < i; i--) {
|
466
|
+
strcpy(out->cur, out->opts->dump_opts.indent_str);
|
467
|
+
out->cur += out->opts->dump_opts.indent_size;
|
468
|
+
}
|
469
|
+
}
|
470
|
+
} else {
|
471
|
+
fill_indent(out, d2);
|
472
|
+
}
|
473
|
+
dump_row(rb_ary_entry(rows, i), cols, ccnt, d2, out);
|
474
|
+
if (i < rcnt - 1) {
|
475
|
+
*out->cur++ = ',';
|
476
|
+
}
|
477
|
+
}
|
478
|
+
xfree(cols);
|
479
|
+
size = depth * out->indent + 1;
|
480
|
+
assure_size(out, size);
|
481
|
+
if (out->opts->dump_opts.use) {
|
482
|
+
if (0 < out->opts->dump_opts.array_size) {
|
483
|
+
strcpy(out->cur, out->opts->dump_opts.array_nl);
|
484
|
+
out->cur += out->opts->dump_opts.array_size;
|
485
|
+
}
|
486
|
+
if (0 < out->opts->dump_opts.indent_size) {
|
487
|
+
int i;
|
488
|
+
|
489
|
+
for (i = depth; 0 < i; i--) {
|
490
|
+
strcpy(out->cur, out->opts->dump_opts.indent_str);
|
491
|
+
out->cur += out->opts->dump_opts.indent_size;
|
492
|
+
}
|
493
|
+
}
|
494
|
+
} else {
|
495
|
+
fill_indent(out, depth);
|
496
|
+
}
|
497
|
+
*out->cur++ = ']';
|
498
|
+
}
|
499
|
+
|
348
500
|
typedef struct _NamedFunc {
|
349
501
|
const char *name;
|
350
502
|
DumpFunc func;
|
@@ -352,6 +504,7 @@ typedef struct _NamedFunc {
|
|
352
504
|
|
353
505
|
static struct _NamedFunc dump_map[] = {
|
354
506
|
{ "ActionController::Parameters", dump_actioncontroller_parameters },
|
507
|
+
{ "ActiveRecord::Result", dump_activerecord_result },
|
355
508
|
{ "ActiveSupport::TimeWithZone", dump_timewithzone },
|
356
509
|
{ "BigDecimal", dump_bigdecimal },
|
357
510
|
{ "Range", dump_to_s },
|
data/ext/oj/trace.c
CHANGED
@@ -36,7 +36,7 @@ void
|
|
36
36
|
oj_trace_parse_call(const char *func, ParseInfo pi, const char *file, int line, VALUE obj) {
|
37
37
|
char fmt[64];
|
38
38
|
char indent[MAX_INDENT];
|
39
|
-
int depth = stack_size(&pi->stack) * 2;
|
39
|
+
int depth = (int)(stack_size(&pi->stack) * 2);
|
40
40
|
|
41
41
|
fill_indent(indent, depth);
|
42
42
|
sprintf(fmt, "#0:%%13s:%%3d:Oj:-:%%%ds %%s %%s\n", depth);
|
@@ -47,7 +47,7 @@ void
|
|
47
47
|
oj_trace_parse_in(const char *func, ParseInfo pi, const char *file, int line) {
|
48
48
|
char fmt[64];
|
49
49
|
char indent[MAX_INDENT];
|
50
|
-
int depth = stack_size(&pi->stack) * 2;
|
50
|
+
int depth = (int)(stack_size(&pi->stack) * 2);
|
51
51
|
|
52
52
|
fill_indent(indent, depth);
|
53
53
|
sprintf(fmt, "#0:%%13s:%%3d:Oj:}:%%%ds %%s\n", depth);
|
@@ -58,7 +58,7 @@ void
|
|
58
58
|
oj_trace_parse_hash_end(ParseInfo pi, const char *file, int line) {
|
59
59
|
char fmt[64];
|
60
60
|
char indent[MAX_INDENT];
|
61
|
-
int depth = stack_size(&pi->stack) * 2 - 2;
|
61
|
+
int depth = (int)(stack_size(&pi->stack) * 2 - 2);
|
62
62
|
Val v = stack_peek(&pi->stack);
|
63
63
|
VALUE obj = v->val;
|
64
64
|
|
@@ -71,7 +71,7 @@ void
|
|
71
71
|
oj_trace_parse_array_end(ParseInfo pi, const char *file, int line) {
|
72
72
|
char fmt[64];
|
73
73
|
char indent[MAX_INDENT];
|
74
|
-
int depth = stack_size(&pi->stack) * 2;
|
74
|
+
int depth = (int)(stack_size(&pi->stack) * 2);
|
75
75
|
|
76
76
|
fill_indent(indent, depth);
|
77
77
|
sprintf(fmt, "#0:%%13s:%%3d:Oj:{:%%%ds array_ned\n", depth);
|
data/lib/oj/version.rb
CHANGED
@@ -0,0 +1,27 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$: << File.dirname(__FILE__)
|
4
|
+
$: << File.dirname(File.dirname(__FILE__))
|
5
|
+
|
6
|
+
require 'helper'
|
7
|
+
require "rails/all"
|
8
|
+
|
9
|
+
Oj::Rails.set_encoder()
|
10
|
+
Oj::Rails.optimize()
|
11
|
+
|
12
|
+
Oj.default_options = { mode: :rails }
|
13
|
+
|
14
|
+
class ActiveRecordResultTest < Minitest::Test
|
15
|
+
def test_hash_rows
|
16
|
+
|
17
|
+
result = ActiveRecord::Result.new(["one", "two"],
|
18
|
+
[
|
19
|
+
["row 1 col 1", "row 1 col 2"],
|
20
|
+
["row 2 col 1", "row 2 col 2"],
|
21
|
+
["row 3 col 1", "row 3 col 2"],
|
22
|
+
])
|
23
|
+
#puts "*** result: #{Oj.dump(result, indent: 2)}"
|
24
|
+
|
25
|
+
assert_equal Oj.dump(result, mode: :rails), Oj.dump(result.to_hash)
|
26
|
+
end
|
27
|
+
end
|
data/test/big.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
#require 'active_support'
|
2
|
+
#require 'active_support/core_ext'
|
3
|
+
#require 'active_support/json'
|
4
|
+
require 'oj'
|
5
|
+
|
6
|
+
#Oj.optimize_rails
|
7
|
+
Oj.mimic_JSON
|
8
|
+
|
9
|
+
h = {:type=>:record, :name=>:group, :namespace=>"com.salsify.identity", :fields=>[{:name=>"id", :type=>{:name=>:salsify_uuid, :type=>:fixed, :namespace=>"com.salsify", :size=>38}}, {:name=>"type", :type=>"string", :default=>"groups"}, {:name=>"external_id", :type=>[:null, "string"], :default=>nil}, {:name=>"created_at", :type=>{:type=>"long", :logicalType=>"timestamp-micros"}}, {:name=>"updated_at", :type=>{:type=>"long", :logicalType=>"timestamp-micros"}}, {:name=>"name", :type=>"string"}, {:name=>"policy", :type=>[:null, {:type=>:record, :name=>:policy, :namespace=>"com.salsify.security", :fields=>[{:name=>"created_at", :type=>{:type=>"long", :logicalType=>"timestamp-micros"}}, {:name=>"updated_at", :type=>{:type=>"long", :logicalType=>"timestamp-micros"}}, {:name=>"id", :type=>"com.salsify.salsify_uuid"}, {:name=>"type", :type=>"string", :default=>"policies"}, {:name=>"external_id", :type=>[:null, "string"], :default=>nil}, {:name=>"name", :type=>"string"}, {:name=>"statements", :type=>{:type=>:array, :items=>{:type=>:record, :name=>:statement, :namespace=>"com.salsify.security", :fields=>[{:name=>"created_at", :type=>{:type=>"long", :logicalType=>"timestamp-micros"}}, {:name=>"updated_at", :type=>{:type=>"long", :logicalType=>"timestamp-micros"}}, {:name=>"id", :type=>"com.salsify.salsify_uuid"}, {:name=>"type", :type=>"string", :default=>"statements"}, {:name=>"external_id", :type=>[:null, "string"], :default=>nil}, {:name=>"action", :type=>{:name=>"__statement_action_enum", :type=>:enum, :namespace=>"com.salsify.security", :symbols=>[:manage, :read]}}, {:name=>"resource", :type=>{:name=>"__statement_resource_enum", :type=>:enum, :namespace=>"com.salsify.security", :symbols=>[:product, :digital_asset]}}, {:name=>"conditions", :type=>{:type=>:array, :items=>{:type=>:record, :name=>:condition, :namespace=>"com.salsify.security", :fields=>[{:name=>"created_at", :type=>{:type=>"long", :logicalType=>"timestamp-micros"}}, {:name=>"updated_at", :type=>{:type=>"long", :logicalType=>"timestamp-micros"}}, {:name=>"id", :type=>"com.salsify.salsify_uuid"}, {:name=>"type", :type=>"string", :default=>"conditions"}, {:name=>"external_id", :type=>[:null, "string"], :default=>nil}, {:name=>"operator", :type=>{:name=>"__condition_operator_enum", :type=>:enum, :namespace=>"com.salsify.security", :symbols=>[:equals]}}, {:name=>"attribute_type", :type=>{:name=>"__condition_attribute_type_enum", :type=>:enum, :namespace=>"com.salsify.security", :symbols=>[:resource]}}, {:name=>"value", :type=>"string"}, {:name=>"attribute", :type=>[:null, {:type=>:record, :name=>:reference, :namespace=>"com.salsify", :fields=>[{:name=>"id", :type=>"com.salsify.salsify_uuid"}, {:name=>"type", :type=>"string", :doc=>"snake_case, plural name for the resource type"}, {:name=>"external_id", :type=>[:null, "string"], :default=>nil}]}], :default=>nil}, {:name=>"broken", :type=>[:null, "boolean"], :default=>nil}]}}}]}}}]}], :default=>nil}]}
|
10
|
+
|
11
|
+
#Oj.dump(h)
|
12
|
+
puts JSON.pretty_generate(h)
|
13
|
+
#puts JSON.fast_generate(h)
|
14
|
+
#puts JSON.generate(h)
|
15
|
+
|
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.
|
4
|
+
version: 3.6.0
|
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-04
|
11
|
+
date: 2018-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -166,6 +166,7 @@ files:
|
|
166
166
|
- test/_test_active.rb
|
167
167
|
- test/_test_active_mimic.rb
|
168
168
|
- test/_test_mimic_rails.rb
|
169
|
+
- test/activerecord/result_test.rb
|
169
170
|
- test/activesupport4/decoding_test.rb
|
170
171
|
- test/activesupport4/encoding_test.rb
|
171
172
|
- test/activesupport4/test_helper.rb
|
@@ -174,6 +175,7 @@ files:
|
|
174
175
|
- test/activesupport5/encoding_test_cases.rb
|
175
176
|
- test/activesupport5/test_helper.rb
|
176
177
|
- test/activesupport5/time_zone_test_helpers.rb
|
178
|
+
- test/big.rb
|
177
179
|
- test/files.rb
|
178
180
|
- test/foo.rb
|
179
181
|
- test/helper.rb
|
@@ -302,6 +304,7 @@ test_files:
|
|
302
304
|
- test/test_object.rb
|
303
305
|
- test/perf_wab.rb
|
304
306
|
- test/tests_mimic.rb
|
307
|
+
- test/activerecord/result_test.rb
|
305
308
|
- test/perf_saj.rb
|
306
309
|
- test/tests_mimic_addition.rb
|
307
310
|
- test/test_saj.rb
|
@@ -314,6 +317,7 @@ test_files:
|
|
314
317
|
- test/_test_active.rb
|
315
318
|
- test/test_compat.rb
|
316
319
|
- test/sample_json.rb
|
320
|
+
- test/big.rb
|
317
321
|
- test/json_gem/test_helper.rb
|
318
322
|
- test/json_gem/json_generic_object_test.rb
|
319
323
|
- test/json_gem/json_common_interface_test.rb
|