oj 3.16.1 → 3.16.2
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 +6 -0
- data/ext/oj/cache.c +4 -2
- data/ext/oj/cache.h +3 -2
- data/ext/oj/dump.c +5 -2
- data/ext/oj/fast.c +7 -6
- data/ext/oj/intern.c +23 -6
- data/ext/oj/mimic_json.c +3 -3
- data/ext/oj/object.c +13 -5
- data/ext/oj/oj.c +129 -130
- data/ext/oj/oj.h +3 -3
- data/ext/oj/parser.c +61 -50
- data/ext/oj/rails.c +23 -6
- data/ext/oj/stream_writer.c +35 -15
- data/ext/oj/string_writer.c +50 -16
- data/ext/oj/usual.c +20 -0
- data/ext/oj/usual.h +1 -0
- data/ext/oj/val_stack.c +13 -2
- data/lib/oj/version.rb +1 -1
- data/test/json_gem/json_generator_test.rb +6 -0
- data/test/test_custom.rb +2 -1
- data/test/test_object.rb +14 -0
- data/test/test_parser_usual.rb +10 -0
- metadata +16 -2
data/ext/oj/val_stack.c
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
#include "odd.h"
|
9
9
|
#include "oj.h"
|
10
10
|
|
11
|
-
static void
|
11
|
+
static void stack_mark(void *ptr) {
|
12
12
|
ValStack stack = (ValStack)ptr;
|
13
13
|
Val v;
|
14
14
|
|
@@ -46,6 +46,17 @@ static void mark(void *ptr) {
|
|
46
46
|
#endif
|
47
47
|
}
|
48
48
|
|
49
|
+
static const rb_data_type_t oj_stack_type = {
|
50
|
+
"Oj/stack",
|
51
|
+
{
|
52
|
+
stack_mark,
|
53
|
+
NULL,
|
54
|
+
NULL,
|
55
|
+
},
|
56
|
+
0,
|
57
|
+
0,
|
58
|
+
};
|
59
|
+
|
49
60
|
VALUE
|
50
61
|
oj_stack_init(ValStack stack) {
|
51
62
|
#ifdef HAVE_PTHREAD_MUTEX_INIT
|
@@ -70,7 +81,7 @@ oj_stack_init(ValStack stack) {
|
|
70
81
|
stack->head->clen = 0;
|
71
82
|
stack->head->next = NEXT_NONE;
|
72
83
|
|
73
|
-
return
|
84
|
+
return TypedData_Wrap_Struct(oj_cstack_class, &oj_stack_type, stack);
|
74
85
|
}
|
75
86
|
|
76
87
|
const char *oj_stack_next_string(ValNext n) {
|
data/lib/oj/version.rb
CHANGED
@@ -142,6 +142,8 @@ class JSONGeneratorTest < Test::Unit::TestCase
|
|
142
142
|
# seems to occur on travis but not locally.
|
143
143
|
actual = state.to_h
|
144
144
|
actual.delete(:escape_slash)
|
145
|
+
actual.delete(:strict)
|
146
|
+
actual.delete(:script_safe)
|
145
147
|
assert_equal({
|
146
148
|
:allow_nan => false,
|
147
149
|
:array_nl => "\n",
|
@@ -162,6 +164,8 @@ class JSONGeneratorTest < Test::Unit::TestCase
|
|
162
164
|
# seems to occur on travis but not locally.
|
163
165
|
actual = state.to_h
|
164
166
|
actual.delete(:escape_slash)
|
167
|
+
actual.delete(:strict)
|
168
|
+
actual.delete(:script_safe)
|
165
169
|
assert_equal({
|
166
170
|
:allow_nan => false,
|
167
171
|
:array_nl => "",
|
@@ -182,6 +186,8 @@ class JSONGeneratorTest < Test::Unit::TestCase
|
|
182
186
|
# seems to occur on travis but not locally.
|
183
187
|
actual = state.to_h
|
184
188
|
actual.delete(:escape_slash)
|
189
|
+
actual.delete(:strict)
|
190
|
+
actual.delete(:script_safe)
|
185
191
|
assert_equal({
|
186
192
|
:allow_nan => false,
|
187
193
|
:array_nl => "",
|
data/test/test_custom.rb
CHANGED
@@ -503,8 +503,9 @@ class CustomJuice < Minitest::Test
|
|
503
503
|
# These two forms will lose precision while dumping as they don't
|
504
504
|
# preserve full precision. We check that a dumped version is equal
|
505
505
|
# to that version loaded and dumped a second time, but don't check
|
506
|
-
# that the loaded Ruby
|
506
|
+
# that the loaded Ruby object is still the same as the original.
|
507
507
|
dump_load_dump(obj, false, :time_format => :xmlschema, :create_id => '^o', :create_additions => true)
|
508
|
+
dump_load_dump(obj, false, :time_format => :xmlschema, :create_id => '^o', :create_additions => true, second_precision: 3)
|
508
509
|
dump_load_dump(obj, false, :time_format => :ruby, :create_id => '^o', :create_additions => true)
|
509
510
|
end
|
510
511
|
|
data/test/test_object.rb
CHANGED
@@ -951,6 +951,20 @@ class ObjectJuice < Minitest::Test
|
|
951
951
|
dump_and_load(DateTime.new(2012, 6, 19, 13, 5, Rational(7_123_456_789, 1_000_000_000)), false)
|
952
952
|
end
|
953
953
|
|
954
|
+
def test_odd_xml_time
|
955
|
+
str = "2023-01-01T00:00:00Z"
|
956
|
+
assert_equal(Time.parse(str), Oj.load('{"^t":"' + str + '"}', mode: :object))
|
957
|
+
|
958
|
+
str = "2023-01-01T00:00:00.3Z"
|
959
|
+
assert_equal(Time.parse(str), Oj.load('{"^t":"' + str + '"}', mode: :object))
|
960
|
+
|
961
|
+
str = "2023-01-01T00:00:00.123456789123456789Z"
|
962
|
+
assert_equal(Time.parse(str), Oj.load('{"^t":"' + str + '"}', mode: :object))
|
963
|
+
|
964
|
+
str = "2023-01-01T00:00:00.123456789123456789123456789Z"
|
965
|
+
assert_equal(Time.parse(str), Oj.load('{"^t":"' + str + '"}', mode: :object))
|
966
|
+
end
|
967
|
+
|
954
968
|
def test_bag
|
955
969
|
json = %{{
|
956
970
|
"^o":"ObjectJuice::Jem",
|
data/test/test_parser_usual.rb
CHANGED
@@ -147,6 +147,16 @@ class UsualTest < Minitest::Test
|
|
147
147
|
assert_equal(MyHash, doc.class)
|
148
148
|
end
|
149
149
|
|
150
|
+
def test_empty
|
151
|
+
p = Oj::Parser.new(:usual)
|
152
|
+
p.raise_on_empty = false
|
153
|
+
doc = p.parse(' ')
|
154
|
+
assert_nil(doc)
|
155
|
+
|
156
|
+
p.raise_on_empty = true
|
157
|
+
assert_raises(Oj::ParseError) { p.parse(' ') }
|
158
|
+
end
|
159
|
+
|
150
160
|
class MyClass
|
151
161
|
attr_accessor :a
|
152
162
|
attr_accessor :b
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
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.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: 2023-
|
11
|
+
date: 2023-12-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bigdecimal
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.1'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.1'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: minitest
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|