bson 4.15.0-java → 5.0.0-java
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
- checksums.yaml.gz.sig +0 -0
- data/README.md +4 -4
- data/Rakefile +5 -0
- data/lib/bson/active_support.rb +1 -0
- data/lib/bson/array.rb +57 -31
- data/lib/bson/big_decimal.rb +16 -6
- data/lib/bson/binary.rb +255 -128
- data/lib/bson/boolean.rb +1 -0
- data/lib/bson/code.rb +9 -11
- data/lib/bson/code_with_scope.rb +8 -10
- data/lib/bson/config.rb +1 -27
- data/lib/bson/date.rb +2 -1
- data/lib/bson/date_time.rb +2 -1
- data/lib/bson/db_pointer.rb +11 -12
- data/lib/bson/dbref.rb +11 -9
- data/lib/bson/decimal128/builder.rb +9 -8
- data/lib/bson/decimal128.rb +24 -110
- data/lib/bson/document.rb +1 -0
- data/lib/bson/environment.rb +1 -0
- data/lib/bson/error/bson_decode_error.rb +11 -0
- data/lib/bson/error/ext_json_parse_error.rb +11 -0
- data/lib/bson/error/illegal_key.rb +23 -0
- data/lib/bson/error/invalid_binary_type.rb +37 -0
- data/lib/bson/error/invalid_dbref_argument.rb +12 -0
- data/lib/bson/error/invalid_decimal128_argument.rb +25 -0
- data/lib/bson/error/invalid_decimal128_range.rb +27 -0
- data/lib/bson/error/invalid_decimal128_string.rb +26 -0
- data/lib/bson/error/invalid_key.rb +24 -0
- data/lib/bson/error/invalid_object_id.rb +11 -0
- data/lib/bson/error/invalid_regexp_pattern.rb +13 -0
- data/lib/bson/error/unrepresentable_precision.rb +19 -0
- data/lib/bson/error/unserializable_class.rb +13 -0
- data/lib/bson/error/unsupported_binary_subtype.rb +12 -0
- data/lib/bson/error/unsupported_type.rb +11 -0
- data/lib/bson/error.rb +16 -28
- data/lib/bson/ext_json.rb +1 -0
- data/lib/bson/false_class.rb +2 -1
- data/lib/bson/float.rb +2 -1
- data/lib/bson/hash.rb +127 -72
- data/lib/bson/int32.rb +16 -4
- data/lib/bson/int64.rb +16 -4
- data/lib/bson/integer.rb +3 -4
- data/lib/bson/json.rb +1 -0
- data/lib/bson/max_key.rb +7 -9
- data/lib/bson/min_key.rb +7 -9
- data/lib/bson/nil_class.rb +1 -0
- data/lib/bson/object.rb +5 -25
- data/lib/bson/object_id.rb +75 -121
- data/lib/bson/open_struct.rb +3 -2
- data/lib/bson/regexp.rb +35 -64
- data/lib/bson/registry.rb +2 -6
- data/lib/bson/specialized.rb +2 -1
- data/lib/bson/string.rb +4 -27
- data/lib/bson/symbol.rb +22 -19
- data/lib/bson/time.rb +2 -1
- data/lib/bson/time_with_zone.rb +13 -1
- data/lib/bson/timestamp.rb +2 -1
- data/lib/bson/true_class.rb +2 -1
- data/lib/bson/undefined.rb +14 -0
- data/lib/bson/version.rb +2 -1
- data/lib/bson-ruby.jar +0 -0
- data/lib/bson.rb +3 -2
- data/spec/bson/array_spec.rb +19 -60
- data/spec/bson/big_decimal_spec.rb +16 -4
- data/spec/bson/binary_spec.rb +83 -74
- data/spec/bson/binary_uuid_spec.rb +1 -0
- data/spec/bson/boolean_spec.rb +1 -0
- data/spec/bson/byte_buffer_read_spec.rb +1 -0
- data/spec/bson/byte_buffer_spec.rb +1 -0
- data/spec/bson/byte_buffer_write_spec.rb +1 -0
- data/spec/bson/code_spec.rb +5 -3
- data/spec/bson/code_with_scope_spec.rb +5 -3
- data/spec/bson/config_spec.rb +1 -35
- data/spec/bson/date_spec.rb +1 -0
- data/spec/bson/date_time_spec.rb +1 -0
- data/spec/bson/dbref_legacy_spec.rb +20 -3
- data/spec/bson/dbref_spec.rb +9 -9
- data/spec/bson/decimal128_spec.rb +40 -20
- data/spec/bson/document_as_spec.rb +1 -0
- data/spec/bson/document_spec.rb +1 -1
- data/spec/bson/ext_json_parse_spec.rb +1 -0
- data/spec/bson/false_class_spec.rb +8 -0
- data/spec/bson/float_spec.rb +8 -3
- data/spec/bson/hash_as_spec.rb +1 -0
- data/spec/bson/hash_spec.rb +87 -75
- data/spec/bson/int32_spec.rb +21 -6
- data/spec/bson/int64_spec.rb +21 -6
- data/spec/bson/integer_spec.rb +45 -13
- data/spec/bson/json_spec.rb +1 -0
- data/spec/bson/max_key_spec.rb +5 -3
- data/spec/bson/min_key_spec.rb +5 -3
- data/spec/bson/nil_class_spec.rb +1 -0
- data/spec/bson/object_id_spec.rb +43 -4
- data/spec/bson/object_spec.rb +2 -1
- data/spec/bson/open_struct_spec.rb +14 -71
- data/spec/bson/raw_spec.rb +9 -15
- data/spec/bson/regexp_spec.rb +4 -3
- data/spec/bson/registry_spec.rb +2 -1
- data/spec/bson/string_spec.rb +13 -38
- data/spec/bson/symbol_raw_spec.rb +25 -0
- data/spec/bson/symbol_spec.rb +15 -18
- data/spec/bson/time_spec.rb +1 -0
- data/spec/bson/time_with_zone_spec.rb +1 -0
- data/spec/bson/timestamp_spec.rb +1 -0
- data/spec/bson/true_class_spec.rb +8 -0
- data/spec/bson/undefined_spec.rb +27 -0
- data/spec/bson_spec.rb +1 -0
- data/spec/runners/common_driver.rb +6 -5
- data/spec/runners/corpus.rb +6 -0
- data/spec/runners/corpus_legacy.rb +1 -0
- data/spec/shared/lib/mrss/constraints.rb +8 -16
- data/spec/shared/lib/mrss/docker_runner.rb +30 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
- data/spec/shared/lib/mrss/lite_constraints.rb +48 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +68 -85
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/server.sh +73 -24
- data/spec/shared/shlib/set_env.sh +39 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/spec_tests/common_driver_spec.rb +9 -4
- data/spec/spec_tests/corpus_legacy_spec.rb +1 -0
- data/spec/spec_tests/corpus_spec.rb +13 -3
- data/spec/spec_tests/data/corpus/binary.json +5 -0
- data/spec/spec_tests/data/corpus/code.json +13 -13
- data/spec/spec_tests/data/corpus/decimal128-4.json +48 -0
- data/spec/spec_tests/data/corpus/decimal128-6.json +12 -0
- data/spec/spec_tests/data/corpus/decimal128-7.json +4 -0
- data/spec/spec_tests/data/corpus/document.json +20 -0
- data/spec/spec_tests/data/corpus/symbol.json +7 -7
- data/spec/spec_tests/data/corpus/top.json +18 -3
- data/spec/support/shared_examples.rb +28 -5
- data/spec/support/spec_config.rb +1 -0
- data/spec/support/utils.rb +49 -1
- data.tar.gz.sig +0 -0
- metadata +166 -142
- metadata.gz.sig +0 -0
data/spec/bson/int32_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -254,23 +255,37 @@ describe BSON::Int32 do
|
|
254
255
|
end
|
255
256
|
end
|
256
257
|
|
258
|
+
describe '#as_json' do
|
259
|
+
let(:object) { described_class.new(42) }
|
260
|
+
|
261
|
+
it 'returns an Integer' do
|
262
|
+
expect(object.as_json).to eq 42
|
263
|
+
end
|
264
|
+
|
265
|
+
it_behaves_like "a JSON serializable object"
|
266
|
+
end
|
267
|
+
|
257
268
|
describe '#as_extended_json' do
|
269
|
+
let(:object) { described_class.new(42) }
|
270
|
+
|
258
271
|
context 'canonical mode' do
|
259
|
-
it 'returns $numberInt' do
|
260
|
-
|
272
|
+
it 'returns a Hash with key $numberInt' do
|
273
|
+
expect(object.as_extended_json).to eq({ '$numberInt' => '42' })
|
261
274
|
end
|
262
275
|
end
|
263
276
|
|
264
277
|
context 'relaxed mode' do
|
265
|
-
it 'returns
|
266
|
-
|
278
|
+
it 'returns an Integer' do
|
279
|
+
expect(object.as_extended_json(mode: :relaxed)).to eq 42
|
267
280
|
end
|
268
281
|
end
|
269
282
|
|
270
283
|
context 'legacy mode' do
|
271
|
-
it 'returns
|
272
|
-
|
284
|
+
it 'returns an Integer' do
|
285
|
+
expect(object.as_extended_json(mode: :legacy)).to eq 42
|
273
286
|
end
|
274
287
|
end
|
288
|
+
|
289
|
+
it_behaves_like "an Extended JSON serializable object"
|
275
290
|
end
|
276
291
|
end
|
data/spec/bson/int64_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -298,23 +299,37 @@ describe BSON::Int64 do
|
|
298
299
|
end
|
299
300
|
end
|
300
301
|
|
302
|
+
describe '#as_json' do
|
303
|
+
let(:object) { described_class.new(42) }
|
304
|
+
|
305
|
+
it 'returns an Integer' do
|
306
|
+
expect(object.as_json).to eq 42
|
307
|
+
end
|
308
|
+
|
309
|
+
it_behaves_like "a JSON serializable object"
|
310
|
+
end
|
311
|
+
|
301
312
|
describe '#as_extended_json' do
|
313
|
+
let(:object) { described_class.new(42) }
|
314
|
+
|
302
315
|
context 'canonical mode' do
|
303
|
-
it 'returns $numberLong' do
|
304
|
-
|
316
|
+
it 'returns a Hash with key $numberLong' do
|
317
|
+
expect(object.as_extended_json).to eq({ '$numberLong' => '42' })
|
305
318
|
end
|
306
319
|
end
|
307
320
|
|
308
321
|
context 'relaxed mode' do
|
309
|
-
it 'returns
|
310
|
-
|
322
|
+
it 'returns an Integer' do
|
323
|
+
expect(object.as_extended_json(mode: :relaxed)).to eq 42
|
311
324
|
end
|
312
325
|
end
|
313
326
|
|
314
327
|
context 'legacy mode' do
|
315
|
-
it 'returns
|
316
|
-
|
328
|
+
it 'returns an Integer' do
|
329
|
+
expect(object.as_extended_json(mode: :legacy)).to eq 42
|
317
330
|
end
|
318
331
|
end
|
332
|
+
|
333
|
+
it_behaves_like "an Extended JSON serializable object"
|
319
334
|
end
|
320
335
|
end
|
data/spec/bson/integer_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -69,29 +70,60 @@ describe Integer do
|
|
69
70
|
end
|
70
71
|
end
|
71
72
|
|
72
|
-
describe '#
|
73
|
-
it 'returns integer' do
|
74
|
-
42.to_json.
|
73
|
+
describe '#as_json' do
|
74
|
+
it 'returns an integer string' do
|
75
|
+
expect(42.to_json).to eq '42'
|
75
76
|
end
|
76
77
|
end
|
77
78
|
|
78
79
|
describe '#as_extended_json' do
|
79
|
-
|
80
|
-
|
81
|
-
|
80
|
+
|
81
|
+
context 'when 32-bit representable' do
|
82
|
+
let(:object) { 42 }
|
83
|
+
|
84
|
+
context 'canonical mode' do
|
85
|
+
it 'returns $numberInt when small' do
|
86
|
+
expect(object.as_extended_json).to eq({ '$numberInt' => '42' })
|
87
|
+
end
|
82
88
|
end
|
83
|
-
end
|
84
89
|
|
85
|
-
|
86
|
-
|
87
|
-
|
90
|
+
context 'relaxed mode' do
|
91
|
+
it 'returns integer' do
|
92
|
+
expect(object.as_extended_json(mode: :relaxed)).to eq 42
|
93
|
+
end
|
88
94
|
end
|
95
|
+
|
96
|
+
context 'legacy mode' do
|
97
|
+
it 'returns integer' do
|
98
|
+
expect(object.as_extended_json(mode: :legacy)).to eq 42
|
99
|
+
end
|
100
|
+
end
|
101
|
+
|
102
|
+
it_behaves_like "an Extended JSON serializable object"
|
89
103
|
end
|
90
104
|
|
91
|
-
context '
|
92
|
-
|
93
|
-
|
105
|
+
context 'when not 32-bit representable' do
|
106
|
+
let(:object) { 18014398241046527 }
|
107
|
+
|
108
|
+
context 'canonical mode' do
|
109
|
+
it 'returns $numberInt when small' do
|
110
|
+
expect(object.as_extended_json).to eq({ '$numberLong' => '18014398241046527' })
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
context 'relaxed mode' do
|
115
|
+
it 'returns integer' do
|
116
|
+
expect(object.as_extended_json(mode: :relaxed)).to eq 18014398241046527
|
117
|
+
end
|
94
118
|
end
|
119
|
+
|
120
|
+
context 'legacy mode' do
|
121
|
+
it 'returns integer' do
|
122
|
+
expect(object.as_extended_json(mode: :legacy)).to eq 18014398241046527
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
it_behaves_like "an Extended JSON serializable object"
|
95
127
|
end
|
96
128
|
end
|
97
129
|
end
|
data/spec/bson/json_spec.rb
CHANGED
data/spec/bson/max_key_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -49,17 +50,18 @@ describe BSON::MaxKey do
|
|
49
50
|
end
|
50
51
|
end
|
51
52
|
|
52
|
-
describe "#
|
53
|
+
describe "#as_extended_json" do
|
53
54
|
|
54
55
|
let(:object) do
|
55
56
|
described_class.new
|
56
57
|
end
|
57
58
|
|
58
59
|
it "returns the binary data plus type" do
|
59
|
-
expect(object.
|
60
|
+
expect(object.as_extended_json).to eq({ "$maxKey" => 1 })
|
60
61
|
end
|
61
62
|
|
62
|
-
it_behaves_like
|
63
|
+
it_behaves_like 'an Extended JSON serializable object'
|
64
|
+
it_behaves_like '#as_json calls #as_extended_json'
|
63
65
|
end
|
64
66
|
|
65
67
|
describe "#to_bson/#from_bson" do
|
data/spec/bson/min_key_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -16,17 +17,18 @@ require "spec_helper"
|
|
16
17
|
|
17
18
|
describe BSON::MinKey do
|
18
19
|
|
19
|
-
describe "#
|
20
|
+
describe "#as_extended_json" do
|
20
21
|
|
21
22
|
let(:object) do
|
22
23
|
described_class.new
|
23
24
|
end
|
24
25
|
|
25
26
|
it "returns the binary data plus type" do
|
26
|
-
expect(object.
|
27
|
+
expect(object.as_extended_json).to eq({ "$minKey" => 1 })
|
27
28
|
end
|
28
29
|
|
29
|
-
it_behaves_like
|
30
|
+
it_behaves_like 'an Extended JSON serializable object'
|
31
|
+
it_behaves_like '#as_json calls #as_extended_json'
|
30
32
|
end
|
31
33
|
|
32
34
|
describe "#==" do
|
data/spec/bson/nil_class_spec.rb
CHANGED
data/spec/bson/object_id_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -220,13 +221,24 @@ describe BSON::ObjectId do
|
|
220
221
|
described_class.new
|
221
222
|
end
|
222
223
|
|
223
|
-
it "returns the object id
|
224
|
-
expect(object.as_json).to eq(
|
224
|
+
it "returns the object id as a string" do
|
225
|
+
expect(object.as_json).to eq(object.to_s)
|
225
226
|
end
|
226
227
|
|
227
228
|
it_behaves_like "a JSON serializable object"
|
228
229
|
end
|
229
230
|
|
231
|
+
describe "#as_extended_json" do
|
232
|
+
|
233
|
+
let(:object) do
|
234
|
+
described_class.new
|
235
|
+
end
|
236
|
+
|
237
|
+
it "returns the object id with $oid key" do
|
238
|
+
expect(object.as_extended_json).to eq({ "$oid" => object.to_s })
|
239
|
+
end
|
240
|
+
end
|
241
|
+
|
230
242
|
describe "::BSON_TYPE" do
|
231
243
|
|
232
244
|
it "returns 0x07" do
|
@@ -311,7 +323,7 @@ describe BSON::ObjectId do
|
|
311
323
|
it "raises an error" do
|
312
324
|
expect {
|
313
325
|
described_class.from_string("asadsf")
|
314
|
-
}.to raise_error(BSON::
|
326
|
+
}.to raise_error(BSON::Error::InvalidObjectId)
|
315
327
|
end
|
316
328
|
end
|
317
329
|
end
|
@@ -592,7 +604,34 @@ describe BSON::ObjectId do
|
|
592
604
|
it "raises an exception on serialization" do
|
593
605
|
expect {
|
594
606
|
hash.to_bson
|
595
|
-
}.to raise_error(BSON::InvalidKey)
|
607
|
+
}.to raise_error(BSON::Error::InvalidKey)
|
608
|
+
end
|
609
|
+
end
|
610
|
+
|
611
|
+
context 'when the counter wraps' do
|
612
|
+
before do
|
613
|
+
BSON::ObjectId._generator.reset_counter(0xFFFFFF)
|
614
|
+
end
|
615
|
+
|
616
|
+
let(:before) { BSON::ObjectId.new }
|
617
|
+
let(:after) { BSON::ObjectId.new }
|
618
|
+
|
619
|
+
it 'resets the counter portion to 0' do
|
620
|
+
expect(before._counter_part).to be == "ffffff"
|
621
|
+
expect(after._counter_part).to be == "000000"
|
622
|
+
end
|
623
|
+
end
|
624
|
+
|
625
|
+
context 'when fork changes the pid' do
|
626
|
+
before do
|
627
|
+
skip 'requires Process.fork' unless Process.respond_to?(:fork)
|
628
|
+
end
|
629
|
+
|
630
|
+
let(:parent_id) { BSON::ObjectId.new }
|
631
|
+
let(:child_id) { Utils.perform_in_child { BSON::ObjectId.new } }
|
632
|
+
|
633
|
+
it 'changes the process portion of the object-id' do
|
634
|
+
expect(child_id._process_part).not_to be == parent_id._process_part
|
596
635
|
end
|
597
636
|
end
|
598
637
|
end
|
data/spec/bson/object_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -25,7 +26,7 @@ describe BSON::Object do
|
|
25
26
|
it "raises an exception" do
|
26
27
|
expect {
|
27
28
|
object.to_bson_key
|
28
|
-
}.to raise_error(BSON::InvalidKey)
|
29
|
+
}.to raise_error(BSON::Error::InvalidKey)
|
29
30
|
end
|
30
31
|
end
|
31
32
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2016-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -36,93 +37,35 @@ describe OpenStruct do
|
|
36
37
|
it_behaves_like "a serializable bson element"
|
37
38
|
end
|
38
39
|
|
39
|
-
context "when the struct has
|
40
|
+
context "when the struct has dollar keys" do
|
40
41
|
|
41
42
|
let(:obj) do
|
42
43
|
described_class.new({ "$testing" => "value" })
|
43
44
|
end
|
44
45
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
before do
|
50
|
-
BSON::Config.validating_keys = true
|
51
|
-
end
|
52
|
-
|
53
|
-
after do
|
54
|
-
BSON::Config.validating_keys = false
|
55
|
-
end
|
56
|
-
|
57
|
-
it "raises an error" do
|
58
|
-
expect {
|
59
|
-
obj.to_bson
|
60
|
-
}.to raise_error(BSON::String::IllegalKey)
|
61
|
-
end
|
62
|
-
|
63
|
-
context "when the struct contains an array of documents containing invalid keys" do
|
64
|
-
|
65
|
-
let(:obj) do
|
66
|
-
described_class.new({ "array" => [{ "$testing" => "value" }] })
|
67
|
-
end
|
68
|
-
|
69
|
-
it "raises an error" do
|
70
|
-
expect {
|
71
|
-
obj.to_bson
|
72
|
-
}.to raise_error(BSON::String::IllegalKey)
|
73
|
-
end
|
74
|
-
end
|
75
|
-
end
|
76
|
-
|
77
|
-
context "when validating locally" do
|
78
|
-
|
79
|
-
it "raises an error" do
|
80
|
-
expect {
|
81
|
-
obj.to_bson(BSON::ByteBuffer.new, true)
|
82
|
-
}.to raise_error(BSON::String::IllegalKey)
|
83
|
-
end
|
46
|
+
let(:bson) do
|
47
|
+
"#{25.to_bson.to_s}#{String::BSON_TYPE}$testing#{BSON::NULL_BYTE}" +
|
48
|
+
"#{6.to_bson.to_s}value#{BSON::NULL_BYTE}#{BSON::NULL_BYTE}"
|
49
|
+
end
|
84
50
|
|
85
|
-
|
51
|
+
it "serializes the struct" do
|
52
|
+
expect(obj.to_bson.to_s).to eq(bson)
|
53
|
+
end
|
86
54
|
|
87
|
-
|
88
|
-
described_class.new({ "array" => [{ "$testing" => "value" }] })
|
89
|
-
end
|
55
|
+
context "when the struct contains an array of documents containing invalid keys" do
|
90
56
|
|
91
|
-
|
92
|
-
|
93
|
-
obj.to_bson(BSON::ByteBuffer.new, true)
|
94
|
-
}.to raise_error(BSON::String::IllegalKey)
|
95
|
-
end
|
96
|
-
end
|
57
|
+
let(:obj) do
|
58
|
+
described_class.new({ "array" => [{ "$testing" => "value" }] })
|
97
59
|
end
|
98
|
-
end
|
99
|
-
|
100
|
-
context "when not validating keys" do
|
101
60
|
|
102
61
|
let(:bson) do
|
103
|
-
"#{
|
104
|
-
"#{
|
62
|
+
"#{45.to_bson.to_s}#{Array::BSON_TYPE}array#{BSON::NULL_BYTE}" +
|
63
|
+
"#{[{ "$testing" => "value" }].to_bson.to_s}#{BSON::NULL_BYTE}"
|
105
64
|
end
|
106
65
|
|
107
66
|
it "serializes the struct" do
|
108
67
|
expect(obj.to_bson.to_s).to eq(bson)
|
109
68
|
end
|
110
|
-
|
111
|
-
context "when the struct contains an array of documents containing invalid keys" do
|
112
|
-
|
113
|
-
let(:obj) do
|
114
|
-
described_class.new({ "array" => [{ "$testing" => "value" }] })
|
115
|
-
end
|
116
|
-
|
117
|
-
let(:bson) do
|
118
|
-
"#{45.to_bson.to_s}#{Array::BSON_TYPE}array#{BSON::NULL_BYTE}" +
|
119
|
-
"#{[{ "$testing" => "value" }].to_bson.to_s}#{BSON::NULL_BYTE}"
|
120
|
-
end
|
121
|
-
|
122
|
-
it "serializes the struct" do
|
123
|
-
expect(obj.to_bson.to_s).to eq(bson)
|
124
|
-
end
|
125
|
-
end
|
126
69
|
end
|
127
70
|
end
|
128
71
|
|
data/spec/bson/raw_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
require 'spec_helper'
|
2
3
|
|
3
4
|
describe Regexp::Raw do
|
@@ -84,19 +85,10 @@ describe Regexp::Raw do
|
|
84
85
|
|
85
86
|
let(:options) { ::Regexp::EXTENDED }
|
86
87
|
|
87
|
-
it "
|
88
|
-
expect
|
89
|
-
|
90
|
-
|
91
|
-
context "When the raw regexp is compiled" do
|
92
|
-
|
93
|
-
let(:regexp) do
|
94
|
-
object.compile
|
95
|
-
end
|
96
|
-
|
97
|
-
it "sets the options on the compiled regexp object" do
|
98
|
-
expect(regexp.options).to eq(options)
|
99
|
-
end
|
88
|
+
it "raises an error" do
|
89
|
+
expect do
|
90
|
+
object
|
91
|
+
end.to raise_error(ArgumentError, /Regexp options must be a String or Symbol/)
|
100
92
|
end
|
101
93
|
end
|
102
94
|
|
@@ -320,8 +312,10 @@ describe Regexp::Raw do
|
|
320
312
|
let(:options) { ::Regexp::EXTENDED }
|
321
313
|
let(:bson) { "#{pattern}#{BSON::NULL_BYTE}mx#{BSON::NULL_BYTE}" }
|
322
314
|
|
323
|
-
it "
|
324
|
-
expect
|
315
|
+
it "raises an error" do
|
316
|
+
expect do
|
317
|
+
serialized
|
318
|
+
end.to raise_error(ArgumentError, /Regexp options must be a String or Symbol/)
|
325
319
|
end
|
326
320
|
end
|
327
321
|
|
data/spec/bson/regexp_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -147,10 +148,10 @@ describe Regexp do
|
|
147
148
|
Regexp::Raw.new("pattern", 1)
|
148
149
|
end
|
149
150
|
|
150
|
-
it "
|
151
|
+
it "raises an error" do
|
151
152
|
expect do
|
152
153
|
regexp
|
153
|
-
end.
|
154
|
+
end.to raise_error(ArgumentError, /Regexp options must be a String or Symbol/)
|
154
155
|
end
|
155
156
|
end
|
156
157
|
|
@@ -163,7 +164,7 @@ describe Regexp do
|
|
163
164
|
it "raises an error" do
|
164
165
|
expect do
|
165
166
|
regexp
|
166
|
-
end.to raise_error(ArgumentError, /Regexp options must be a String
|
167
|
+
end.to raise_error(ArgumentError, /Regexp options must be a String or Symbol/)
|
167
168
|
end
|
168
169
|
end
|
169
170
|
end
|
data/spec/bson/registry_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -38,7 +39,7 @@ describe BSON::Registry do
|
|
38
39
|
it "raises an error" do
|
39
40
|
expect {
|
40
41
|
described_class.get(25.chr, "field")
|
41
|
-
}.to raise_error(BSON::
|
42
|
+
}.to raise_error(BSON::Error::UnsupportedType)
|
42
43
|
end
|
43
44
|
end
|
44
45
|
end
|
data/spec/bson/string_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# rubocop:todo all
|
2
2
|
|
3
3
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
4
4
|
#
|
@@ -51,7 +51,7 @@ describe String do
|
|
51
51
|
it "raises an exception" do
|
52
52
|
expect {
|
53
53
|
"test".to_bson_object_id
|
54
|
-
}.to raise_error(BSON::
|
54
|
+
}.to raise_error(BSON::Error::InvalidObjectId)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
end
|
@@ -90,44 +90,12 @@ describe String do
|
|
90
90
|
|
91
91
|
describe "#to_bson_key" do
|
92
92
|
|
93
|
-
|
94
|
-
|
95
|
-
context "when validating globally" do
|
96
|
-
|
97
|
-
before do
|
98
|
-
BSON::Config.validating_keys = true
|
99
|
-
end
|
100
|
-
|
101
|
-
after do
|
102
|
-
BSON::Config.validating_keys = false
|
103
|
-
end
|
104
|
-
|
105
|
-
let(:validated) do
|
106
|
-
string.to_bson_key
|
107
|
-
end
|
108
|
-
|
109
|
-
it_behaves_like "a validated BSON key"
|
110
|
-
end
|
111
|
-
|
112
|
-
context "when validating locally" do
|
113
|
-
|
114
|
-
let(:validated) do
|
115
|
-
string.to_bson_key(true)
|
116
|
-
end
|
117
|
-
|
118
|
-
it_behaves_like "a validated BSON key"
|
119
|
-
end
|
93
|
+
let(:string) do
|
94
|
+
"$testing.testing"
|
120
95
|
end
|
121
96
|
|
122
|
-
|
123
|
-
|
124
|
-
let(:string) do
|
125
|
-
"$testing.testing"
|
126
|
-
end
|
127
|
-
|
128
|
-
it "allows invalid keys" do
|
129
|
-
expect(string.to_bson_key).to eq(string)
|
130
|
-
end
|
97
|
+
it "allows dots/dollars keys" do
|
98
|
+
expect(string.to_bson_key).to eq(string)
|
131
99
|
end
|
132
100
|
end
|
133
101
|
|
@@ -148,4 +116,11 @@ describe String do
|
|
148
116
|
end
|
149
117
|
end
|
150
118
|
end
|
119
|
+
|
120
|
+
describe '#as_extended_json' do
|
121
|
+
let(:object) { 'Hello world!' }
|
122
|
+
|
123
|
+
it_behaves_like '#as_extended_json returns self'
|
124
|
+
it_behaves_like 'an Extended JSON serializable object'
|
125
|
+
end
|
151
126
|
end
|
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -42,4 +43,28 @@ describe BSON::Symbol::Raw do
|
|
42
43
|
one.should_not be_eql(three)
|
43
44
|
end
|
44
45
|
end
|
46
|
+
|
47
|
+
describe '#as_json' do
|
48
|
+
let(:object) do
|
49
|
+
described_class.new(:foobar)
|
50
|
+
end
|
51
|
+
|
52
|
+
it 'returns a string' do
|
53
|
+
expect(object.as_json).to eq('foobar')
|
54
|
+
end
|
55
|
+
|
56
|
+
it_behaves_like 'a JSON serializable object'
|
57
|
+
end
|
58
|
+
|
59
|
+
describe '#as_extended_json' do
|
60
|
+
let(:object) do
|
61
|
+
described_class.new(:foobar)
|
62
|
+
end
|
63
|
+
|
64
|
+
it 'returns the binary data plus type' do
|
65
|
+
expect(object.as_extended_json).to eq({ '$symbol' => 'foobar' })
|
66
|
+
end
|
67
|
+
|
68
|
+
it_behaves_like 'an Extended JSON serializable object'
|
69
|
+
end
|
45
70
|
end
|
data/spec/bson/symbol_spec.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# rubocop:todo all
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -106,28 +107,24 @@ describe Symbol do
|
|
106
107
|
|
107
108
|
describe "#to_bson_key" do
|
108
109
|
|
109
|
-
|
110
|
-
|
111
|
-
let(:symbol) do
|
112
|
-
:'$testing.testing'
|
113
|
-
end
|
114
|
-
|
115
|
-
it "raises an exception" do
|
116
|
-
expect {
|
117
|
-
symbol.to_bson_key(true)
|
118
|
-
}.to raise_error(BSON::String::IllegalKey)
|
119
|
-
end
|
110
|
+
let(:symbol) do
|
111
|
+
:'$testing.testing'
|
120
112
|
end
|
121
113
|
|
122
|
-
|
114
|
+
it "returns the key" do
|
115
|
+
expect(symbol.to_bson_key).to eq(symbol)
|
116
|
+
end
|
117
|
+
end
|
123
118
|
|
124
|
-
|
125
|
-
|
126
|
-
|
119
|
+
describe '#as_extended_json' do
|
120
|
+
let(:object) do
|
121
|
+
:foobar
|
122
|
+
end
|
127
123
|
|
128
|
-
|
129
|
-
|
130
|
-
end
|
124
|
+
it 'returns the binary data plus type' do
|
125
|
+
expect(object.as_extended_json).to eq({ '$symbol' => 'foobar' })
|
131
126
|
end
|
127
|
+
|
128
|
+
it_behaves_like 'an Extended JSON serializable object'
|
132
129
|
end
|
133
130
|
end
|