bson 4.9.5 → 4.10.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1e5e88dfb0ddb4d37e05be097f8b26c7a980bfc1abcc9d1e05fe40aa4130c7b5
4
- data.tar.gz: d388af7cec7de94fa13487c78bdd747eb5bf0ac99c6aaf5a4dd012bc95e7800d
3
+ metadata.gz: a62c9c51fa6fafda7b1e9a084a118fd34e25804fd97ffd504f8d00690d2eb9f0
4
+ data.tar.gz: 219e45cccac4d1d1b7f7dfad0e6f386538678d632cc9937b9f0f6c06f57e4118
5
5
  SHA512:
6
- metadata.gz: 4ae9d9e323587d434ce674440d0c3f980ee9aa1c8654a3a895e8dc23c66d2f4a58608f6897b1367b811f6c7fb72cccf8e4cb150fb7ca6951ba17ee3051e74eeb
7
- data.tar.gz: 2fda4fc32c12e3d3a69dc2ba9ea35f85b784d71824e4e69268bb30898dea237f973b59be8c0fba625d13dbabb1ef2083ba56bdddb38ed0c43ecea11ffaf4afe5
6
+ metadata.gz: 40cab24a15e3430250426e270e99700ab2527d417ac9a248976afc1e1cee5deb9bd1b7dc07112d1d772cb4e65387a3c6fab00943bc55b9d426bc29fee39aba9e
7
+ data.tar.gz: 349f013a08fc84afea777262e88f8813586621f4dc4273ebf122fd347d574dc8dee8b102ba901085b373b3479b1172c3c596a8dd3e5086e05d19b109845f6168
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -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);
@@ -88,7 +88,7 @@ void Init_bson_native()
88
88
  * call-seq:
89
89
  * buffer.get_array(**options) -> Array
90
90
  *
91
- * Reads an array from the byte buffer..
91
+ * Reads an array from the byte buffer.
92
92
  *
93
93
  * @option options [ nil | :bson ] :mode Decoding mode to use.
94
94
  *
@@ -97,6 +97,18 @@ void Init_bson_native()
97
97
  rb_define_method(rb_byte_buffer_class, "get_array", rb_bson_byte_buffer_get_array, -1);
98
98
 
99
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);
100
112
  rb_define_method(rb_byte_buffer_class, "get_int64", rb_bson_byte_buffer_get_int64, 0);
101
113
  rb_define_method(rb_byte_buffer_class, "get_string", rb_bson_byte_buffer_get_string, 0);
102
114
 
@@ -202,6 +214,21 @@ void Init_bson_native()
202
214
  */
203
215
  rb_define_method(rb_byte_buffer_class, "put_int32", rb_bson_byte_buffer_put_int32, 1);
204
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
+
205
232
  /*
206
233
  * call-seq:
207
234
  * buffer.put_int64(fixnum) -> ByteBuffer
@@ -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);
@@ -41,12 +42,12 @@ void pvt_raise_decode_error(volatile VALUE msg) {
41
42
  int32_t pvt_validate_length(byte_buffer_t *b)
42
43
  {
43
44
  int32_t length;
44
-
45
+
45
46
  ENSURE_BSON_READ(b, 4);
46
47
  memcpy(&length, READ_PTR(b), 4);
47
48
  length = BSON_UINT32_TO_LE(length);
48
49
 
49
- /* minimum valid length is 4 (byte count) + 1 (terminating byte) */
50
+ /* minimum valid length is 4 (byte count) + 1 (terminating byte) */
50
51
  if(length >= 5){
51
52
  ENSURE_BSON_READ(b, length);
52
53
 
@@ -59,7 +60,7 @@ int32_t pvt_validate_length(byte_buffer_t *b)
59
60
  else{
60
61
  rb_raise(rb_eRangeError, "Buffer contained invalid length %d at %zu", length, b->read_position);
61
62
  }
62
-
63
+
63
64
  return length;
64
65
  }
65
66
 
@@ -175,13 +176,13 @@ VALUE pvt_get_string(byte_buffer_t *b, const char *data_type)
175
176
  }
176
177
  ENSURE_BSON_READ(b, 4 + length);
177
178
  str_ptr = READ_PTR(b) + 4;
178
- last_byte = *(READ_PTR(b) + 4 + length - 1);
179
+ last_byte = *(READ_PTR(b) + 4 + length_le - 1);
179
180
  if (last_byte != 0) {
180
181
  pvt_raise_decode_error(rb_sprintf("Last byte of the string is not null: 0x%x", (int) last_byte));
181
182
  }
