bson 3.2.1 → 3.2.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +1 -1
- data/CHANGELOG.md +10 -0
- data/ext/bson/native.c +40 -0
- data/lib/bson/array.rb +2 -2
- data/lib/bson/version.rb +1 -1
- data/spec/bson/array_spec.rb +13 -0
- data/spec/bson/timestamp_spec.rb +1 -1
- metadata +2 -2
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a83a6cb4625e37db0fafa80ce5f1fd2338d1f0d4
|
4
|
+
data.tar.gz: ea378315e221bd9c80b19038e93caaa4126fa256
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: beec93611bb46e76ce16d45a728f13325499e5ee1713dc28adfccf6d4ca95c5ab8526911ca208ed50a7e92c4266796063dc94e483870ff5ee9aa0a2b935efc3a
|
7
|
+
data.tar.gz: 54f768da04f510ddc6cdda7ec2e0d5f7efd5b032249089f02e3cbc7694ba69a765e4dcfba6cc4171b8185ce023c58637bcb9ca316800b5099ffeac385310ac1d
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
�G�l
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,16 @@
|
|
1
1
|
BSON Changelog
|
2
2
|
==============
|
3
3
|
|
4
|
+
## 3.2.3
|
5
|
+
|
6
|
+
### Bug Fixes
|
7
|
+
|
8
|
+
* [#41](https://github.com/mongodb/bson-ruby/pull/41) Normalizing arrays does not mutate. (Agis Anastasopoulos)
|
9
|
+
|
10
|
+
* [#40](https://github.com/mongodb/bson-ruby/pull/40) Added big endian support. (Jeff Blight)
|
11
|
+
|
12
|
+
* [RUBY-1019](https://jira.mongodb.org/browse/RUBY-1019) Performace improvements on deserialization.
|
13
|
+
|
4
14
|
## 3.2.1
|
5
15
|
|
6
16
|
### Bug Fixes
|
data/ext/bson/native.c
CHANGED
@@ -89,6 +89,14 @@ static VALUE rb_utc_method;
|
|
89
89
|
|
90
90
|
#include <ruby/encoding.h>
|
91
91
|
|
92
|
+
#if __BYTE_ORDER == __BIG_ENDIAN
|
93
|
+
typedef union doublebyte
|
94
|
+
{
|
95
|
+
double d;
|
96
|
+
unsigned char b[sizeof(double)];
|
97
|
+
} doublebytet;
|
98
|
+
#endif
|
99
|
+
|
92
100
|
/**
|
93
101
|
* Convert the binary string to a ruby utf8 string.
|
94
102
|
*
|
@@ -188,7 +196,19 @@ static VALUE rb_float_to_bson(int argc, VALUE *argv, VALUE self)
|
|
188
196
|
{
|
189
197
|
const double v = NUM2DBL(self);
|
190
198
|
VALUE encoded = rb_get_default_encoded(argc, argv);
|
199
|
+
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
191
200
|
rb_str_cat(encoded, (char*) &v, 8);
|
201
|
+
#elif __BYTE_ORDER == __BIG_ENDIAN
|
202
|
+
doublebytet swap;
|
203
|
+
unsigned char b;
|
204
|
+
swap.d = v;
|
205
|
+
for (int i=0; i < sizeof(double)/2; i++) {
|
206
|
+
b=swap.b[i];
|
207
|
+
swap.b[i] = swap.b[((sizeof(double)-1)-i)];
|
208
|
+
swap.b[((sizeof(double)-1)-i)]=b;
|
209
|
+
}
|
210
|
+
rb_str_cat(encoded, (char*)&swap.d, 8);
|
211
|
+
#endif
|
192
212
|
return encoded;
|
193
213
|
}
|
194
214
|
|
@@ -210,7 +230,20 @@ static VALUE rb_float_from_bson_double(VALUE self, VALUE value)
|
|
210
230
|
const char * bytes;
|
211
231
|
double v;
|
212
232
|
bytes = StringValuePtr(value);
|
233
|
+
#if __BYTE_ORDER == __LITTLE_ENDIAN
|
213
234
|
memcpy(&v, bytes, RSTRING_LEN(value));
|
235
|
+
#else
|
236
|
+
doublebytet swap;
|
237
|
+
unsigned char b;
|
238
|
+
memcpy(&swap.d, bytes, RSTRING_LEN(value));
|
239
|
+
for (int i=0; i < sizeof(double)/2; i++) {
|
240
|
+
b=swap.b[i];
|
241
|
+
swap.b[i] = swap.b[((sizeof(double)-1)-i)];
|
242
|
+
swap.b[((sizeof(double)-1)-i)]=b;
|
243
|
+
}
|
244
|
+
memcpy(&v, swap.b, RSTRING_LEN(value));
|
245
|
+
#endif
|
246
|
+
|
214
247
|
return DBL2NUM(v);
|
215
248
|
}
|
216
249
|
|
@@ -244,10 +277,17 @@ static VALUE rb_object_id_generator_next(int argc, VALUE* args, VALUE self)
|
|
244
277
|
unsigned long c;
|
245
278
|
c = htonl(rb_bson_object_id_counter << 8);
|
246
279
|
|
280
|
+
# if __BYTE_ORDER == __LITTLE_ENDIAN
|
247
281
|
memcpy(&bytes, &t, 4);
|
248
282
|
memcpy(&bytes[4], rb_bson_machine_id_hash, 3);
|
249
283
|
memcpy(&bytes[7], &pid, 2);
|
250
284
|
memcpy(&bytes[9], (unsigned char*) &c, 3);
|
285
|
+
#elif __BYTE_ORDER == __BIG_ENDIAN
|
286
|
+
memcpy(&bytes, ((unsigned char*) &t) + 4, 4);
|
287
|
+
memcpy(&bytes[4], rb_bson_machine_id_hash, 3);
|
288
|
+
memcpy(&bytes[7], &pid, 2);
|
289
|
+
memcpy(&bytes[9], ((unsigned char*) &c) + 4, 3);
|
290
|
+
#endif
|
251
291
|
rb_bson_object_id_counter++;
|
252
292
|
return rb_str_new(bytes, 12);
|
253
293
|
}
|
data/lib/bson/array.rb
CHANGED
@@ -73,11 +73,11 @@ module BSON
|
|
73
73
|
# @example Convert the array to a normalized value.
|
74
74
|
# array.to_bson_normalized_value
|
75
75
|
#
|
76
|
-
# @return [ Array ] The
|
76
|
+
# @return [ Array ] The normalized array.
|
77
77
|
#
|
78
78
|
# @since 3.0.0
|
79
79
|
def to_bson_normalized_value
|
80
|
-
map
|
80
|
+
map { |value| value.to_bson_normalized_value }
|
81
81
|
end
|
82
82
|
|
83
83
|
module ClassMethods
|
data/lib/bson/version.rb
CHANGED
data/spec/bson/array_spec.rb
CHANGED
@@ -29,6 +29,19 @@ describe Array do
|
|
29
29
|
it_behaves_like "a deserializable bson element"
|
30
30
|
end
|
31
31
|
|
32
|
+
describe "#to_bson_normalized_value" do
|
33
|
+
|
34
|
+
let(:klass) { Class.new(Hash) }
|
35
|
+
let(:obj) {[ Foo.new ]}
|
36
|
+
|
37
|
+
before(:each) { stub_const "Foo", klass }
|
38
|
+
|
39
|
+
it "does not mutate the receiver" do
|
40
|
+
obj.to_bson_normalized_value
|
41
|
+
expect(obj.first.class).to eq(Foo)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
32
45
|
describe "#to_bson_object_id" do
|
33
46
|
|
34
47
|
context "when the array has 12 elements" do
|
data/spec/bson/timestamp_spec.rb
CHANGED
@@ -65,7 +65,7 @@ describe BSON::Timestamp do
|
|
65
65
|
|
66
66
|
let(:type) { 17.chr }
|
67
67
|
let(:obj) { described_class.new(1, 10) }
|
68
|
-
let(:bson) { [ 10, 1 ].pack(
|
68
|
+
let(:bson) { [ 10, 1 ].pack(BSON::Int32::PACK * 2) }
|
69
69
|
|
70
70
|
it_behaves_like "a bson element"
|
71
71
|
it_behaves_like "a serializable bson element"
|
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: 3.2.
|
4
|
+
version: 3.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tyler Brock
|
@@ -34,7 +34,7 @@ cert_chain:
|
|
34
34
|
XZOS48LlWh15EG4yZo/gRzqNAW2LUIkYA5eMS2Kp6r+KV8IBUO/LaHdrXbdilpa8
|
35
35
|
BRsuCo7UZDbFVRns04HLyjVvkj+K/ywIcdKdS0csz5M=
|
36
36
|
-----END CERTIFICATE-----
|
37
|
-
date: 2015-
|
37
|
+
date: 2015-09-03 00:00:00.000000000 Z
|
38
38
|
dependencies: []
|
39
39
|
description: A full featured BSON specification implementation, in Ruby
|
40
40
|
email:
|
metadata.gz.sig
CHANGED
Binary file
|