bson 4.14.1-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 +33 -109
- 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 +249 -14
- 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 -141
- metadata.gz.sig +0 -0
data/spec/bson/hash_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");
|
@@ -52,93 +53,36 @@ describe Hash do
|
|
52
53
|
end
|
53
54
|
end
|
54
55
|
|
55
|
-
context "when the hash has
|
56
|
+
context "when the hash has dollar keys" do
|
56
57
|
|
57
58
|
let(:obj) do
|
58
59
|
{ "$testing" => "value" }
|
59
60
|
end
|
60
61
|
|
61
|
-
context "when validating keys" do
|
62
62
|
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
end
|
68
|
-
|
69
|
-
after do
|
70
|
-
BSON::Config.validating_keys = false
|
71
|
-
end
|
72
|
-
|
73
|
-
it "raises an error" do
|
74
|
-
expect {
|
75
|
-
obj.to_bson
|
76
|
-
}.to raise_error(BSON::String::IllegalKey)
|
77
|
-
end
|
78
|
-
|
79
|
-
context "when the hash contains an array of documents containing invalid keys" do
|
80
|
-
|
81
|
-
let(:obj) do
|
82
|
-
{ "array" => [{ "$testing" => "value" }] }
|
83
|
-
end
|
84
|
-
|
85
|
-
it "raises an error" do
|
86
|
-
expect {
|
87
|
-
obj.to_bson
|
88
|
-
}.to raise_error(BSON::String::IllegalKey)
|
89
|
-
end
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
context "when validating locally" do
|
94
|
-
|
95
|
-
it "raises an error" do
|
96
|
-
expect {
|
97
|
-
obj.to_bson(BSON::ByteBuffer.new, true)
|
98
|
-
}.to raise_error(BSON::String::IllegalKey)
|
99
|
-
end
|
63
|
+
let(:bson) do
|
64
|
+
"#{25.to_bson.to_s}#{String::BSON_TYPE}$testing#{BSON::NULL_BYTE}" +
|
65
|
+
"#{6.to_bson.to_s}value#{BSON::NULL_BYTE}#{BSON::NULL_BYTE}"
|
66
|
+
end
|
100
67
|
|
101
|
-
|
68
|
+
it "serializes the hash" do
|
69
|
+
expect(obj.to_bson.to_s).to eq(bson)
|
70
|
+
end
|
102
71
|
|
103
|
-
|
104
|
-
{ "array" => [{ "$testing" => "value" }] }
|
105
|
-
end
|
72
|
+
context "when the hash contains an array of documents containing invalid keys" do
|
106
73
|
|
107
|
-
|
108
|
-
|
109
|
-
obj.to_bson(BSON::ByteBuffer.new, true)
|
110
|
-
}.to raise_error(BSON::String::IllegalKey)
|
111
|
-
end
|
112
|
-
end
|
74
|
+
let(:obj) do
|
75
|
+
{ "array" => [{ "$testing" => "value" }] }
|
113
76
|
end
|
114
|
-
end
|
115
|
-
|
116
|
-
context "when not validating keys" do
|
117
77
|
|
118
78
|
let(:bson) do
|
119
|
-
"#{
|
120
|
-
"#{
|
79
|
+
"#{45.to_bson.to_s}#{Array::BSON_TYPE}array#{BSON::NULL_BYTE}" +
|
80
|
+
"#{[{ "$testing" => "value" }].to_bson.to_s}#{BSON::NULL_BYTE}"
|
121
81
|
end
|
122
82
|
|
123
83
|
it "serializes the hash" do
|
124
84
|
expect(obj.to_bson.to_s).to eq(bson)
|
125
85
|
end
|
126
|
-
|
127
|
-
context "when the hash contains an array of documents containing invalid keys" do
|
128
|
-
|
129
|
-
let(:obj) do
|
130
|
-
{ "array" => [{ "$testing" => "value" }] }
|
131
|
-
end
|
132
|
-
|
133
|
-
let(:bson) do
|
134
|
-
"#{45.to_bson.to_s}#{Array::BSON_TYPE}array#{BSON::NULL_BYTE}" +
|
135
|
-
"#{[{ "$testing" => "value" }].to_bson.to_s}#{BSON::NULL_BYTE}"
|
136
|
-
end
|
137
|
-
|
138
|
-
it "serializes the hash" do
|
139
|
-
expect(obj.to_bson.to_s).to eq(bson)
|
140
|
-
end
|
141
|
-
end
|
142
86
|
end
|
143
87
|
end
|
144
88
|
|
@@ -270,8 +214,28 @@ describe Hash do
|
|
270
214
|
end.to_not raise_error
|
271
215
|
end
|
272
216
|
|
273
|
-
it 'deserializes as a
|
274
|
-
expect(from_bson).to eq({"x" =>
|
217
|
+
it 'deserializes as a BigDecimal' do
|
218
|
+
expect(from_bson).to eq({"x" => BigDecimal(1)})
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
context 'when deserializing round-tripping a Decimal128' do
|
223
|
+
let(:to_bson) do
|
224
|
+
{x:BSON::Decimal128.new('1')}.to_bson
|
225
|
+
end
|
226
|
+
|
227
|
+
let(:from_bson) do
|
228
|
+
Hash.from_bson(to_bson)
|
229
|
+
end
|
230
|
+
|
231
|
+
it 'doesn\'t raise on serialization' do
|
232
|
+
expect do
|
233
|
+
to_bson
|
234
|
+
end.to_not raise_error
|
235
|
+
end
|
236
|
+
|
237
|
+
it 'deserializes as a BigDecimal' do
|
238
|
+
expect(from_bson).to eq({"x" => BigDecimal(1)})
|
275
239
|
end
|
276
240
|
end
|
277
241
|
end
|
@@ -348,7 +312,7 @@ describe Hash do
|
|
348
312
|
it 'works' do
|
349
313
|
expect do
|
350
314
|
hash.to_bson
|
351
|
-
end.
|
315
|
+
end.to_not raise_error
|
352
316
|
end
|
353
317
|
end
|
354
318
|
end
|
@@ -372,7 +336,7 @@ describe Hash do
|
|
372
336
|
let(:doc) { Hash.from_bson(buf) }
|
373
337
|
|
374
338
|
it 'overwrites first value with second value' do
|
375
|
-
doc.
|
339
|
+
expect(doc).to eq({ 'foo' => 'overwrite' })
|
376
340
|
end
|
377
341
|
end
|
378
342
|
|
@@ -394,8 +358,56 @@ describe Hash do
|
|
394
358
|
let(:doc) { Hash.from_bson(buf) }
|
395
359
|
|
396
360
|
it 'overwrites first value with second value' do
|
397
|
-
doc.
|
361
|
+
expect(doc).to eq({ 'foo' => :bar })
|
398
362
|
end
|
399
363
|
end
|
364
|
+
|
365
|
+
context 'when deserializing a hash with a BigDecimal' do
|
366
|
+
let(:to_bson) do
|
367
|
+
{x: BigDecimal('1')}.to_bson
|
368
|
+
end
|
369
|
+
|
370
|
+
context 'when it has mode: :bson' do
|
371
|
+
|
372
|
+
let(:from_bson) do
|
373
|
+
Hash.from_bson(to_bson, mode: :bson)
|
374
|
+
end
|
375
|
+
|
376
|
+
it 'deserializes as a BigDecimal' do
|
377
|
+
expect(from_bson).to eq({"x" => BSON::Decimal128.new('1')})
|
378
|
+
end
|
379
|
+
end
|
380
|
+
|
381
|
+
context 'when it doesn\'t have mode: :bson' do
|
382
|
+
|
383
|
+
let(:from_bson) do
|
384
|
+
Hash.from_bson(to_bson)
|
385
|
+
end
|
386
|
+
|
387
|
+
it 'deserializes as a BigDecimal' do
|
388
|
+
expect(from_bson).to eq({"x" => BigDecimal(1)})
|
389
|
+
end
|
390
|
+
end
|
391
|
+
end
|
392
|
+
end
|
393
|
+
|
394
|
+
describe '#as_extended_json' do
|
395
|
+
let(:object) do
|
396
|
+
{ 'foo' => :bar, 'baz' => ['qux', 1, 2.0, { 'lorem' => 1 }] }
|
397
|
+
end
|
398
|
+
|
399
|
+
let(:expected) do
|
400
|
+
{ "foo" => { "$symbol" => "bar" },
|
401
|
+
"baz" => [ "qux",
|
402
|
+
{ "$numberInt" => "1" },
|
403
|
+
{ "$numberDouble" => "2.0" },
|
404
|
+
{ "lorem" => { "$numberInt" => "1" } } ] }
|
405
|
+
end
|
406
|
+
|
407
|
+
it "returns the binary data plus type" do
|
408
|
+
expect(object.as_extended_json).to eq(expected)
|
409
|
+
end
|
410
|
+
|
411
|
+
it_behaves_like 'an Extended JSON serializable object'
|
400
412
|
end
|
401
413
|
end
|
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
|
|