182
183
  rb_bson_utf8_validate(str_ptr, length - 1, true, data_type);
183
184
  string = rb_enc_str_new(str_ptr, length - 1, rb_utf8_encoding());
184
- b->read_position += 4 + length;
185
+ b->read_position += 4 + length_le;
185
186
  return string;
186
187
  }
187
188
 
@@ -205,7 +206,7 @@ VALUE pvt_get_symbol(byte_buffer_t *b, VALUE rb_buffer, int argc, VALUE *argv)
205
206
  klass = rb_funcall(rb_bson_registry, rb_intern("get"), 1, INT2FIX(BSON_TYPE_SYMBOL));
206
207
  value = rb_funcall(klass, rb_intern("from_bson"), 1, rb_buffer);
207
208
  }
208
-
209
+
209
210
  RB_GC_GUARD(klass);
210
211
  return value;
211
212
  }
@@ -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
  */
@@ -284,7 +307,7 @@ VALUE pvt_get_int64(byte_buffer_t *b, int argc, VALUE *argv)
284
307
  memcpy(&i64, READ_PTR(b), 8);
285
308
  b->read_position += 8;
286
309
  num = LL2NUM(BSON_UINT64_FROM_LE(i64));
287
-
310
+
288
311
  if (pvt_get_mode_option(argc, argv) == BSON_MODE_BSON) {
289
312
  VALUE klass = rb_funcall(rb_bson_registry,rb_intern("get"),1, INT2FIX(BSON_TYPE_INT64));
290
313
  VALUE value = rb_funcall(klass, rb_intern("new"), 1, num);
@@ -293,7 +316,7 @@ VALUE pvt_get_int64(byte_buffer_t *b, int argc, VALUE *argv)
293
316
  } else {
294
317
  return num;
295
318
  }
296
-
319
+
297
320
  RB_GC_GUARD(num);
298
321
  }
299
322
 
@@ -353,11 +376,11 @@ VALUE rb_bson_byte_buffer_get_hash(int argc, VALUE *argv, VALUE self){
353
376
  rb_hash_aset(doc, field, pvt_read_field(b, self, type, argc, argv));
354
377
  RB_GC_GUARD(field);
355
378
  }
356
-
379
+
357
380
  if (READ_PTR(b) - start_ptr != length) {
358
381
  pvt_raise_decode_error(rb_sprintf("Expected to read %d bytes for the hash but read %ld bytes", length, READ_PTR(b) - start_ptr));
359
382
  }
360
-
383
+
361
384
  return doc;
362
385
  }
363
386
 
@@ -379,10 +402,10 @@ VALUE rb_bson_byte_buffer_get_array(int argc, VALUE *argv, VALUE self){
379
402
  rb_ary_push(array, pvt_read_field(b, self, type, argc, argv));
380
403
  }
381
404
  RB_GC_GUARD(array);
382
-
405
+
383
406
  if (READ_PTR(b) - start_ptr != length) {
384
407
  pvt_raise_decode_error(rb_sprintf("Expected to read %d bytes for the hash but read %ld bytes", length, READ_PTR(b) - start_ptr));
385
408
  }
386
-
409
+
387
410
  return array;
388
411
  }
@@ -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);
@@ -390,6 +391,37 @@ void pvt_put_int32(byte_buffer_t *b, const int32_t i)
390
391
  b->write_position += 4;
391
392
  }
392
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
+
393
425
  /* The docstring is in init.c. */
394
426
  VALUE rb_bson_byte_buffer_put_int64(VALUE self, VALUE i)
395
427
  {
@@ -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
 
@@ -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.5".freeze
16
+ VERSION = "4.10.0".freeze
17
17
  end
@@ -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
@@ -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)",
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.5
4
+ version: 4.10.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Brock
@@ -33,7 +33,7 @@ cert_chain:
33
33
  gpvfPNWMwyBDlHaNS3GfO6cRRxBOvEG05GUCsvtTY4Bpe8yjE64wg1ymb47LMOnv
34
34
  Qb1lGORmf/opg45mluKUYl7pQNZHD0d3
35
35
  -----END CERTIFICATE-----
36
- date: 2020-10-13 00:00:00.000000000 Z
36
+ date: 2020-07-17 00:00:00.000000000 Z
37
37
  dependencies: []
38
38
  description: A fully featured BSON specification implementation in Ruby
39
39
  email:
@@ -99,7 +99,6 @@ files:
99
99
  - lib/bson/true_class.rb
100
100
  - lib/bson/undefined.rb
