bson 4.15.0 → 5.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (147) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +4 -4
  4. data/Rakefile +5 -0
  5. data/ext/bson/bson-native.h +12 -4
  6. data/ext/bson/extconf.rb +8 -3
  7. data/ext/bson/init.c +11 -11
  8. data/ext/bson/read.c +21 -6
  9. data/ext/bson/util.c +168 -16
  10. data/ext/bson/write.c +30 -39
  11. data/lib/bson/active_support.rb +1 -0
  12. data/lib/bson/array.rb +57 -31
  13. data/lib/bson/big_decimal.rb +16 -6
  14. data/lib/bson/binary.rb +255 -128
  15. data/lib/bson/boolean.rb +1 -0
  16. data/lib/bson/code.rb +9 -11
  17. data/lib/bson/code_with_scope.rb +8 -10
  18. data/lib/bson/config.rb +1 -27
  19. data/lib/bson/date.rb +2 -1
  20. data/lib/bson/date_time.rb +2 -1
  21. data/lib/bson/db_pointer.rb +11 -12
  22. data/lib/bson/dbref.rb +11 -9
  23. data/lib/bson/decimal128/builder.rb +9 -8
  24. data/lib/bson/decimal128.rb +24 -110
  25. data/lib/bson/document.rb +1 -0
  26. data/lib/bson/environment.rb +1 -0
  27. data/lib/bson/error/bson_decode_error.rb +11 -0
  28. data/lib/bson/error/ext_json_parse_error.rb +11 -0
  29. data/lib/bson/error/illegal_key.rb +23 -0
  30. data/lib/bson/error/invalid_binary_type.rb +37 -0
  31. data/lib/bson/error/invalid_dbref_argument.rb +12 -0
  32. data/lib/bson/error/invalid_decimal128_argument.rb +25 -0
  33. data/lib/bson/error/invalid_decimal128_range.rb +27 -0
  34. data/lib/bson/error/invalid_decimal128_string.rb +26 -0
  35. data/lib/bson/error/invalid_key.rb +24 -0
  36. data/lib/bson/error/invalid_object_id.rb +11 -0
  37. data/lib/bson/error/invalid_regexp_pattern.rb +13 -0
  38. data/lib/bson/error/unrepresentable_precision.rb +19 -0
  39. data/lib/bson/error/unserializable_class.rb +13 -0
  40. data/lib/bson/error/unsupported_binary_subtype.rb +12 -0
  41. data/lib/bson/error/unsupported_type.rb +11 -0
  42. data/lib/bson/error.rb +16 -28
  43. data/lib/bson/ext_json.rb +1 -0
  44. data/lib/bson/false_class.rb +2 -1
  45. data/lib/bson/float.rb +2 -1
  46. data/lib/bson/hash.rb +127 -72
  47. data/lib/bson/int32.rb +16 -4
  48. data/lib/bson/int64.rb +16 -4
  49. data/lib/bson/integer.rb +3 -4
  50. data/lib/bson/json.rb +1 -0
  51. data/lib/bson/max_key.rb +7 -9
  52. data/lib/bson/min_key.rb +7 -9
  53. data/lib/bson/nil_class.rb +1 -0
  54. data/lib/bson/object.rb +5 -25
  55. data/lib/bson/object_id.rb +75 -121
  56. data/lib/bson/open_struct.rb +3 -2
  57. data/lib/bson/regexp.rb +35 -64
  58. data/lib/bson/registry.rb +2 -6
  59. data/lib/bson/specialized.rb +2 -1
  60. data/lib/bson/string.rb +4 -27
  61. data/lib/bson/symbol.rb +22 -19
  62. data/lib/bson/time.rb +2 -1
  63. data/lib/bson/time_with_zone.rb +13 -1
  64. data/lib/bson/timestamp.rb +2 -1
  65. data/lib/bson/true_class.rb +2 -1
  66. data/lib/bson/undefined.rb +14 -0
  67. data/lib/bson/version.rb +2 -1
  68. data/lib/bson.rb +3 -2
  69. data/spec/bson/array_spec.rb +19 -60
  70. data/spec/bson/big_decimal_spec.rb +16 -4
  71. data/spec/bson/binary_spec.rb +83 -74
  72. data/spec/bson/binary_uuid_spec.rb +1 -0
  73. data/spec/bson/boolean_spec.rb +1 -0
  74. data/spec/bson/byte_buffer_read_spec.rb +1 -0
  75. data/spec/bson/byte_buffer_spec.rb +1 -0
  76. data/spec/bson/byte_buffer_write_spec.rb +1 -0
  77. data/spec/bson/code_spec.rb +5 -3
  78. data/spec/bson/code_with_scope_spec.rb +5 -3
  79. data/spec/bson/config_spec.rb +1 -35
  80. data/spec/bson/date_spec.rb +1 -0
  81. data/spec/bson/date_time_spec.rb +1 -0
  82. data/spec/bson/dbref_legacy_spec.rb +20 -3
  83. data/spec/bson/dbref_spec.rb +9 -9
  84. data/spec/bson/decimal128_spec.rb +40 -20
  85. data/spec/bson/document_as_spec.rb +1 -0
  86. data/spec/bson/document_spec.rb +1 -1
  87. data/spec/bson/ext_json_parse_spec.rb +1 -0
  88. data/spec/bson/false_class_spec.rb +8 -0
  89. data/spec/bson/float_spec.rb +8 -3
  90. data/spec/bson/hash_as_spec.rb +1 -0
  91. data/spec/bson/hash_spec.rb +87 -75
  92. data/spec/bson/int32_spec.rb +21 -6
  93. data/spec/bson/int64_spec.rb +21 -6
  94. data/spec/bson/integer_spec.rb +45 -13
  95. data/spec/bson/json_spec.rb +1 -0
  96. data/spec/bson/max_key_spec.rb +5 -3
  97. data/spec/bson/min_key_spec.rb +5 -3
  98. data/spec/bson/nil_class_spec.rb +1 -0
  99. data/spec/bson/object_id_spec.rb +43 -4
  100. data/spec/bson/object_spec.rb +2 -1
  101. data/spec/bson/open_struct_spec.rb +14 -71
  102. data/spec/bson/raw_spec.rb +9 -15
  103. data/spec/bson/regexp_spec.rb +4 -3
  104. data/spec/bson/registry_spec.rb +2 -1
  105. data/spec/bson/string_spec.rb +13 -38
  106. data/spec/bson/symbol_raw_spec.rb +25 -0
  107. data/spec/bson/symbol_spec.rb +15 -18
  108. data/spec/bson/time_spec.rb +1 -0
  109. data/spec/bson/time_with_zone_spec.rb +1 -0
  110. data/spec/bson/timestamp_spec.rb +1 -0
  111. data/spec/bson/true_class_spec.rb +8 -0
  112. data/spec/bson/undefined_spec.rb +27 -0
  113. data/spec/bson_spec.rb +1 -0
  114. data/spec/runners/common_driver.rb +6 -5
  115. data/spec/runners/corpus.rb +6 -0
  116. data/spec/runners/corpus_legacy.rb +1 -0
  117. data/spec/shared/lib/mrss/constraints.rb +8 -16
  118. data/spec/shared/lib/mrss/docker_runner.rb +30 -3
  119. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  120. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  121. data/spec/shared/lib/mrss/lite_constraints.rb +48 -1
  122. data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
  123. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  124. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  125. data/spec/shared/lib/mrss/utils.rb +28 -6
  126. data/spec/shared/share/Dockerfile.erb +68 -85
  127. data/spec/shared/shlib/config.sh +27 -0
  128. data/spec/shared/shlib/server.sh +73 -24
  129. data/spec/shared/shlib/set_env.sh +39 -1
  130. data/spec/spec_helper.rb +1 -0
  131. data/spec/spec_tests/common_driver_spec.rb +9 -4
  132. data/spec/spec_tests/corpus_legacy_spec.rb +1 -0
  133. data/spec/spec_tests/corpus_spec.rb +13 -3
  134. data/spec/spec_tests/data/corpus/binary.json +5 -0
  135. data/spec/spec_tests/data/corpus/code.json +13 -13
  136. data/spec/spec_tests/data/corpus/decimal128-4.json +48 -0
  137. data/spec/spec_tests/data/corpus/decimal128-6.json +12 -0
  138. data/spec/spec_tests/data/corpus/decimal128-7.json +4 -0
  139. data/spec/spec_tests/data/corpus/document.json +20 -0
  140. data/spec/spec_tests/data/corpus/symbol.json +7 -7
  141. data/spec/spec_tests/data/corpus/top.json +18 -3
  142. data/spec/support/shared_examples.rb +28 -5
  143. data/spec/support/spec_config.rb +1 -0
  144. data/spec/support/utils.rb +49 -1
  145. data.tar.gz.sig +0 -0
  146. metadata +167 -144
  147. metadata.gz.sig +2 -1
