oj 3.16.4 → 3.16.6
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/CHANGELOG.md +8 -0
- data/ext/oj/mimic_json.c +3 -1
- data/ext/oj/usual.c +17 -1
- data/lib/oj/mimic.rb +1 -5
- data/lib/oj/version.rb +1 -1
- data/test/activesupport7/abstract_unit.rb +4 -1
- data/test/foo.rb +16 -4
- data/test/test_parser_usual.rb +24 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 95bab421dc901891ec12dc755e78eb02c517e34f205894c8cedeca3bc68401f6
|
4
|
+
data.tar.gz: 61707536ecd3a9a558df8872a3ce7b60fc04c47dbd6d7da703bd0605cf2e73bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a46a5aabda78c3da10739e31f403a8606de5129106dce4a8a26f84c66f3b7f63abc448944476e8780a00ba155a3f4fac00b83e92af7bfbaee9e177834351cf5d
|
7
|
+
data.tar.gz: da32618ab105131c9a30527ad5d9a1624b5f229f1e0fc06fa258732af4f3b1eb21fd45a8d8980513eede69a61ac823ddb465b5d465630dd0f8928720f7ec8e3d
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
+
## 3.16.6 - 2024-09-09
|
4
|
+
|
5
|
+
- Fixed issue with Rails 7.2 that changed the order of calls to to_json and as_json.
|
6
|
+
|
7
|
+
## 3.16.5 - 2024-08-07
|
8
|
+
|
9
|
+
- Fixed Oj::Parser so that block procedures work correctly.
|
10
|
+
|
3
11
|
## 3.16.4 - 2024-06-08
|
4
12
|
|
5
13
|
- Fixed Oj::Parse EOF issue on larger stream input.
|
data/ext/oj/mimic_json.c
CHANGED
@@ -905,7 +905,9 @@ oj_define_mimic_json(int argc, VALUE *argv, VALUE self) {
|
|
905
905
|
}
|
906
906
|
oj_mimic_json_methods(json);
|
907
907
|
|
908
|
-
|
908
|
+
if (!rb_const_defined(rb_cObject, rb_intern("ActiveSupport"))) {
|
909
|
+
rb_define_method(rb_cObject, "to_json", mimic_object_to_json, -1);
|
910
|
+
}
|
909
911
|
|
910
912
|
rb_gv_set("$VERBOSE", verbose);
|
911
913
|
|
data/ext/oj/usual.c
CHANGED
@@ -289,9 +289,14 @@ static void close_object(ojParser p) {
|
|
289
289
|
}
|
290
290
|
rb_hash_bulk_insert(d->vtail - head, head, obj);
|
291
291
|
d->ktail = d->khead + c->ki;
|
292
|
+
|
292
293
|
d->vtail = head;
|
293
294
|
head--;
|
294
295
|
*head = obj;
|
296
|
+
if (1 == d->vtail - d->vhead && rb_block_given_p()) {
|
297
|
+
d->vtail = d->vhead;
|
298
|
+
rb_yield(obj);
|
299
|
+
}
|
295
300
|
}
|
296
301
|
|
297
302
|
static void close_object_class(ojParser p) {
|
@@ -572,7 +577,18 @@ static VALUE result(ojParser p) {
|
|
572
577
|
Usual d = (Usual)p->ctx;
|
573
578
|
|
574
579
|
if (d->vhead < d->vtail) {
|
575
|
-
|
580
|
+
long cnt = d->vtail - d->vhead;
|
581
|
+
volatile VALUE ary;
|
582
|
+
volatile VALUE *vp;
|
583
|
+
|
584
|
+
if (1 == cnt) {
|
585
|
+
return *d->vhead;
|
586
|
+
}
|
587
|
+
ary = rb_ary_new();
|
588
|
+
for (vp = d->vhead; vp < d->vtail; vp++) {
|
589
|
+
rb_ary_push(ary, *vp);
|
590
|
+
}
|
591
|
+
return ary;
|
576
592
|
}
|
577
593
|
if (d->raise_on_empty) {
|
578
594
|
rb_raise(oj_parse_error_class, "empty string");
|
data/lib/oj/mimic.rb
CHANGED
data/lib/oj/version.rb
CHANGED
@@ -19,7 +19,10 @@ require "active_support"
|
|
19
19
|
Thread.abort_on_exception = true
|
20
20
|
|
21
21
|
# Show backtraces for deprecated behavior for quicker cleanup.
|
22
|
-
ActiveSupport::Deprecation.debug
|
22
|
+
if ActiveSupport::Deprecation.respond_to?(:debug)
|
23
|
+
# Rails 7.2 does not have ActiveSupport::Deprecation.debug
|
24
|
+
ActiveSupport::Deprecation.debug = true
|
25
|
+
end
|
23
26
|
|
24
27
|
# Default to old to_time behavior but allow running tests with new behavior
|
25
28
|
ActiveSupport.to_time_preserves_timezone = ENV["PRESERVE_TIMEZONES"] == "1"
|
data/test/foo.rb
CHANGED
@@ -5,10 +5,22 @@ $LOAD_PATH << '.'
|
|
5
5
|
$LOAD_PATH << File.join(__dir__, '../lib')
|
6
6
|
$LOAD_PATH << File.join(__dir__, '../ext')
|
7
7
|
|
8
|
-
require 'json'
|
9
8
|
require 'oj'
|
10
|
-
require 'oj/json'
|
11
9
|
|
12
|
-
|
10
|
+
reader, writer = IO.pipe
|
13
11
|
|
14
|
-
|
12
|
+
thread =
|
13
|
+
Thread.new do
|
14
|
+
5.times do |id|
|
15
|
+
Oj.to_stream(writer, { "id" => id })
|
16
|
+
sleep(1)
|
17
|
+
end
|
18
|
+
|
19
|
+
writer.close
|
20
|
+
end
|
21
|
+
|
22
|
+
p = Oj::Parser.new(:usual)
|
23
|
+
p.load(reader) { |data| puts "#{Time.now} -- ID: #{data["id"]}" }
|
24
|
+
|
25
|
+
reader.close
|
26
|
+
thread.join
|
data/test/test_parser_usual.rb
CHANGED
@@ -114,6 +114,30 @@ class UsualTest < Minitest::Test
|
|
114
114
|
assert_equal(Float, doc.class)
|
115
115
|
end
|
116
116
|
|
117
|
+
def test_multi_parse
|
118
|
+
p = Oj::Parser.new(:usual)
|
119
|
+
out = []
|
120
|
+
p.parse('{"a":1}{"b":{"x":2}} {"c":3}') { |j| out.push(j) }
|
121
|
+
assert_equal([{'a'=>1}, {'b'=>{'x'=>2}},{'c'=>3}], out)
|
122
|
+
end
|
123
|
+
|
124
|
+
def test_multi_load
|
125
|
+
p = Oj::Parser.new(:usual)
|
126
|
+
out = []
|
127
|
+
r, w = IO.pipe
|
128
|
+
thread = Thread.new do
|
129
|
+
['{"a":1}', '{"b":{"x"', ':2}}{"c":', '3}'].each { |seg|
|
130
|
+
w.write(seg)
|
131
|
+
sleep(0.1)
|
132
|
+
}
|
133
|
+
w.close
|
134
|
+
end
|
135
|
+
p.load(r) { |j| out.push(j) }
|
136
|
+
r.close
|
137
|
+
thread.join
|
138
|
+
assert_equal([{'a'=>1}, {'b'=>{'x'=>2}},{'c'=>3}], out)
|
139
|
+
end
|
140
|
+
|
117
141
|
def test_omit_null
|
118
142
|
p = Oj::Parser.new(:usual)
|
119
143
|
p.omit_null = true
|
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.16.
|
4
|
+
version: 3.16.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: 2024-
|
11
|
+
date: 2024-09-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bigdecimal
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: ostruct
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.2'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.2'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: minitest
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -308,7 +322,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
308
322
|
- !ruby/object:Gem::Version
|
309
323
|
version: '0'
|
310
324
|
requirements: []
|
311
|
-
rubygems_version: 3.
|
325
|
+
rubygems_version: 3.5.11
|
312
326
|
signing_key:
|
313
327
|
specification_version: 4
|
314
328
|
summary: A fast JSON parser and serializer.
|