oj 3.6.5 → 3.6.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +1 -1
- data/ext/oj/dump.c +3 -2
- data/ext/oj/extconf.rb +8 -1
- data/ext/oj/oj.c +1 -0
- data/lib/oj/version.rb +1 -1
- data/test/bug.rb +25 -0
- data/test/{big.rb → crash.rb} +16 -9
- metadata +70 -70
- data/test/foo.rb +0 -58
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 21e115cf6ad860db71f8e6da0bfeffd4fe3a14fb57cf172c4e63a5ed763920d9
|
4
|
+
data.tar.gz: d410b8c08e883052ae23e82b58f491a814244c5da1285588de6cf0b565514deb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3e9ad858b8013d6b342d1e2e5288cba4cbb7d00f9229fd3dbcafc90a83396ea112014cbf9f6df5dc0f3c32bed6a36be99fc405a8f1ad527c18801d62657c3e43
|
7
|
+
data.tar.gz: e822f75524cf73cf586bc61a8519ecfc1ff0282e764673d4f38daac08dc30731a7ad3c9617445ad30379c0fadd1c7234899c4f7ae34e1c844dda15bbb8fc02de
|
data/README.md
CHANGED
@@ -67,7 +67,7 @@ See [{file:CHANGELOG.md}](CHANGELOG.md)
|
|
67
67
|
|
68
68
|
- *RubyGems* *repo*: https://rubygems.org/gems/oj
|
69
69
|
|
70
|
-
Follow [@peterohler on Twitter](http://twitter.com
|
70
|
+
Follow [@peterohler on Twitter](http://twitter.com/peterohler) for announcements and news about the Oj gem.
|
71
71
|
|
72
72
|
#### Performance Comparisons
|
73
73
|
|
data/ext/oj/dump.c
CHANGED
@@ -347,13 +347,14 @@ oj_dump_time(VALUE obj, Out out, int withZone) {
|
|
347
347
|
char *dot;
|
348
348
|
int neg = 0;
|
349
349
|
long one = 1000000000;
|
350
|
-
|
350
|
+
long long sec;
|
351
351
|
long long nsec;
|
352
352
|
|
353
353
|
#if HAS_RB_TIME_TIMESPEC
|
354
354
|
{
|
355
355
|
struct timespec ts = rb_time_timespec(obj);
|
356
|
-
|
356
|
+
|
357
|
+
sec = (long long)ts.tv_sec;
|
357
358
|
nsec = ts.tv_nsec;
|
358
359
|
}
|
359
360
|
#else
|
data/ext/oj/extconf.rb
CHANGED
@@ -20,7 +20,14 @@ dflags = {
|
|
20
20
|
'RUBY_VERSION_MAJOR' => version[0],
|
21
21
|
'RUBY_VERSION_MINOR' => version[1],
|
22
22
|
'RUBY_VERSION_MICRO' => version[2],
|
23
|
-
'HAS_RB_TIME_TIMESPEC' => (!is_windows &&
|
23
|
+
'HAS_RB_TIME_TIMESPEC' => (!is_windows &&
|
24
|
+
!['arm-linux-gnueabi',
|
25
|
+
'arm-linux-gnueabihf',
|
26
|
+
'i386-linux-gnu',
|
27
|
+
'mips-linux-gnu',
|
28
|
+
'mipsel-linux-gnu'].include?(platform) &&
|
29
|
+
'ruby' == type &&
|
30
|
+
('1.9.3' == RUBY_VERSION || '2' <= version[0])) ? 1 : 0,
|
24
31
|
'HAS_ENCODING_SUPPORT' => (('ruby' == type || 'rubinius' == type) &&
|
25
32
|
(('1' == version[0] && '9' == version[1]) || '2' <= version[0])) ? 1 : 0,
|
26
33
|
'HAS_NANO_TIME' => ('ruby' == type && ('1' == version[0] && '9' == version[1]) || '2' <= version[0]) ? 1 : 0,
|
data/ext/oj/oj.c
CHANGED
@@ -1691,6 +1691,7 @@ Init_oj() {
|
|
1691
1691
|
xss_safe_sym = ID2SYM(rb_intern("xss_safe")); rb_gc_register_address(&xss_safe_sym);
|
1692
1692
|
|
1693
1693
|
oj_slash_string = rb_str_new2("/"); rb_gc_register_address(&oj_slash_string);
|
1694
|
+
OBJ_FREEZE(oj_slash_string);
|
1694
1695
|
|
1695
1696
|
oj_default_options.mode = ObjectMode;
|
1696
1697
|
|
data/lib/oj/version.rb
CHANGED
data/test/bug.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
%w(lib ext test).each do |dir|
|
5
|
+
$LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'rails'
|
9
|
+
require 'active_support'
|
10
|
+
require 'active_support/json'
|
11
|
+
require 'oj'
|
12
|
+
|
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/{big.rb → crash.rb}
RENAMED
@@ -1,15 +1,22 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# encoding: UTF-8
|
3
|
+
|
4
|
+
#$VERBOSE = true
|
5
|
+
|
6
|
+
%w(lib ext test).each do |dir|
|
7
|
+
$LOAD_PATH.unshift File.expand_path("../../#{dir}", __FILE__)
|
8
|
+
end
|
9
|
+
|
10
|
+
require 'active_support'
|
11
|
+
require 'active_support/core_ext'
|
12
|
+
require 'active_support/json'
|
4
13
|
require 'oj'
|
5
14
|
|
6
|
-
|
7
|
-
Oj.mimic_JSON
|
15
|
+
Oj.optimize_rails
|
8
16
|
|
9
17
|
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
18
|
|
11
|
-
|
12
|
-
|
13
|
-
|
19
|
+
100000.times {
|
20
|
+
JSON.pretty_generate(h)
|
21
|
+
}
|
14
22
|
#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.6.
|
4
|
+
version: 3.6.6
|
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-
|
11
|
+
date: 2018-08-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rake-compiler
|
@@ -79,16 +79,16 @@ extensions:
|
|
79
79
|
- ext/oj/extconf.rb
|
80
80
|
extra_rdoc_files:
|
81
81
|
- README.md
|
82
|
-
- pages/Modes.md
|
83
82
|
- pages/Advanced.md
|
84
|
-
- pages/Options.md
|
85
|
-
- pages/Custom.md
|
86
83
|
- pages/Compatibility.md
|
87
|
-
- pages/
|
88
|
-
- pages/Security.md
|
84
|
+
- pages/Custom.md
|
89
85
|
- pages/Encoding.md
|
90
86
|
- pages/JsonGem.md
|
87
|
+
- pages/Modes.md
|
88
|
+
- pages/Options.md
|
91
89
|
- pages/Rails.md
|
90
|
+
- pages/Security.md
|
91
|
+
- pages/WAB.md
|
92
92
|
files:
|
93
93
|
- LICENSE
|
94
94
|
- README.md
|
@@ -175,9 +175,9 @@ files:
|
|
175
175
|
- test/activesupport5/encoding_test_cases.rb
|
176
176
|
- test/activesupport5/test_helper.rb
|
177
177
|
- test/activesupport5/time_zone_test_helpers.rb
|
178
|
-
- test/
|
178
|
+
- test/bug.rb
|
179
|
+
- test/crash.rb
|
179
180
|
- test/files.rb
|
180
|
-
- test/foo.rb
|
181
181
|
- test/helper.rb
|
182
182
|
- test/isolated/shared.rb
|
183
183
|
- test/isolated/test_mimic_after.rb
|
@@ -270,85 +270,85 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
270
270
|
version: '0'
|
271
271
|
requirements: []
|
272
272
|
rubyforge_project:
|
273
|
-
rubygems_version: 2.7.
|
273
|
+
rubygems_version: 2.7.3
|
274
274
|
signing_key:
|
275
275
|
specification_version: 4
|
276
276
|
summary: A fast JSON parser and serializer.
|
277
277
|
test_files:
|
278
|
-
- test/
|
279
|
-
- test/
|
280
|
-
- test/
|
281
|
-
- test/
|
282
|
-
- test/test_null.rb
|
283
|
-
- test/test_compat.rb
|
284
|
-
- test/test_custom.rb
|
285
|
-
- test/perf_scp.rb
|
286
|
-
- test/test_gc.rb
|
287
|
-
- test/sample.rb
|
288
|
-
- test/json_gem/json_string_matching_test.rb
|
289
|
-
- test/json_gem/json_addition_test.rb
|
290
|
-
- test/json_gem/test_helper.rb
|
291
|
-
- test/json_gem/json_generator_test.rb
|
292
|
-
- test/json_gem/json_parser_test.rb
|
293
|
-
- test/json_gem/json_encoding_test.rb
|
294
|
-
- test/json_gem/json_common_interface_test.rb
|
295
|
-
- test/json_gem/json_generic_object_test.rb
|
296
|
-
- test/json_gem/json_ext_parser_test.rb
|
297
|
-
- test/json_gem/json_fixtures_test.rb
|
298
|
-
- test/tests_mimic_addition.rb
|
299
|
-
- test/test_wab.rb
|
300
|
-
- test/activesupport4/test_helper.rb
|
278
|
+
- test/_test_active.rb
|
279
|
+
- test/_test_active_mimic.rb
|
280
|
+
- test/_test_mimic_rails.rb
|
281
|
+
- test/activerecord/result_test.rb
|
301
282
|
- test/activesupport4/decoding_test.rb
|
302
283
|
- test/activesupport4/encoding_test.rb
|
303
|
-
- test/
|
304
|
-
- test/_test_active.rb
|
305
|
-
- test/test_file.rb
|
306
|
-
- test/activesupport5/encoding_test_cases.rb
|
307
|
-
- test/activesupport5/time_zone_test_helpers.rb
|
308
|
-
- test/activesupport5/test_helper.rb
|
284
|
+
- test/activesupport4/test_helper.rb
|
309
285
|
- test/activesupport5/decoding_test.rb
|
310
286
|
- test/activesupport5/encoding_test.rb
|
311
|
-
- test/
|
312
|
-
- test/
|
313
|
-
- test/
|
314
|
-
- test/
|
315
|
-
- test/
|
316
|
-
- test/
|
317
|
-
- test/test_saj.rb
|
318
|
-
- test/perf_compat.rb
|
287
|
+
- test/activesupport5/encoding_test_cases.rb
|
288
|
+
- test/activesupport5/test_helper.rb
|
289
|
+
- test/activesupport5/time_zone_test_helpers.rb
|
290
|
+
- test/bug.rb
|
291
|
+
- test/crash.rb
|
292
|
+
- test/files.rb
|
319
293
|
- test/helper.rb
|
294
|
+
- test/isolated/shared.rb
|
295
|
+
- test/isolated/test_mimic_after.rb
|
320
296
|
- test/isolated/test_mimic_alone.rb
|
297
|
+
- test/isolated/test_mimic_as_json.rb
|
298
|
+
- test/isolated/test_mimic_before.rb
|
321
299
|
- test/isolated/test_mimic_define.rb
|
322
300
|
- test/isolated/test_mimic_rails_after.rb
|
323
|
-
- test/isolated/test_mimic_after.rb
|
324
301
|
- test/isolated/test_mimic_rails_before.rb
|
325
|
-
- test/isolated/test_mimic_as_json.rb
|
326
302
|
- test/isolated/test_mimic_redefine.rb
|
327
|
-
- test/
|
328
|
-
- test/
|
329
|
-
- test/
|
330
|
-
- test/
|
303
|
+
- test/json_gem/json_addition_test.rb
|
304
|
+
- test/json_gem/json_common_interface_test.rb
|
305
|
+
- test/json_gem/json_encoding_test.rb
|
306
|
+
- test/json_gem/json_ext_parser_test.rb
|
307
|
+
- test/json_gem/json_fixtures_test.rb
|
308
|
+
- test/json_gem/json_generator_test.rb
|
309
|
+
- test/json_gem/json_generic_object_test.rb
|
310
|
+
- test/json_gem/json_parser_test.rb
|
311
|
+
- test/json_gem/json_string_matching_test.rb
|
312
|
+
- test/json_gem/test_helper.rb
|
313
|
+
- test/perf.rb
|
314
|
+
- test/perf_compat.rb
|
331
315
|
- test/perf_fast.rb
|
332
|
-
- test/
|
333
|
-
- test/
|
334
|
-
- test/
|
316
|
+
- test/perf_file.rb
|
317
|
+
- test/perf_object.rb
|
318
|
+
- test/perf_saj.rb
|
319
|
+
- test/perf_scp.rb
|
320
|
+
- test/perf_simple.rb
|
321
|
+
- test/perf_strict.rb
|
322
|
+
- test/perf_wab.rb
|
335
323
|
- test/sample/change.rb
|
336
324
|
- test/sample/dir.rb
|
337
|
-
- test/sample/text.rb
|
338
|
-
- test/sample/layer.rb
|
339
|
-
- test/sample/rect.rb
|
340
|
-
- test/sample/group.rb
|
341
|
-
- test/sample/oval.rb
|
342
325
|
- test/sample/doc.rb
|
326
|
+
- test/sample/file.rb
|
327
|
+
- test/sample/group.rb
|
343
328
|
- test/sample/hasprops.rb
|
329
|
+
- test/sample/layer.rb
|
330
|
+
- test/sample/line.rb
|
331
|
+
- test/sample/oval.rb
|
332
|
+
- test/sample/rect.rb
|
344
333
|
- test/sample/shape.rb
|
345
|
-
- test/sample/
|
346
|
-
- test/
|
347
|
-
- test/
|
348
|
-
- test/
|
349
|
-
- test/
|
350
|
-
- test/
|
351
|
-
- test/
|
334
|
+
- test/sample/text.rb
|
335
|
+
- test/sample.rb
|
336
|
+
- test/sample_json.rb
|
337
|
+
- test/test_compat.rb
|
338
|
+
- test/test_custom.rb
|
339
|
+
- test/test_debian.rb
|
340
|
+
- test/test_fast.rb
|
341
|
+
- test/test_file.rb
|
342
|
+
- test/test_gc.rb
|
343
|
+
- test/test_hash.rb
|
344
|
+
- test/test_null.rb
|
345
|
+
- test/test_object.rb
|
346
|
+
- test/test_saj.rb
|
347
|
+
- test/test_scp.rb
|
348
|
+
- test/test_strict.rb
|
352
349
|
- test/test_various.rb
|
353
|
-
- test/
|
354
|
-
- test/
|
350
|
+
- test/test_wab.rb
|
351
|
+
- test/test_writer.rb
|
352
|
+
- test/tests.rb
|
353
|
+
- test/tests_mimic.rb
|
354
|
+
- test/tests_mimic_addition.rb
|
data/test/foo.rb
DELETED
@@ -1,58 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
$: << '.'
|
4
|
-
$: << '../lib'
|
5
|
-
$: << '../ext'
|
6
|
-
|
7
|
-
require 'oj'
|
8
|
-
|
9
|
-
Oj.default_options = {mode: :strict}
|
10
|
-
json = Oj.dump({ aggregations: { hashtags: { buckets: Array.new(100) { { key: 'foo', count: 100 } } } } }, mode: :strict)
|
11
|
-
|
12
|
-
def expect(a,b)
|
13
|
-
puts "*** #{a} != #{b}" unless a == b
|
14
|
-
end
|
15
|
-
|
16
|
-
def dig(obj, *path)
|
17
|
-
return obj if path.empty?
|
18
|
-
|
19
|
-
if obj.is_a?(Array)
|
20
|
-
obj.each { |v|
|
21
|
-
r = dig(v, *path)
|
22
|
-
return r unless r.nil?
|
23
|
-
}
|
24
|
-
end
|
25
|
-
return nil unless obj.is_a?(Hash)
|
26
|
-
|
27
|
-
dig(obj[path[0]], *path[1..-1])
|
28
|
-
end
|
29
|
-
|
30
|
-
1000.times do |i|
|
31
|
-
Oj::Doc.open(json) do |doc|
|
32
|
-
# this always passes
|
33
|
-
doc.each_child('/aggregations/hashtags/buckets') do |bucket|
|
34
|
-
expect(bucket.fetch('key'), 'foo')
|
35
|
-
expect(bucket.fetch('count'), 100)
|
36
|
-
end
|
37
|
-
|
38
|
-
# load any other json using Oj.load
|
39
|
-
# this will pass
|
40
|
-
other = Oj.load(json)
|
41
|
-
dig(other, 'aggregations', 'hashtags', 'buckets').each do |bucket|
|
42
|
-
expect(bucket.fetch('key'), 'foo')
|
43
|
-
expect(bucket.fetch('count'), 100)
|
44
|
-
end
|
45
|
-
GC.start
|
46
|
-
doc.each_child('/aggregations/hashtags/buckets') do |bucket|
|
47
|
-
# This is where it fails!!!! It will be some other object (even an rspec matcher in some cases)
|
48
|
-
expect(bucket.fetch('key'), 'foo')
|
49
|
-
expect(bucket.fetch('count'), 100)
|
50
|
-
end
|
51
|
-
|
52
|
-
# this always passes if it gets this far
|
53
|
-
dig(other, 'aggregations', 'hashtags', 'buckets').each do |bucket|
|
54
|
-
expect(bucket.fetch('key'), 'foo')
|
55
|
-
expect(bucket.fetch('count'), 100)
|
56
|
-
end
|
57
|
-
end
|
58
|
-
end
|