bson 3.2.1 → 3.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|