101
101
  - lib/bson/version.rb
102
- - lib/bson_native.bundle
103
102
  - spec/bson/array_spec.rb
104
103
  - spec/bson/binary_spec.rb
105
104
  - spec/bson/binary_uuid_spec.rb
@@ -240,113 +239,113 @@ signing_key:
240
239
  specification_version: 4
241
240
  summary: Ruby implementation of the BSON specification
242
241
  test_files:
242
+ - spec/spec_helper.rb
243
+ - spec/spec_tests/corpus_spec.rb
243
244
  - spec/spec_tests/common_driver_spec.rb
244
- - spec/spec_tests/corpus_legacy_spec.rb
245
+ - spec/spec_tests/data/corpus/decimal128-7.json
246
+ - spec/spec_tests/data/corpus/top.json
245
247
  - spec/spec_tests/data/corpus/array.json
248
+ - spec/spec_tests/data/corpus/null.json
246
249
  - spec/spec_tests/data/corpus/document.json
247
- - spec/spec_tests/data/corpus/decimal128-7.json
248
- - spec/spec_tests/data/corpus/decimal128-3.json
249
- - spec/spec_tests/data/corpus/maxkey.json
250
- - spec/spec_tests/data/corpus/code.json
251
- - spec/spec_tests/data/corpus/dbpointer.json
252
- - spec/spec_tests/data/corpus/int32.json
253
- - spec/spec_tests/data/corpus/README.md
254
- - spec/spec_tests/data/corpus/decimal128-5.json
255
- - spec/spec_tests/data/corpus/decimal128-4.json
256
250
  - spec/spec_tests/data/corpus/decimal128-2.json
257
- - spec/spec_tests/data/corpus/double.json
258
- - spec/spec_tests/data/corpus/code_w_scope.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
259
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
260
  - spec/spec_tests/data/corpus/oid.json
261
- - spec/spec_tests/data/corpus/null.json
262
- - spec/spec_tests/data/corpus/decimal128-6.json
263
- - spec/spec_tests/data/corpus/int64.json
264
- - spec/spec_tests/data/corpus/dbref.json
265
261
  - spec/spec_tests/data/corpus/regex.json
266
262
  - spec/spec_tests/data/corpus/minkey.json
267
- - spec/spec_tests/data/corpus/multi-type.json
268
- - spec/spec_tests/data/corpus/top.json
269
263
  - spec/spec_tests/data/corpus/symbol.json
270
- - spec/spec_tests/data/corpus/multi-type-deprecated.json
264
+ - spec/spec_tests/data/corpus/dbref.json
265
+ - spec/spec_tests/data/corpus/decimal128-1.json
271
266
  - spec/spec_tests/data/corpus/undefined.json
272
- - spec/spec_tests/data/corpus/datetime.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
273
272
  - spec/spec_tests/data/corpus/string.json
274
- - spec/spec_tests/data/corpus/boolean.json
275
- - spec/spec_tests/data/corpus/timestamp.json
276
- - spec/spec_tests/data/corpus/decimal128-1.json
277
- - spec/spec_tests/data/decimal128/decimal128-7.json
278
- - spec/spec_tests/data/decimal128/decimal128-3.json
279
- - spec/spec_tests/data/decimal128/decimal128-5.json
280
- - spec/spec_tests/data/decimal128/decimal128-4.json
281
- - spec/spec_tests/data/decimal128/decimal128-2.json
282
- - spec/spec_tests/data/decimal128/decimal128-6.json
283
- - spec/spec_tests/data/decimal128/decimal128-1.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
284
278
  - spec/spec_tests/data/corpus_legacy/array.json
279
+ - spec/spec_tests/data/corpus_legacy/null.json
285
280
  - spec/spec_tests/data/corpus_legacy/document.json
281
+ - spec/spec_tests/data/corpus_legacy/boolean.json
286
282
  - spec/spec_tests/data/corpus_legacy/maxkey.json
287
- - spec/spec_tests/data/corpus_legacy/code.json
288
- - spec/spec_tests/data/corpus_legacy/int32.json
289
- - spec/spec_tests/data/corpus_legacy/double.json
290
- - spec/spec_tests/data/corpus_legacy/code_w_scope.json
291
283
  - spec/spec_tests/data/corpus_legacy/binary.json
292
- - spec/spec_tests/data/corpus_legacy/oid.json
293
- - spec/spec_tests/data/corpus_legacy/null.json
294
- - spec/spec_tests/data/corpus_legacy/regex.json
295
- - spec/spec_tests/data/corpus_legacy/minkey.json
296
- - spec/spec_tests/data/corpus_legacy/top.json
284
+ - spec/spec_tests/data/corpus_legacy/timestamp.json
297
285
  - spec/spec_tests/data/corpus_legacy/failures/dbpointer.json