@@ -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
- described_class.new(42).as_extended_json.should == {'$numberInt' => '42'}
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 integer' do
266
- described_class.new(42).as_extended_json(mode: :relaxed).should == 42
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 integer' do
272
- described_class.new(42).as_extended_json(mode: :legacy).should be 42
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
@@ -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
- described_class.new(42).as_extended_json.should == {'$numberLong' => '42'}
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 integer' do
310
- described_class.new(42).as_extended_json(mode: :relaxed).should == 42
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 integer' do
316
- described_class.new(42).as_extended_json(mode: :legacy).should be 42
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
@@ -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 '#to_json' do
73
- it 'returns integer' do
74
- 42.to_json.should == '42'
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
- context 'canonical mode' do
80
- it 'returns $numberInt' do
81
- 42.as_extended_json.should == {'$numberInt' => '42'}
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
- context 'relaxed mode' do
86
- it 'returns integer' do
87
- 42.as_extended_json(mode: :relaxed).should be 42
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 'legacy mode' do
92
- it 'returns integer' do
93
- 42.as_extended_json(mode: :legacy).should be 42
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
@@ -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");
@@ -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 "#as_json" do
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.as_json).to eq({ "$maxKey" => 1 })
60
+ expect(object.as_extended_json).to eq({ "$maxKey" => 1 })
60
61
  end
