bson 4.9.0 → 4.10.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 05c17fcaee2ceaefe97d801594460178acaf6a2f82c152ce33db819f01d624fa
4
- data.tar.gz: 3343dfda6f4038fa261d077ddf860dd43ff001d2fbea7189110b6fa500fb2558
3
+ metadata.gz: a62c9c51fa6fafda7b1e9a084a118fd34e25804fd97ffd504f8d00690d2eb9f0
4
+ data.tar.gz: 219e45cccac4d1d1b7f7dfad0e6f386538678d632cc9937b9f0f6c06f57e4118
5
5
  SHA512:
6
- metadata.gz: 7756cee7923f3ca584e6a1bfa3666f70d2f14804b3ddb913f0695be3495a061a632803a90d1cd87a63c95d5b9222c02b18fe475a38e2a8a680914819f90f4471
7
- data.tar.gz: 88bf0b45ecbe2aa47c955ca5281568cbe6d48a4c144a5b49680f6f7d8684fa61524dcc80474118c12e9df13b6bfc4ffca1a0d0e55679c0325dcdfd48543aab96
6
+ metadata.gz: 40cab24a15e3430250426e270e99700ab2527d417ac9a248976afc1e1cee5deb9bd1b7dc07112d1d772cb4e65387a3c6fab00943bc55b9d426bc29fee39aba9e
7
+ data.tar.gz: 349f013a08fc84afea777262e88f8813586621f4dc4273ebf122fd347d574dc8dee8b102ba901085b373b3479b1172c3c596a8dd3e5086e05d19b109845f6168
Binary file
Binary file
data/README.md CHANGED
@@ -1,8 +1,9 @@
1
- BSON [![Build Status](https://secure.travis-ci.org/mongodb/bson-ruby.svg?branch=master)](http://travis-ci.org/mongodb/bson-ruby)
2
- [![Build status Windows](https://ci.appveyor.com/api/projects/status/p5aqko7umsx351nm?svg=true)](https://ci.appveyor.com/project/p-mongo/bson-ruby/branch/master)
3
- [![Code Climate](https://codeclimate.com/github/mongodb/bson-ruby.svg)](https://codeclimate.com/github/mongodb/bson-ruby)
4
- [![Coverage Status](https://coveralls.io/repos/mongodb/bson-ruby/badge.svg?branch=master)](https://coveralls.io/r/mongodb/bson-ruby?branch=master)
5
- [![Inline docs](http://inch-ci.org/github/mongodb/bson-ruby.svg?branch=master)](http://inch-ci.org/github/mongodb/bson-ruby)
1
+ BSON
2
+ [![Gem Version][rubygems-img]][rubygems-url]
3
+ [![Build Status][travis-img]][travis-url]
4
+ [![Build status Windows][appveyor-img]][appveyor-url]
5
+ [![Coverage Status][coveralls-img]][coveralls-url]
6
+ [![Inline docs][inch-img]][inch-url]
6
7
  ====
7
8
 
8
9
  An implementation of the BSON specification in Ruby.
@@ -51,3 +52,14 @@ distributed under the License is distributed on an "AS IS" BASIS,
51
52
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
52
53
  See the License for the specific language governing permissions and
53
54
  limitations under the License.
55
+
56
+ [rubygems-img]: https://badge.fury.io/rb/bson.svg
57
+ [rubygems-url]: http://badge.fury.io/rb/bson
58
+ [travis-img]: https://secure.travis-ci.org/mongodb/bson-ruby.svg?branch=master
59
+ [travis-url]: http://travis-ci.org/mongodb/bson-ruby
60
+ [appveyor-img]: https://ci.appveyor.com/api/projects/status/p5aqko7umsx351nm?svg=true
61
+ [appveyor-url]: https://ci.appveyor.com/project/p-mongo/bson-ruby/branch/master
62
+ [coveralls-img]: https://coveralls.io/repos/mongodb/bson-ruby/badge.svg?branch=master
63
+ [coveralls-url]: https://coveralls.io/r/mongodb/bson-ruby?branch=master
64
+ [inch-img]: http://inch-ci.org/github/mongodb/bson-ruby.svg?branch=master
65
+ [inch-url]: http://inch-ci.org/github/mongodb/bson-ruby
@@ -76,6 +76,7 @@ VALUE rb_bson_byte_buffer_get_cstring(VALUE self);
76
76
  VALUE rb_bson_byte_buffer_get_decimal128_bytes(VALUE self);
77
77
  VALUE rb_bson_byte_buffer_get_double(VALUE self);
78
78
  VALUE rb_bson_byte_buffer_get_int32(VALUE self);
79
+ VALUE rb_bson_byte_buffer_get_uint32(VALUE self);
79
80
  VALUE rb_bson_byte_buffer_get_int64(VALUE self);
80
81
  VALUE rb_bson_byte_buffer_get_string(VALUE self);
81
82
  VALUE rb_bson_byte_buffer_get_hash(int argc, VALUE *argv, VALUE self);
@@ -86,6 +87,7 @@ VALUE rb_bson_byte_buffer_put_cstring(VALUE self, VALUE string);
86
87
  VALUE rb_bson_byte_buffer_put_decimal128(VALUE self, VALUE low, VALUE high);
87
88
  VALUE rb_bson_byte_buffer_put_double(VALUE self, VALUE f);
88
89
  VALUE rb_bson_byte_buffer_put_int32(VALUE self, VALUE i);
90
+ VALUE rb_bson_byte_buffer_put_uint32(VALUE self, VALUE i);
89
91
  VALUE rb_bson_byte_buffer_put_int64(VALUE self, VALUE i);
90
92
  VALUE rb_bson_byte_buffer_put_string(VALUE self, VALUE string);
91
93
  VALUE rb_bson_byte_buffer_put_symbol(VALUE self, VALUE symbol);
@@ -38,25 +38,26 @@ void Init_bson_native()
38
38
  char rb_bson_machine_id[256];
39
39
 
40
40
  VALUE rb_bson_module = rb_define_module("BSON");
41
-
41
+
42
42
  /* Document-class: BSON::ByteBuffer
43
43
  *
44
44
  * Stores BSON-serialized data and provides efficient serialization and
45
45
  * deserialization of common Ruby classes using native code.
46
46
  */
47
47
  VALUE rb_byte_buffer_class = rb_define_class_under(rb_bson_module, "ByteBuffer", rb_cObject);
48
-
48
+
49
49
  VALUE rb_bson_object_id_class = rb_const_get(rb_bson_module, rb_intern("ObjectId"));
50
50
  VALUE rb_bson_object_id_generator_class = rb_const_get(rb_bson_object_id_class, rb_intern("Generator"));
51
51
  VALUE rb_digest_class = rb_const_get(rb_cObject, rb_intern("Digest"));
52
52
  VALUE rb_md5_class = rb_const_get(rb_digest_class, rb_intern("MD5"));
53
53
 
54
54
  rb_bson_illegal_key = rb_const_get(rb_const_get(rb_bson_module, rb_intern("String")),rb_intern("IllegalKey"));
55
+ rb_gc_register_mark_object(rb_bson_illegal_key);
55
56
 
56
57
  rb_define_alloc_func(rb_byte_buffer_class, rb_bson_byte_buffer_allocate);
57
58
  rb_define_method(rb_byte_buffer_class, "initialize", rb_bson_byte_buffer_initialize, -1);
58
59
  rb_define_method(rb_byte_buffer_class, "length", rb_bson_byte_buffer_length, 0);
59
-
60
+
60
61
  /*
61
62
  * call-seq:
62
63
  * buffer.read_position -> Fixnum
@@ -64,13 +65,13 @@ void Init_bson_native()
64
65
  * Returns the read position in the buffer.
65
66
  */
66
67
  rb_define_method(rb_byte_buffer_class, "read_position", rb_bson_byte_buffer_read_position, 0);
67
-
68
+
68
69
  rb_define_method(rb_byte_buffer_class, "get_byte", rb_bson_byte_buffer_get_byte, 0);
69
70
  rb_define_method(rb_byte_buffer_class, "get_bytes", rb_bson_byte_buffer_get_bytes, 1);
70
71
  rb_define_method(rb_byte_buffer_class, "get_cstring", rb_bson_byte_buffer_get_cstring, 0);
71
72
  rb_define_method(rb_byte_buffer_class, "get_decimal128_bytes", rb_bson_byte_buffer_get_decimal128_bytes, 0);
72
73
  rb_define_method(rb_byte_buffer_class, "get_double", rb_bson_byte_buffer_get_double, 0);
73
-
74
+
74
75
  /*
75
76
  * call-seq:
76
77
  * buffer.get_hash(**options) -> Hash
@@ -82,23 +83,35 @@ void Init_bson_native()
82
83
  * @return [ BSON::Document ] The decoded document.
83
84
  */
84
85
  rb_define_method(rb_byte_buffer_class, "get_hash", rb_bson_byte_buffer_get_hash, -1);
85
-
86
+
86
87
  /*
87
88
  * call-seq:
88
89
  * buffer.get_array(**options) -> Array
89
90
  *
90
- * Reads an array from the byte buffer..
91
+ * Reads an array from the byte buffer.
91
92
  *
92
93
  * @option options [ nil | :bson ] :mode Decoding mode to use.
93
94
  *
94
95
  * @return [ Array ] The decoded array.
95
96
  */
96
97
  rb_define_method(rb_byte_buffer_class, "get_array", rb_bson_byte_buffer_get_array, -1);
97
-
98
+
98
99
  rb_define_method(rb_byte_buffer_class, "get_int32", rb_bson_byte_buffer_get_int32, 0);
100
+
101
+ /*
102
+ * call-seq:
103
+ * buffer.get_uint32(buffer) -> Fixnum
104
+ *
105
+ * Reads an unsigned 32 bit number from the byte buffer.
106
+ *
107
+ * @return [ Fixnum ] The unsigned 32 bits integer from the buffer
108
+ *
109
+ * @api private
110
+ */
111
+ rb_define_method(rb_byte_buffer_class, "get_uint32", rb_bson_byte_buffer_get_uint32, 0);
99
112
  rb_define_method(rb_byte_buffer_class, "get_int64", rb_bson_byte_buffer_get_int64, 0);
100
113
  rb_define_method(rb_byte_buffer_class, "get_string", rb_bson_byte_buffer_get_string, 0);
101
-
114
+
102
115
  /*
103
116
  * call-seq:
104
117
  * buffer.write_position -> Fixnum
@@ -106,7 +119,7 @@ void Init_bson_native()
106
119
  * Returns the write position in the buffer.
107
120
  */
108
121
  rb_define_method(rb_byte_buffer_class, "write_position", rb_bson_byte_buffer_write_position, 0);
109
-
122
+
110
123
  /*
111
124
  * call-seq:
112
125
  * buffer.put_byte(binary_str) -> ByteBuffer
@@ -117,7 +130,7 @@ void Init_bson_native()
117
130
  * Returns the modified +self+.
118
131
  */
119
132
  rb_define_method(rb_byte_buffer_class, "put_byte", rb_bson_byte_buffer_put_byte, 1);
120
-
133
+
121
134
  /*
122
135
  * call-seq:
123
136
  * buffer.put_bytes(binary_str) -> ByteBuffer
@@ -170,7 +183,7 @@ void Init_bson_native()
170
183
  * instead on the null terminator), unlike the BSON string serialization.
171
184
  */
172
185
  rb_define_method(rb_byte_buffer_class, "put_cstring", rb_bson_byte_buffer_put_cstring, 1);
173
-
186
+
174
187
  /**
175
188
  * call-seq:
176
189
  * buffer.put_symbol(sym) -> ByteBuffer
@@ -188,7 +201,7 @@ void Init_bson_native()
188
201
  * indistinguishable from a string with the same value written to the buffer.
189
202
  */
190
203
  rb_define_method(rb_byte_buffer_class, "put_symbol", rb_bson_byte_buffer_put_symbol, 1);
191
-
204
+
192
205
  /*
193
206
  * call-seq:
194
207
  * buffer.put_int32(fixnum) -> ByteBuffer
@@ -200,7 +213,22 @@ void Init_bson_native()
200
213
  * Returns the modified +self+.
201
214
  */
202
215
  rb_define_method(rb_byte_buffer_class, "put_int32", rb_bson_byte_buffer_put_int32, 1);
203
-
216
+
217
+ /*
218
+ * call-seq:
219
+ * buffer.put_uint32(fixnum) -> ByteBuffer
220
+ *
221
+ * Writes an unsigned 32-bit integer value to the buffer.
222
+ *
223
+ * If the argument cannot be represented in 32 bits, raises RangeError.
224
+ *
225
+ * Returns the modified +self+.
226
+ *
227
+ * @api private
228
+ *
229
+ */
230
+ rb_define_method(rb_byte_buffer_class, "put_uint32", rb_bson_byte_buffer_put_uint32, 1);
231
+
204
232
  /*
205
233
  * call-seq:
206
234
  * buffer.put_int64(fixnum) -> ByteBuffer
@@ -212,7 +240,7 @@ void Init_bson_native()
212
240
  * Returns the modified +self+.
213
241
  */
214
242
  rb_define_method(rb_byte_buffer_class, "put_int64", rb_bson_byte_buffer_put_int64, 1);
215
-
243
+
216
244
  /*
217
245
  * call-seq:
218
246
  * buffer.put_double(double) -> ByteBuffer
@@ -222,7 +250,7 @@ void Init_bson_native()
222
250
  * Returns the modified +self+.
223
251
  */
224
252
  rb_define_method(rb_byte_buffer_class, "put_double", rb_bson_byte_buffer_put_double, 1);
225
-
253
+
226
254
  /*
227
255
  * call-seq:
228
256
  * buffer.put_decimal128(low_64bit, high_64bit) -> ByteBuffer
@@ -235,7 +263,7 @@ void Init_bson_native()
235
263
  * Returns the modified +self+.
236
264
  */
237
265
  rb_define_method(rb_byte_buffer_class, "put_decimal128", rb_bson_byte_buffer_put_decimal128, 2);
238
-
266
+
239
267
  /*
240
268
  * call-seq:
241
269
  * buffer.put_hash(hash) -> ByteBuffer
@@ -245,7 +273,7 @@ void Init_bson_native()
245
273
  * Returns the modified +self+.
246
274
  */
247
275
  rb_define_method(rb_byte_buffer_class, "put_hash", rb_bson_byte_buffer_put_hash, 2);
248
-
276
+
249
277
  /*
250
278
  * call-seq:
251
279
  * buffer.put_array(array) -> ByteBuffer
@@ -255,7 +283,7 @@ void Init_bson_native()
255
283
  * Returns the modified +self+.
256
284
  */
257
285
  rb_define_method(rb_byte_buffer_class, "put_array", rb_bson_byte_buffer_put_array, 2);
258
-
286
+
259
287
  /*
260
288
  * call-seq:
261
289
  * buffer.replace_int32(position, fixnum) -> ByteBuffer
@@ -272,7 +300,7 @@ void Init_bson_native()
272
300
  * Returns the modified +self+.
273
301
  */
274
302
  rb_define_method(rb_byte_buffer_class, "replace_int32", rb_bson_byte_buffer_replace_int32, 2);
275
-
303
+
276
304
  /*
277
305
  * call-seq:
278
306
  * buffer.rewind! -> ByteBuffer
@@ -284,7 +312,7 @@ void Init_bson_native()
284
312
  * Returns the modified +self+.
285
313
  */
286
314
  rb_define_method(rb_byte_buffer_class, "rewind!", rb_bson_byte_buffer_rewind, 0);
287
-
315
+
288
316
  /*
289
317
  * call-seq:
290
318
  * buffer.to_s -> String
@@ -296,7 +324,7 @@ void Init_bson_native()
296
324
  * the buffer itself.
297
325
  */
298
326
  rb_define_method(rb_byte_buffer_class, "to_s", rb_bson_byte_buffer_to_s, 0);
299
-
327
+
300
328
  rb_define_method(rb_bson_object_id_generator_class, "next_object_id", rb_bson_object_id_generator_next, -1);
301
329
 
302
330
  // Get the object id machine id and hash it.
@@ -309,4 +337,5 @@ void Init_bson_native()
309
337
  rb_bson_object_id_counter = FIX2INT(rb_funcall(rb_mKernel, rb_intern("rand"), 1, INT2FIX(0x1000000)));
310
338
 
311
339
  rb_bson_registry = rb_const_get(rb_bson_module, rb_intern("Registry"));
340
+ rb_gc_register_mark_object(rb_bson_registry);
312
341
  }
@@ -21,6 +21,7 @@ static void pvt_raise_decode_error(volatile VALUE msg);
21
21
  static int32_t pvt_validate_length(byte_buffer_t *b);
22
22
  static uint8_t pvt_get_type_byte(byte_buffer_t *b);
23
23
  static VALUE pvt_get_int32(byte_buffer_t *b);
24
+ static VALUE pvt_get_uint32(byte_buffer_t *b);
24
25
  static VALUE pvt_get_int64(byte_buffer_t *b, int argc, VALUE *argv);
25
26
  static VALUE pvt_get_double(byte_buffer_t *b);
26
27
  static VALUE pvt_get_string(byte_buffer_t *b, const char *data_type);
@@ -259,6 +260,28 @@ VALUE pvt_get_int32(byte_buffer_t *b)
259
260
  return INT2NUM(BSON_UINT32_FROM_LE(i32));
260
261
  }
261
262
 
263
+ /**
264
+ * Get an unsigned int32 from the buffer.
265
+ */
266
+ VALUE rb_bson_byte_buffer_get_uint32(VALUE self)
267
+ {
268
+ byte_buffer_t *b;
269
+
270
+ TypedData_Get_Struct(self, byte_buffer_t, &rb_byte_buffer_data_type, b);
271
+ return pvt_get_uint32(b);
272
+ }
273
+
274
+ VALUE pvt_get_uint32(byte_buffer_t *b)
275
+ {
276
+ uint32_t i32;
277
+
278
+ ENSURE_BSON_READ(b, 4);
279
+ memcpy(&i32, READ_PTR(b), 4);
280
+ b->read_position += 4;
281
+ return UINT2NUM(BSON_UINT32_FROM_LE(i32));
282
+ }
283
+
284
+
262
285
  /**
263
286
  * Get a int64 from the buffer.
264
287
  */
@@ -27,6 +27,7 @@ static void pvt_replace_int32(byte_buffer_t *b, int32_t position, int32_t newval
27
27
  static void pvt_put_field(byte_buffer_t *b, VALUE rb_buffer, VALUE val, VALUE validating_keys);
28
28
  static void pvt_put_byte(byte_buffer_t *b, const char byte);
29
29
  static void pvt_put_int32(byte_buffer_t *b, const int32_t i32);
30
+ static void pvt_put_uint32(byte_buffer_t *b, const uint32_t i32);
30
31
  static void pvt_put_int64(byte_buffer_t *b, const int64_t i);
31
32
  static void pvt_put_double(byte_buffer_t *b, double f);
32
33
  static void pvt_put_cstring(byte_buffer_t *b, const char *str, int32_t length, const char *data_type);
@@ -154,8 +155,15 @@ void pvt_put_type_byte(byte_buffer_t *b, VALUE val){
154
155
  case T_FLOAT:
155
156
  type_byte = BSON_TYPE_DOUBLE;
156
157
  break;
157
- default:{
158
- VALUE type = rb_funcall(val, rb_intern("bson_type"), 0);
158
+ default: {
159
+ VALUE type;
160
+ VALUE responds = rb_funcall(val, rb_intern("respond_to?"), 1, ID2SYM(rb_intern("bson_type")));
161
+ if (!RTEST(responds)) {
162
+ VALUE klass = pvt_const_get_3("BSON", "Error", "UnserializableClass");
163
+ VALUE val_str = rb_funcall(val, rb_intern("to_s"), 0);
164
+ rb_raise(klass, "Value does not define its BSON serialized type: %s", RSTRING_PTR(val_str));
165
+ }
166
+ type = rb_funcall(val, rb_intern("bson_type"), 0);
159
167
  type_byte = *RSTRING_PTR(type);
160
168
  RB_GC_GUARD(type);
161
169
  break;
@@ -383,6 +391,37 @@ void pvt_put_int32(byte_buffer_t *b, const int32_t i)
383
391
  b->write_position += 4;
384
392
  }
385
393
 
394
+ /* The docstring is in init.c. */
395
+ VALUE rb_bson_byte_buffer_put_uint32(VALUE self, VALUE i)
396
+ {
397
+ byte_buffer_t *b;
398
+ int64_t temp;
399
+ uint32_t i32;
400
+
401
+ if (RB_TYPE_P(i, T_FLOAT)) {
402
+ rb_raise(rb_eArgError, "put_uint32: incorrect type: float, expected: integer");
403
+ }
404
+
405
+ temp = NUM2LL(i);
406
+ if (temp < 0 || temp > UINT32_MAX) {
407
+ rb_raise(rb_eRangeError, "Number %lld is out of range [0, 2^32)", (long long)temp);
408
+ }
409
+
410
+ i32 = NUM2UINT(i);
411
+
412
+ TypedData_Get_Struct(self, byte_buffer_t, &rb_byte_buffer_data_type, b);
413
+ pvt_put_uint32(b, i32);
414
+ return self;
415
+ }
416
+
417
+ void pvt_put_uint32(byte_buffer_t *b, const uint32_t i)
418
+ {
419
+ const uint32_t i32 = BSON_UINT32_TO_LE(i);
420
+ ENSURE_BSON_WRITE(b, 4);
421
+ memcpy(WRITE_PTR(b), &i32, 4);
422
+ b->write_position += 4;
423
+ }
424
+
386
425
  /* The docstring is in init.c. */
387
426
  VALUE rb_bson_byte_buffer_put_int64(VALUE self, VALUE i)
388
427
  {
@@ -627,7 +666,7 @@ VALUE rb_bson_byte_buffer_put_array(VALUE self, VALUE array, VALUE validating_ke
627
666
 
628
667
  for(int32_t index=0; index < RARRAY_LEN(array); index++, array_element++){
629
668
  pvt_put_type_byte(b, *array_element);
630
- pvt_put_array_index(b,index);
669
+ pvt_put_array_index(b, index);
631
670
  pvt_put_field(b, self, *array_element, validating_keys);
632
671
  }
633
672
  pvt_put_byte(b, 0);
@@ -47,6 +47,9 @@ module BSON
47
47
  position = buffer.length
48
48
  buffer.put_int32(0)
49
49
  each_with_index do |value, index|
50
+ unless value.respond_to?(:bson_type)
51
+ raise Error::UnserializableClass, "Array element at position #{index} does not define its BSON serialized type: #{value}"
52
+ end
50
53
  buffer.put_byte(value.bson_type)
51
54
  buffer.put_cstring(index.to_s)
52
55
  value.to_bson(buffer, validating_keys)
@@ -35,7 +35,7 @@ module BSON
35
35
  #
36
36
  # @since 2.1.0
37
37
  def to_bson(buffer = ByteBuffer.new, validating_keys = Config.validating_keys?)
38
- to_time.to_bson(buffer)
38
+ gregorian.to_time.to_bson(buffer)
39
39
  end
40
40
  end
41
41
 
@@ -17,5 +17,11 @@ module BSON
17
17
  # Exception raised when BSON decoding fails.
18
18
  class BSONDecodeError < Error
19
19
  end
20
+
21
+ # Exception raised when serializing an Array or Hash to BSON and an
22
+ # array or hash element is of a class that does not define how to serialize
23
+ # itself to BSON.
24
+ class UnserializableClass < Error
25
+ end
20
26
  end
21
27
  end
@@ -44,6 +44,9 @@ module BSON
44
44
  position = buffer.length
45
45
  buffer.put_int32(0)
46
46
  each do |field, value|
47
+ unless value.respond_to?(:bson_type)
48
+ raise Error::UnserializableClass, "Hash value for key '#{field}' does not define its BSON serialized type: #{value}"
49
+ end
47
50
  buffer.put_byte(value.bson_type)
48
51
  key = field.to_bson_key(validating_keys)
49
52
  begin
@@ -165,7 +165,13 @@ module BSON
165
165
  #
166
166
  # @since 3.1.0
167
167
  def respond_to?(method, include_private = false)
168
- compile.respond_to?(method, include_private) || super
168
+ if defined?(@pattern)
169
+ compile.respond_to?(method, include_private) || super
170
+ else
171
+ # YAML calls #respond_to? during deserialization, before the object
172
+ # is initialized.
173
+ super
174
+ end
169
175
  end
170
176
 
171
177
  # Encode the Raw Regexp object to BSON.
@@ -124,8 +124,8 @@ module BSON
124
124
  #
125
125
  # @since 2.0.0
126
126
  def to_bson(buffer = ByteBuffer.new, validating_keys = Config.validating_keys?)
127
- buffer.put_int32(increment)
128
- buffer.put_int32(seconds)
127
+ buffer.put_uint32(increment)
128
+ buffer.put_uint32(seconds)
129
129
  end
130
130
 
131
131
  # Deserialize timestamp from BSON.
@@ -140,8 +140,8 @@ module BSON
140
140
  #
141
141
  # @since 2.0.0
142
142
  def self.from_bson(buffer, **options)
143
- increment = buffer.get_int32
144
- seconds = buffer.get_int32
143
+ increment = buffer.get_uint32
144
+ seconds = buffer.get_uint32
145
145
  new(seconds, increment)
146
146
  end
147
147
 
@@ -13,5 +13,5 @@
13
13
  # limitations under the License.
14
14
 
15
15
  module BSON
16
- VERSION = "4.9.0".freeze
16
+ VERSION = "4.10.0".freeze
17
17
  end
@@ -132,6 +132,23 @@ describe Array do
132
132
  end
133
133
  end
134
134
  end
135
+
136
+ context 'when array contains value of an unserializable class' do
137
+ class ArraySpecUnserializableClass
138
+ end
139
+
140
+ let(:obj) do
141
+ [ArraySpecUnserializableClass.new]
142
+ end
143
+
144
+ it 'raises UnserializableClass' do
145
+ lambda do
146
+ obj.to_bson
147
+ end.should raise_error(BSON::Error::UnserializableClass,
148
+ # C extension does not provide element position in the exception message.
149
+ /(Array element at position 0|Value) does not define its BSON serialized type:.*ArraySpecUnserializableClass/)
150
+ end
151
+ end
135
152
  end
136
153
 
137
154
  describe "#to_bson_normalized_value" do
@@ -66,7 +66,7 @@ describe BSON::ByteBuffer do
66
66
  describe '#get_double' do
67
67
 
68
68
  let(:buffer) do
69
- described_class.new("#{12.5.to_bson.to_s}")
69
+ described_class.new(12.5.to_bson.to_s)
70
70
  end
71
71
 
72
72
  let!(:double) do
@@ -85,7 +85,7 @@ describe BSON::ByteBuffer do
85
85
  describe '#get_int32' do
86
86
 
87
87
  let(:buffer) do
88
- described_class.new("#{12.to_bson.to_s}")
88
+ described_class.new(12.to_bson.to_s)
89
89
  end
90
90
 
91
91
  let!(:int32) do
@@ -101,10 +101,66 @@ describe BSON::ByteBuffer do
101
101
  end
102
102
  end
103
103
 
104
+ describe '#get_uint32' do
105
+ context 'when using 2^32-1' do
106
+ let(:buffer) do
107
+ described_class.new(4294967295.to_bson.to_s)
108
+ end
109
+
110
+ let!(:int32) do
111
+ buffer.get_uint32
112
+ end
113
+
114
+ it 'gets the uint32 from the buffer' do
115
+ expect(int32).to eq(4294967295)
116
+ end
117
+
118
+ it 'increments the position by 4' do
119
+ expect(buffer.read_position).to eq(4)
120
+ end
121
+ end
122
+
123
+ context 'when using 2^32-2' do
124
+ let(:buffer) do
125
+ described_class.new(4294967294.to_bson.to_s)
126
+ end
127
+
128
+ let!(:int32) do
129
+ buffer.get_uint32
130
+ end
131
+
132
+ it 'gets the uint32 from the buffer' do
133
+ expect(int32).to eq(4294967294)
134
+ end
135
+
136
+ it 'increments the position by 4' do
137
+ expect(buffer.read_position).to eq(4)
138
+ end
139
+ end
140
+
141
+ context 'when using 0' do
142
+ let(:buffer) do
143
+ described_class.new(0.to_bson.to_s)
144
+ end
145
+
146
+ let!(:int32) do
147
+ buffer.get_uint32
148
+ end
149
+
150
+ it 'gets the uint32 from the buffer' do
151
+ expect(int32).to eq(0)
152
+ end
153
+
154
+ it 'increments the position by 4' do
155
+ expect(buffer.read_position).to eq(4)
156
+ end
157
+ end
158
+ end
159
+
104
160
  describe '#get_int64' do
105
161
 
106
162
  let(:buffer) do
107
- described_class.new("#{(Integer::MAX_64BIT - 1).to_bson.to_s}")
163
+ described_class.new((Integer::MAX_64BIT - 1).to_bson.to_s)
108
164
  end
109
165
 
110
166
  let!(:int64) do
@@ -30,16 +30,19 @@ describe BSON::ByteBuffer do
30
30
  let(:buffer) do
31
31
  described_class.new
32
32
  end
33
-
34
- before do
35
- buffer.put_int32(5)
36
- end
37
-
38
- it 'returns the length of the buffer' do
39
- expect(buffer.length).to eq(4)
33
+
34
+ context '#put_int32' do
35
+ before do
36
+ buffer.put_int32(5)
37
+ end
38
+
39
+ it 'returns the length of the buffer' do
40
+ expect(buffer.length).to eq(4)
41
+ end
40
42
  end
41
43
  end
42
44
 
45
+
43
46
  context 'when the byte buffer is initialized with some bytes' do
44
47
 
45
48
  let(:buffer) do
@@ -585,6 +585,102 @@ describe BSON::ByteBuffer do
585
585
  end
586
586
  end
587
587
 
588
+ describe '#put_uint32' do
589
+ context 'when argument is a float' do
590
+ it 'raises an Argument Error' do
591
+ expect{ buffer.put_uint32(4.934) }.to raise_error(ArgumentError, "put_uint32: incorrect type: float, expected: integer")
592
+ end
593
+ end
594
+
595
+ context 'when number is in range' do
596
+ let(:modified) do
597
+ buffer.put_uint32(5)
598
+ end
599
+
600
+ it 'returns gets the correct number from the buffer' do
601
+ expect(modified.get_uint32).to eq(5)
602
+ end
603
+
604
+ it 'returns the length of the buffer' do
605
+ expect(modified.length).to eq(4)
606
+ end
607
+ end
608
+
609
+ context 'when number is 0' do
610
+ let(:modified) do
611
+ buffer.put_uint32(0)
612
+ end
613
+
614
+ it 'returns gets the correct number from the buffer' do
615
+ expect(modified.get_uint32).to eq(0)
616
+ end
617
+
618
+ it 'returns the length of the buffer' do
619
+ expect(modified.length).to eq(4)
620
+ end
621
+ end
622
+
623
+ context 'when number doesn\'t fit in signed int32' do
624
+ let(:modified) do
625
+ buffer.put_uint32(4294967295)
626
+ end
627
+
628
+ let(:expected) do
629
+ [ 4294967295 ].pack(BSON::Int32::PACK)
630
+ end
631
+
632
+ it 'appends the int32 to the byte buffer' do
633
+ expect(modified.to_s).to eq(expected)
634
+ end
635
+
636
+ it 'get returns correct number' do
637
+ expect(modified.get_uint32).to eq(4294967295)
638
+ end
639
+
640
+ it 'returns the length of the buffer' do
641
+ expect(modified.length).to eq(4)
642
+ end
643
+ end
644
+
645
+ context 'when number is 2^31' do
646
+ let(:modified) do
647
+ buffer.put_uint32(2147483648)
648
+ end
649
+
650
+ it 'returns gets the correct number from the buffer' do
651
+ expect(modified.get_uint32).to eq(2147483648)
652
+ end
653
+
654
+ it 'returns the length of the buffer' do
655
+ expect(modified.length).to eq(4)
656
+ end
657
+ end
658
+
659
+ context 'when number is 2^31-1' do
660
+ let(:modified) do
661
+ buffer.put_uint32(2147483647)
662
+ end
663
+
664
+ it 'returns gets the correct number from the buffer' do
665
+ expect(modified.get_uint32).to eq(2147483647)
666
+ end
667
+
668
+ it 'returns the length of the buffer' do
669
+ expect(modified.length).to eq(4)
670
+ end
671
+ end
672
+
673
+ context 'when number is not in range' do
674
+ it 'raises error on out of top range' do
675
+ expect{ buffer.put_uint32(4294967296) }.to raise_error(RangeError, "Number 4294967296 is out of range [0, 2^32)")
676
+ end
677
+
678
+ it 'raises error on out of bottom range' do
679
+ expect{ buffer.put_uint32(-1) }.to raise_error(RangeError, "Number -1 is out of range [0, 2^32)")
680
+ end
681
+ end
682
+ end
683
+
588
684
  describe '#put_int64' do
589
685
 
590
686
  context 'when the integer is 64 bit' do
@@ -35,5 +35,58 @@ describe DateTime do
35
35
 
36
36
  it_behaves_like "a serializable bson element"
37
37
  end
38
+
39
+ context "when the dates don't both use Gregorian" do
40
+
41
+ let(:shakespeare_datetime) do
42
+ DateTime.iso8601('1616-04-23', Date::ENGLAND)
43
+ end
44
+
45
+ let(:gregorian_datetime) do
46
+ DateTime.iso8601('1616-04-23', Date::GREGORIAN)
47
+ end
48
+
49
+ context "when putting to bson" do
50
+
51
+ let(:shakespeare) do
52
+ { a: shakespeare_datetime }.to_bson
53
+ end
54
+
55
+ let(:gregorian) do
56
+ { a: gregorian_datetime }.to_bson
57
+ end
58
+
59
+ it "does not equal each other" do
60
+ expect(shakespeare.to_s).to_not eq(gregorian.to_s)
61
+ end
62
+
63
+ it "the english date is 10 days later" do
64
+ expect(shakespeare.to_s).to eq({ a: DateTime.iso8601('1616-05-03', Date::GREGORIAN) }.to_bson.to_s)
65
+ end
66
+ end
67
+
68
+ context "when putting and receiving from bson" do
69
+
70
+ let(:shakespeare) do
71
+ Hash.from_bson(BSON::ByteBuffer.new({ a: shakespeare_datetime }.to_bson.to_s))
72
+ end
73
+
74
+ let(:gregorian) do
75
+ Hash.from_bson(BSON::ByteBuffer.new({ a: gregorian_datetime }.to_bson.to_s))
76
+ end
77
+
78
+ it "does not equal each other" do
79
+ expect(shakespeare).to_not eq(gregorian)
80
+ end
81
+
82
+ it "the english date is 10 days later" do
83
+ expect(shakespeare[:a]).to eq(DateTime.iso8601('1616-05-03', Date::GREGORIAN).to_time)
84
+ end
85
+
86
+ it "the gregorian date is the same" do
87
+ expect(gregorian[:a]).to eq(DateTime.iso8601('1616-04-23', Date::GREGORIAN).to_time)
88
+ end
89
+ end
90
+ end
38
91
  end
39
92
  end
@@ -227,6 +227,23 @@ describe Hash do
227
227
  end
228
228
  end
229
229
  end
230
+
231
+ context 'when hash contains value of an unserializable class' do
232
+ class HashSpecUnserializableClass
233
+ end
234
+
235
+ let(:obj) do
236
+ {foo: HashSpecUnserializableClass.new}
237
+ end
238
+
239
+ it 'raises UnserializableClass' do
240
+ lambda do
241
+ obj.to_bson
242
+ end.should raise_error(BSON::Error::UnserializableClass,
243
+ # C extension does not provide hash key in the exception message.
244
+ /(Hash value for key 'foo'|Value) does not define its BSON serialized type:.*HashSpecUnserializableClass/)
245
+ end
246
+ end
230
247
  end
231
248
 
232
249
  describe '#to_bson' do
@@ -580,4 +580,15 @@ describe Regexp::Raw do
580
580
  end
581
581
  end
582
582
  end
583
- end
583
+
584
+ describe 'yaml loading' do
585
+ let(:regexp) { described_class.new('hello.world', 's') }
586
+
587
+ it 'round-trips' do
588
+ actual = YAML.load(regexp.to_yaml)
589
+ actual.pattern.should == 'hello.world'
590
+ actual.options.should == 's'
591
+ actual.compile.should =~ "hello\nworld"
592
+ end
593
+ end
594
+ end
@@ -60,4 +60,15 @@ RSpec.configure do |config|
60
60
  config.expect_with :rspec do |c|
61
61
  c.syntax = [:should, :expect]
62
62
  end
63
+
64
+ # To ensure that calling GC.compact does not produce unexpected behavior,
65
+ # randomly call GC.compact after a small percentage of tests in the suite.
66
+ # This behavior is only enabled when the COMPACT environment variable is true.
67
+ if SpecConfig.instance.compact?
68
+ config.after do
69
+ if rand < SpecConfig::COMPACTION_CHANCE
70
+ GC.compact
71
+ end
72
+ end
73
+ end
63
74
  end
@@ -13,6 +13,16 @@
13
13
  "canonical_bson": "100000001161002A00000015CD5B0700",
14
14
  "canonical_extjson": "{\"a\" : {\"$timestamp\" : {\"t\" : 123456789, \"i\" : 42} } }",
15
15
  "degenerate_extjson": "{\"a\" : {\"$timestamp\" : {\"i\" : 42, \"t\" : 123456789} } }"
16
+ },
17
+ {
18
+ "description": "Timestamp with high-order bit set on both seconds and increment",
19
+ "canonical_bson": "10000000116100FFFFFFFFFFFFFFFF00",
20
+ "canonical_extjson": "{\"a\" : {\"$timestamp\" : {\"t\" : 4294967295, \"i\" : 4294967295} } }"
21
+ },
22
+ {
23
+ "description": "Timestamp with high-order bit set on both seconds and increment (not UINT32_MAX)",
24
+ "canonical_bson": "1000000011610000286BEE00286BEE00",
25
+ "canonical_extjson": "{\"a\" : {\"$timestamp\" : {\"t\" : 4000000000, \"i\" : 4000000000} } }"
16
26
  }
17
27
  ],
18
28
  "decodeErrors": [
@@ -65,11 +65,11 @@
65
65
  "parseErrors": [
66
66
  {
67
67
  "description" : "Bad $regularExpression (extra field)",
68
- "string" : "{\"a\" : \"$regularExpression\": {\"pattern\": \"abc\", \"options\": \"\", \"unrelated\": true}}}"
68
+ "string" : "{\"a\" : {\"$regularExpression\": {\"pattern\": \"abc\", \"options\": \"\", \"unrelated\": true}}}"
69
69
  },
70
70
  {
71
71
  "description" : "Bad $regularExpression (missing options field)",
72
- "string" : "{\"a\" : \"$regularExpression\": {\"pattern\": \"abc\"}}}"
72
+ "string" : "{\"a\" : {\"$regularExpression\": {\"pattern\": \"abc\"}}}"
73
73
  },
74
74
  {
75
75
  "description": "Bad $regularExpression (pattern is number, not string)",
@@ -81,7 +81,7 @@
81
81
  },
82
82
  {
83
83
  "description" : "Bad $regularExpression (missing pattern field)",
84
- "string" : "{\"a\" : \"$regularExpression\": {\"options\":\"ix\"}}}"
84
+ "string" : "{\"a\" : {\"$regularExpression\": {\"options\":\"ix\"}}}"
85
85
  },
86
86
  {
87
87
  "description": "Bad $oid (number, not string)",
@@ -3,7 +3,13 @@ require 'singleton'
3
3
  class SpecConfig
4
4
  include Singleton
5
5
 
6
+ COMPACTION_CHANCE = 0.001
7
+
6
8
  def active_support?
7
9
  %w(1 true yes).include?(ENV['WITH_ACTIVE_SUPPORT'])
8
10
  end
11
+
12
+ def compact?
13
+ %w(1 true yes).include?(ENV['COMPACT'])
14
+ end
9
15
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bson
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.9.0
4
+ version: 4.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Brock
@@ -11,8 +11,29 @@ authors:
11
11
  - Gary Murakami
12
12
  autorequire:
13
13
  bindir: bin
14
- cert_chain: []
15
- date: 2020-06-02 00:00:00.000000000 Z
14
+ cert_chain:
15
+ - |
16
+ -----BEGIN CERTIFICATE-----
17
+ MIIDRDCCAiygAwIBAgIBATANBgkqhkiG9w0BAQsFADAmMSQwIgYDVQQDDBtkcml2
18
+ ZXItcnVieS9EQz0xMGdlbi9EQz1jb20wHhcNMjAwMTIzMTkzNjAxWhcNMjEwMTIy
19
+ MTkzNjAxWjAmMSQwIgYDVQQDDBtkcml2ZXItcnVieS9EQz0xMGdlbi9EQz1jb20w
20
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDRXUgGvH0ZtWwDPc2umdHw
21
+ B+INNm6jNTRp8PMyUKxPzxaxX2OiBQk9gLC3zsK9ZmlZu4lNfpHVSCEPoiP/fhPg
22
+ Kyfq2xld3Qz0Pki5d5i0/r14343MTKiNiFulLlbbdlN0cXeEFNJHUycZnD2LOXwz
23
+ egYGHOl14FI8t5visIWtqRnLXXIlDsBHzmeEZjUZRGSgjC0R3RT/I+Fk5yUhn1w4
24
+ rqFyAiW+cjjzmT7mmqT0jV6fd0JFHbKnSgt9iPijKSimBgUOsorHwOTMlTzwsy0d
25
+ ZT+al1RiT5zqlAJLxFHwmoYOxD/bSNtKsYl60ek0hK2mISBVy9BBmLvCgHDx5uSp
26
+ AgMBAAGjfTB7MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBRbd1mx
27
+ fvSaVIwKI+tnEAYDW/B81zAgBgNVHREEGTAXgRVkcml2ZXItcnVieUAxMGdlbi5j
28
+ b20wIAYDVR0SBBkwF4EVZHJpdmVyLXJ1YnlAMTBnZW4uY29tMA0GCSqGSIb3DQEB
29
+ CwUAA4IBAQBfX4dwxG5PhtxES/LDEOaZIZXyaX6CKe367zhW+HxWbSOXMQJFkIQj
30
+ m7tzT+sDFJXyiOv5cPtfpUam5pTiryzRw5HD6oxlPIt5vO15EJ69v++3m7shMLbw
31
+ amZOajKXmu2ZGZfhOtj7bOTwmOj1AnWLKeOQIR3STvvfZCD+6dt1XenW7CdjCsxE
32
+ ifervPjLFqFPsMOgaxikhgPK6bRtszrQhJSYlifKKzxbX1hYAsmGL7IxjubFSV5r
33
+ gpvfPNWMwyBDlHaNS3GfO6cRRxBOvEG05GUCsvtTY4Bpe8yjE64wg1ymb47LMOnv
34
+ Qb1lGORmf/opg45mluKUYl7pQNZHD0d3
35
+ -----END CERTIFICATE-----
36
+ date: 2020-07-17 00:00:00.000000000 Z
16
37
  dependencies: []
17
38
  description: A fully featured BSON specification implementation in Ruby
18
39
  email:
@@ -212,118 +233,119 @@ required_rubygems_version: !ruby/object:Gem::Requirement
212
233
  - !ruby/object:Gem::Version
213
234
  version: 1.3.6
214
235
  requirements: []
215
- rubygems_version: 3.1.2
236
+ rubyforge_project:
237
+ rubygems_version: 2.7.6.2
216
238
  signing_key:
217
239
  specification_version: 4
218
240
  summary: Ruby implementation of the BSON specification
219
241
  test_files:
220
- - spec/runners/corpus.rb
221
- - spec/runners/corpus_legacy.rb
242
+ - spec/spec_helper.rb
243
+ - spec/spec_tests/corpus_spec.rb
244
+ - spec/spec_tests/common_driver_spec.rb
245
+ - spec/spec_tests/data/corpus/decimal128-7.json
246
+ - spec/spec_tests/data/corpus/top.json
247
+ - spec/spec_tests/data/corpus/array.json
248
+ - spec/spec_tests/data/corpus/null.json
249
+ - spec/spec_tests/data/corpus/document.json
250
+ - spec/spec_tests/data/corpus/decimal128-2.json
251
+ - spec/spec_tests/data/corpus/decimal128-6.json
252
+ - spec/spec_tests/data/corpus/boolean.json
253
+ - spec/spec_tests/data/corpus/README.md
254
+ - spec/spec_tests/data/corpus/maxkey.json
255
+ - spec/spec_tests/data/corpus/binary.json
256
+ - spec/spec_tests/data/corpus/multi-type.json
257
+ - spec/spec_tests/data/corpus/timestamp.json
258
+ - spec/spec_tests/data/corpus/multi-type-deprecated.json
259
+ - spec/spec_tests/data/corpus/dbpointer.json
260
+ - spec/spec_tests/data/corpus/oid.json
261
+ - spec/spec_tests/data/corpus/regex.json
262
+ - spec/spec_tests/data/corpus/minkey.json
263
+ - spec/spec_tests/data/corpus/symbol.json
264
+ - spec/spec_tests/data/corpus/dbref.json
265
+ - spec/spec_tests/data/corpus/decimal128-1.json
266
+ - spec/spec_tests/data/corpus/undefined.json
267
+ - spec/spec_tests/data/corpus/double.json
268
+ - spec/spec_tests/data/corpus/decimal128-4.json
269
+ - spec/spec_tests/data/corpus/decimal128-3.json
270
+ - spec/spec_tests/data/corpus/decimal128-5.json
271
+ - spec/spec_tests/data/corpus/int32.json
272
+ - spec/spec_tests/data/corpus/string.json
273
+ - spec/spec_tests/data/corpus/code.json
274
+ - spec/spec_tests/data/corpus/code_w_scope.json
275
+ - spec/spec_tests/data/corpus/int64.json
276
+ - spec/spec_tests/data/corpus/datetime.json
277
+ - spec/spec_tests/data/corpus_legacy/top.json
278
+ - spec/spec_tests/data/corpus_legacy/array.json
279
+ - spec/spec_tests/data/corpus_legacy/null.json
280
+ - spec/spec_tests/data/corpus_legacy/document.json
281
+ - spec/spec_tests/data/corpus_legacy/boolean.json
282
+ - spec/spec_tests/data/corpus_legacy/maxkey.json
283
+ - spec/spec_tests/data/corpus_legacy/binary.json
284
+ - spec/spec_tests/data/corpus_legacy/timestamp.json
285
+ - spec/spec_tests/data/corpus_legacy/failures/dbpointer.json
286
+ - spec/spec_tests/data/corpus_legacy/failures/symbol.json
287
+ - spec/spec_tests/data/corpus_legacy/failures/int64.json
288
+ - spec/spec_tests/data/corpus_legacy/failures/datetime.json
289
+ - spec/spec_tests/data/corpus_legacy/oid.json
290
+ - spec/spec_tests/data/corpus_legacy/regex.json
291
+ - spec/spec_tests/data/corpus_legacy/minkey.json
292
+ - spec/spec_tests/data/corpus_legacy/undefined.json
293
+ - spec/spec_tests/data/corpus_legacy/double.json
294
+ - spec/spec_tests/data/corpus_legacy/int32.json
295
+ - spec/spec_tests/data/corpus_legacy/string.json
296
+ - spec/spec_tests/data/corpus_legacy/code.json
297
+ - spec/spec_tests/data/corpus_legacy/code_w_scope.json
298
+ - spec/spec_tests/data/decimal128/decimal128-7.json
299
+ - spec/spec_tests/data/decimal128/decimal128-2.json
300
+ - spec/spec_tests/data/decimal128/decimal128-6.json
301
+ - spec/spec_tests/data/decimal128/decimal128-1.json
302
+ - spec/spec_tests/data/decimal128/decimal128-4.json
303
+ - spec/spec_tests/data/decimal128/decimal128-3.json
304
+ - spec/spec_tests/data/decimal128/decimal128-5.json
305
+ - spec/spec_tests/corpus_legacy_spec.rb
306
+ - spec/support/utils.rb
307
+ - spec/support/shared_examples.rb
308
+ - spec/support/spec_config.rb
222
309
  - spec/runners/common_driver.rb
223
- - spec/bson/max_key_spec.rb
224
- - spec/bson/byte_buffer_spec.rb
225
- - spec/bson/ext_json_parse_spec.rb
310
+ - spec/runners/corpus_legacy.rb
311
+ - spec/runners/corpus.rb
312
+ - spec/bson/code_spec.rb
226
313
  - spec/bson/byte_buffer_read_spec.rb
227
- - spec/bson/decimal128_spec.rb
228
- - spec/bson/date_spec.rb
229
- - spec/bson/object_spec.rb
230
- - spec/bson/int64_spec.rb
231
314
  - spec/bson/int32_spec.rb
232
- - spec/bson/object_id_spec.rb
233
- - spec/bson/hash_spec.rb
315
+ - spec/bson/max_key_spec.rb
316
+ - spec/bson/time_spec.rb
317
+ - spec/bson/array_spec.rb
318
+ - spec/bson/date_time_spec.rb
319
+ - spec/bson/document_spec.rb
320
+ - spec/bson/float_spec.rb
321
+ - spec/bson/nil_class_spec.rb
322
+ - spec/bson/time_with_zone_spec.rb
323
+ - spec/bson/ext_json_parse_spec.rb
234
324
  - spec/bson/string_spec.rb
235
- - spec/bson/boolean_spec.rb
236
- - spec/bson/timestamp_spec.rb
237
325
  - spec/bson/open_struct_spec.rb
238
326
  - spec/bson/config_spec.rb
239
- - spec/bson/nil_class_spec.rb
240
- - spec/bson/regexp_spec.rb
241
- - spec/bson/time_with_zone_spec.rb
242
- - spec/bson/code_spec.rb
243
327
  - spec/bson/false_class_spec.rb
244
328
  - spec/bson/raw_spec.rb
329
+ - spec/bson/regexp_spec.rb
245
330
  - spec/bson/binary_spec.rb
246
- - spec/bson/array_spec.rb
247
- - spec/bson/code_with_scope_spec.rb
248
- - spec/bson/symbol_spec.rb
249
- - spec/bson/float_spec.rb
250
- - spec/bson/symbol_raw_spec.rb
251
- - spec/bson/true_class_spec.rb
252
- - spec/bson/integer_spec.rb
331
+ - spec/bson/object_spec.rb
332
+ - spec/bson/decimal128_spec.rb
253
333
  - spec/bson/binary_uuid_spec.rb
254
- - spec/bson/time_spec.rb
334
+ - spec/bson/boolean_spec.rb
335
+ - spec/bson/byte_buffer_spec.rb
255
336
  - spec/bson/json_spec.rb
256
- - spec/bson/date_time_spec.rb
257
- - spec/bson/document_spec.rb
337
+ - spec/bson/symbol_spec.rb
338
+ - spec/bson/integer_spec.rb
258
339
  - spec/bson/byte_buffer_write_spec.rb
259
- - spec/bson/min_key_spec.rb
260
- - spec/bson/undefined_spec.rb
261
340
  - spec/bson/registry_spec.rb
262
- - spec/support/shared_examples.rb
263
- - spec/support/spec_config.rb
264
- - spec/support/utils.rb
265
- - spec/spec_tests/data/corpus_legacy/code.json
266
- - spec/spec_tests/data/corpus_legacy/code_w_scope.json
267
- - spec/spec_tests/data/corpus_legacy/failures/symbol.json
268
- - spec/spec_tests/data/corpus_legacy/failures/datetime.json
269
- - spec/spec_tests/data/corpus_legacy/failures/int64.json
270
- - spec/spec_tests/data/corpus_legacy/failures/dbpointer.json
271
- - spec/spec_tests/data/corpus_legacy/null.json
272
- - spec/spec_tests/data/corpus_legacy/boolean.json
273
- - spec/spec_tests/data/corpus_legacy/oid.json
274
- - spec/spec_tests/data/corpus_legacy/regex.json
275
- - spec/spec_tests/data/corpus_legacy/array.json
276
- - spec/spec_tests/data/corpus_legacy/document.json
277
- - spec/spec_tests/data/corpus_legacy/undefined.json
278
- - spec/spec_tests/data/corpus_legacy/binary.json
279
- - spec/spec_tests/data/corpus_legacy/minkey.json
280
- - spec/spec_tests/data/corpus_legacy/maxkey.json
281
- - spec/spec_tests/data/corpus_legacy/int32.json
282
- - spec/spec_tests/data/corpus_legacy/timestamp.json
283
- - spec/spec_tests/data/corpus_legacy/top.json
284
- - spec/spec_tests/data/corpus_legacy/string.json
285
- - spec/spec_tests/data/corpus_legacy/double.json
286
- - spec/spec_tests/data/corpus/code.json
287
- - spec/spec_tests/data/corpus/code_w_scope.json
288
- - spec/spec_tests/data/corpus/decimal128-1.json
289
- - spec/spec_tests/data/corpus/null.json
290
- - spec/spec_tests/data/corpus/multi-type.json
291
- - spec/spec_tests/data/corpus/boolean.json
292
- - spec/spec_tests/data/corpus/symbol.json
293
- - spec/spec_tests/data/corpus/datetime.json
294
- - spec/spec_tests/data/corpus/oid.json
295
- - spec/spec_tests/data/corpus/regex.json
296
- - spec/spec_tests/data/corpus/int64.json
297
- - spec/spec_tests/data/corpus/decimal128-7.json
298
- - spec/spec_tests/data/corpus/array.json
299
- - spec/spec_tests/data/corpus/decimal128-3.json
300
- - spec/spec_tests/data/corpus/decimal128-5.json
301
- - spec/spec_tests/data/corpus/document.json
302
- - spec/spec_tests/data/corpus/multi-type-deprecated.json
303
- - spec/spec_tests/data/corpus/README.md
304
- - spec/spec_tests/data/corpus/dbpointer.json
305
- - spec/spec_tests/data/corpus/decimal128-4.json
306
- - spec/spec_tests/data/corpus/undefined.json
307
- - spec/spec_tests/data/corpus/decimal128-6.json
308
- - spec/spec_tests/data/corpus/dbref.json
309
- - spec/spec_tests/data/corpus/binary.json
310
- - spec/spec_tests/data/corpus/minkey.json
311
- - spec/spec_tests/data/corpus/decimal128-2.json
312
- - spec/spec_tests/data/corpus/maxkey.json
313
- - spec/spec_tests/data/corpus/int32.json
314
- - spec/spec_tests/data/corpus/timestamp.json
315
- - spec/spec_tests/data/corpus/top.json
316
- - spec/spec_tests/data/corpus/string.json
317
- - spec/spec_tests/data/corpus/double.json
318
- - spec/spec_tests/data/decimal128/decimal128-1.json
319
- - spec/spec_tests/data/decimal128/decimal128-7.json
320
- - spec/spec_tests/data/decimal128/decimal128-3.json
321
- - spec/spec_tests/data/decimal128/decimal128-5.json
322
- - spec/spec_tests/data/decimal128/decimal128-4.json
323
- - spec/spec_tests/data/decimal128/decimal128-6.json
324
- - spec/spec_tests/data/decimal128/decimal128-2.json
325
- - spec/spec_tests/corpus_legacy_spec.rb
326
- - spec/spec_tests/corpus_spec.rb
327
- - spec/spec_tests/common_driver_spec.rb
341
+ - spec/bson/code_with_scope_spec.rb
342
+ - spec/bson/true_class_spec.rb
343
+ - spec/bson/undefined_spec.rb
344
+ - spec/bson/object_id_spec.rb
345
+ - spec/bson/timestamp_spec.rb
346
+ - spec/bson/hash_spec.rb
347
+ - spec/bson/symbol_raw_spec.rb
348
+ - spec/bson/min_key_spec.rb
349
+ - spec/bson/int64_spec.rb
350
+ - spec/bson/date_spec.rb
328
351
  - spec/bson_spec.rb
329
- - spec/spec_helper.rb
Binary file