298
- - spec/spec_tests/data/corpus_legacy/failures/int64.json
299
286
  - spec/spec_tests/data/corpus_legacy/failures/symbol.json
287
+ - spec/spec_tests/data/corpus_legacy/failures/int64.json
300
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
301
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
302
295
  - spec/spec_tests/data/corpus_legacy/string.json
303
- - spec/spec_tests/data/corpus_legacy/boolean.json
304
- - spec/spec_tests/data/corpus_legacy/timestamp.json
305
- - spec/spec_tests/corpus_spec.rb
306
- - spec/runners/corpus.rb
307
- - spec/runners/corpus_legacy.rb
308
- - spec/runners/common_driver.rb
309
- - spec/spec_helper.rb
310
- - spec/support/spec_config.rb
311
- - spec/support/shared_examples.rb
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
312
306
  - spec/support/utils.rb
313
- - spec/bson/ext_json_parse_spec.rb
314
- - spec/bson/object_spec.rb
315
- - spec/bson/json_spec.rb
316
- - spec/bson/true_class_spec.rb
307
+ - spec/support/shared_examples.rb
308
+ - spec/support/spec_config.rb
309
+ - spec/runners/common_driver.rb
310
+ - spec/runners/corpus_legacy.rb
311
+ - spec/runners/corpus.rb
312
+ - spec/bson/code_spec.rb
317
313
  - spec/bson/byte_buffer_read_spec.rb
318
- - spec/bson/config_spec.rb
319
314
  - spec/bson/int32_spec.rb
320
- - spec/bson/regexp_spec.rb
321
- - spec/bson/symbol_raw_spec.rb
322
- - spec/bson/open_struct_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
323
319
  - spec/bson/document_spec.rb
324
- - spec/bson/min_key_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
324
+ - spec/bson/string_spec.rb
325
+ - spec/bson/open_struct_spec.rb
326
+ - spec/bson/config_spec.rb
325
327
  - spec/bson/false_class_spec.rb
326
- - spec/bson/code_spec.rb
327
- - spec/bson/symbol_spec.rb
328
- - spec/bson/object_id_spec.rb
328
+ - spec/bson/raw_spec.rb
329
+ - spec/bson/regexp_spec.rb
330
+ - spec/bson/binary_spec.rb
331
+ - spec/bson/object_spec.rb
329
332
  - spec/bson/decimal128_spec.rb
330
- - spec/bson/registry_spec.rb
331
- - spec/bson/time_spec.rb
333
+ - spec/bson/binary_uuid_spec.rb
332
334
  - spec/bson/boolean_spec.rb
333
335
  - spec/bson/byte_buffer_spec.rb
334
- - spec/bson/hash_spec.rb
336
+ - spec/bson/json_spec.rb
337
+ - spec/bson/symbol_spec.rb
338
+ - spec/bson/integer_spec.rb
339
+ - spec/bson/byte_buffer_write_spec.rb
340
+ - spec/bson/registry_spec.rb
341
+ - spec/bson/code_with_scope_spec.rb
342
+ - spec/bson/true_class_spec.rb
335
343
  - spec/bson/undefined_spec.rb
336
- - spec/bson/raw_spec.rb
337
- - spec/bson/string_spec.rb
344
+ - spec/bson/object_id_spec.rb
338
345
  - spec/bson/timestamp_spec.rb
339
- - spec/bson/date_time_spec.rb
340
- - spec/bson/max_key_spec.rb
346
+ - spec/bson/hash_spec.rb
347
+ - spec/bson/symbol_raw_spec.rb
348
+ - spec/bson/min_key_spec.rb
341
349
  - spec/bson/int64_spec.rb
342
- - spec/bson/byte_buffer_write_spec.rb
343
350
  - spec/bson/date_spec.rb
344
- - spec/bson/binary_spec.rb
345
- - spec/bson/code_with_scope_spec.rb
346
- - spec/bson/integer_spec.rb
347
- - spec/bson/binary_uuid_spec.rb
348
- - spec/bson/nil_class_spec.rb
349
- - spec/bson/array_spec.rb
350
- - spec/bson/time_with_zone_spec.rb
351
- - spec/bson/float_spec.rb
352
351
  - spec/bson_spec.rb
metadata.gz.sig CHANGED
Binary file
Binary file