61
62
 
62
- it_behaves_like "a JSON serializable object"
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
@@ -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 "#as_json" do
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.as_json).to eq({ "$minKey" => 1 })
27
+ expect(object.as_extended_json).to eq({ "$minKey" => 1 })
27
28
  end
28
29
 
29
- it_behaves_like "a JSON serializable object"
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
@@ -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");
@@ -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 with $oid key" do
224
- expect(object.as_json).to eq({ "$oid" => object.to_s })
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::ObjectId::Invalid)
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
@@ -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 invalid keys" do
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
- context "when validating keys" do
46
-
47
- context "when validating globally" do
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
- context "when the struct contains an array of documents containing invalid keys" do
51
+ it "serializes the struct" do
52
+ expect(obj.to_bson.to_s).to eq(bson)
53
+ end
86
54
 
87
- let(:obj) do
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
- it "raises an error" do
92
- expect {
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
- "#{25.to_bson.to_s}#{String::BSON_TYPE}$testing#{BSON::NULL_BYTE}" +
104
- "#{6.to_bson.to_s}value#{BSON::NULL_BYTE}#{BSON::NULL_BYTE}"
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
 
@@ -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 "sets the options on the raw regex" do
88
- expect(object.options). to eq(options)
89
- end
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 "sets the option on the serialized bson object" do
324
- expect(serialized).to eq(bson)
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
 
@@ -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 "doesn't raise an error" do
151
+ it "raises an error" do
151
152
  expect do
152
153
  regexp
153
- end.to_not raise_error
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, Symbol, or Integer/)
167
+ end.to raise_error(ArgumentError, /Regexp options must be a String or Symbol/)
167
168
  end
168
169
  end
169
170
  end
@@ -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::Registry::UnsupportedType)
42
+ }.to raise_error(BSON::Error::UnsupportedType)
42
43
  end
43
44
  end
44
45
  end
@@ -1,4 +1,4 @@
1
- # encoding: utf-8
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::ObjectId::Invalid)
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
- context "when validating keys" do
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
- context "when allowing invalid keys" do
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
@@ -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
- context "when validating keys" do
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
- context "when not validating keys" do
114
+ it "returns the key" do
115
+ expect(symbol.to_bson_key).to eq(symbol)
116
+ end
117
+ end
123
118
 
124
- let(:symbol) do
125
- :'$testing.testing'
126
- end
119
+ describe '#as_extended_json' do
120
+ let(:object) do
121
+ :foobar
122
+ end
127
123
 
128
- it "allows invalid keys" do
129
- expect(symbol.to_bson_key).to eq(symbol)
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