bson 4.8.0-java → 4.9.2-java
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 +0 -0
- data/README.md +18 -6
- data/lib/bson-ruby.jar +0 -0
- data/lib/bson.rb +1 -1
- data/lib/bson/active_support.rb +1 -1
- data/lib/bson/array.rb +14 -3
- data/lib/bson/binary.rb +1 -1
- data/lib/bson/boolean.rb +9 -2
- data/lib/bson/code.rb +1 -1
- data/lib/bson/code_with_scope.rb +16 -3
- data/lib/bson/config.rb +1 -1
- data/lib/bson/date.rb +1 -1
- data/lib/bson/date_time.rb +1 -1
- data/lib/bson/db_pointer.rb +7 -1
- data/lib/bson/decimal128.rb +1 -1
- data/lib/bson/decimal128/builder.rb +1 -1
- data/lib/bson/document.rb +1 -1
- data/lib/bson/environment.rb +2 -1
- data/lib/bson/error.rb +4 -0
- data/lib/bson/ext_json.rb +4 -3
- data/lib/bson/false_class.rb +1 -1
- data/lib/bson/float.rb +1 -1
- data/lib/bson/hash.rb +14 -3
- data/lib/bson/int32.rb +1 -1
- data/lib/bson/int64.rb +1 -1
- data/lib/bson/integer.rb +1 -1
- data/lib/bson/json.rb +1 -1
- data/lib/bson/max_key.rb +1 -1
- data/lib/bson/min_key.rb +1 -1
- data/lib/bson/nil_class.rb +1 -1
- data/lib/bson/object.rb +1 -1
- data/lib/bson/object_id.rb +1 -1
- data/lib/bson/open_struct.rb +1 -1
- data/lib/bson/regexp.rb +8 -2
- data/lib/bson/registry.rb +1 -1
- data/lib/bson/specialized.rb +1 -1
- data/lib/bson/string.rb +1 -1
- data/lib/bson/symbol.rb +1 -1
- data/lib/bson/time.rb +40 -6
- data/lib/bson/time_with_zone.rb +1 -1
- data/lib/bson/timestamp.rb +1 -1
- data/lib/bson/true_class.rb +1 -1
- data/lib/bson/undefined.rb +1 -1
- data/lib/bson/version.rb +2 -2
- data/spec/bson/array_spec.rb +1 -1
- data/spec/bson/binary_spec.rb +1 -1
- data/spec/bson/binary_uuid_spec.rb +1 -1
- data/spec/bson/boolean_spec.rb +1 -1
- data/spec/bson/code_spec.rb +1 -1
- data/spec/bson/code_with_scope_spec.rb +1 -1
- data/spec/bson/date_spec.rb +1 -1
- data/spec/bson/date_time_spec.rb +1 -1
- data/spec/bson/decimal128_spec.rb +1 -1
- data/spec/bson/document_spec.rb +1 -1
- data/spec/bson/ext_json_parse_spec.rb +34 -2
- data/spec/bson/false_class_spec.rb +1 -1
- data/spec/bson/float_spec.rb +1 -1
- data/spec/bson/hash_spec.rb +1 -1
- data/spec/bson/int32_spec.rb +1 -1
- data/spec/bson/int64_spec.rb +1 -1
- data/spec/bson/integer_spec.rb +1 -1
- data/spec/bson/json_spec.rb +1 -1
- data/spec/bson/max_key_spec.rb +1 -1
- data/spec/bson/min_key_spec.rb +1 -1
- data/spec/bson/nil_class_spec.rb +1 -1
- data/spec/bson/object_id_spec.rb +1 -1
- data/spec/bson/object_spec.rb +1 -1
- data/spec/bson/open_struct_spec.rb +1 -1
- data/spec/bson/raw_spec.rb +12 -1
- data/spec/bson/regexp_spec.rb +1 -1
- data/spec/bson/registry_spec.rb +1 -1
- data/spec/bson/string_spec.rb +1 -1
- data/spec/bson/symbol_spec.rb +1 -1
- data/spec/bson/time_spec.rb +205 -2
- data/spec/bson/time_with_zone_spec.rb +1 -1
- data/spec/bson/timestamp_spec.rb +1 -1
- data/spec/bson/true_class_spec.rb +1 -1
- data/spec/bson/undefined_spec.rb +1 -1
- data/spec/bson_spec.rb +1 -1
- data/spec/runners/common_driver.rb +1 -1
- data/spec/runners/corpus.rb +13 -10
- data/spec/runners/corpus_legacy.rb +1 -1
- data/spec/spec_helper.rb +1 -1
- data/spec/spec_tests/data/corpus/top.json +0 -4
- data/spec/support/shared_examples.rb +1 -1
- metadata +79 -82
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3ae7d935612a364378aee53925f0808382ff92b3d23416ede0344ca5262d6e7e
|
4
|
+
data.tar.gz: f2abf5668f22d7bfee56bcdf132076acbfc7e416e0daad20b06ccec9f393d465
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b685a003e81eb3a63b521ad4836c6ecb055ca5b768237230636767447805be0ce9a2d2867a42fbea435b0367123230090139a7a8186a41e13b54ff87b021c9e0
|
7
|
+
data.tar.gz: 564392a677bb9f8db3f44fcf734aac5c5100756efb5a43d1a6e71535eb35c27989031deb0a1f212a2b5bbe1f63443f7eae86c020499bf66841f26930b723b89b
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/README.md
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
-
BSON
|
2
|
-
[![
|
3
|
-
[![
|
4
|
-
[![
|
5
|
-
[![
|
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.
|
@@ -38,7 +39,7 @@ As of 2.0.0, this project adheres to the
|
|
38
39
|
License
|
39
40
|
-------
|
40
41
|
|
41
|
-
Copyright (C) 2009-
|
42
|
+
Copyright (C) 2009-2020 MongoDB Inc.
|
42
43
|
|
43
44
|
Licensed under the Apache License, Version 2.0 (the "License");
|
44
45
|
you may not use this file except in compliance with the License.
|
@@ -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
|
data/lib/bson-ruby.jar
CHANGED
Binary file
|
data/lib/bson.rb
CHANGED
data/lib/bson/active_support.rb
CHANGED
data/lib/bson/array.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2009-
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -119,10 +119,21 @@ module BSON
|
|
119
119
|
buffer.get_array(**options)
|
120
120
|
else
|
121
121
|
array = new
|
122
|
-
buffer.
|
122
|
+
start_position = buffer.read_position
|
123
|
+
expected_byte_size = buffer.get_int32
|
123
124
|
while (type = buffer.get_byte) != NULL_BYTE
|
124
125
|
buffer.get_cstring
|
125
|
-
|
126
|
+
cls = BSON::Registry.get(type)
|
127
|
+
value = if options.empty?
|
128
|
+
cls.from_bson(buffer)
|
129
|
+
else
|
130
|
+
cls.from_bson(buffer, **options)
|
131
|
+
end
|
132
|
+
array << value
|
133
|
+
end
|
134
|
+
actual_byte_size = buffer.read_position - start_position
|
135
|
+
if actual_byte_size != expected_byte_size
|
136
|
+
raise Error::BSONDecodeError, "Expected array to take #{expected_byte_size} bytes but it took #{actual_byte_size} bytes"
|
126
137
|
end
|
127
138
|
array
|
128
139
|
end
|
data/lib/bson/binary.rb
CHANGED
data/lib/bson/boolean.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2009-
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -39,7 +39,14 @@ module BSON
|
|
39
39
|
#
|
40
40
|
# @since 2.0.0
|
41
41
|
def self.from_bson(buffer, **options)
|
42
|
-
buffer.get_byte
|
42
|
+
case v = buffer.get_byte
|
43
|
+
when TrueClass::TRUE_BYTE
|
44
|
+
true
|
45
|
+
when FalseClass::FALSE_BYTE
|
46
|
+
false
|
47
|
+
else
|
48
|
+
raise Error::BSONDecodeError, "Invalid boolean byte value: #{v}"
|
49
|
+
end
|
43
50
|
end
|
44
51
|
|
45
52
|
# Register this type when the module is loaded.
|
data/lib/bson/code.rb
CHANGED
data/lib/bson/code_with_scope.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2009-
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -119,8 +119,21 @@ module BSON
|
|
119
119
|
#
|
120
120
|
# @since 2.0.0
|
121
121
|
def self.from_bson(buffer, **options)
|
122
|
-
|
123
|
-
|
122
|
+
# Code with scope has a length (?) field which is not needed for
|
123
|
+
# decoding, but spec tests want this field validated.
|
124
|
+
start_position = buffer.read_position
|
125
|
+
length = buffer.get_int32
|
126
|
+
javascript = buffer.get_string
|
127
|
+
scope = if options.empty?
|
128
|
+
::Hash.from_bson(buffer)
|
129
|
+
else
|
130
|
+
::Hash.from_bson(buffer, **options)
|
131
|
+
end
|
132
|
+
read_bytes = buffer.read_position - start_position
|
133
|
+
if read_bytes != length
|
134
|
+
raise Error::BSONDecodeError, "CodeWithScope invalid: claimed length #{length}, actual length #{read_bytes}"
|
135
|
+
end
|
136
|
+
new(javascript, scope)
|
124
137
|
end
|
125
138
|
|
126
139
|
# Register this type when the module is loaded.
|
data/lib/bson/config.rb
CHANGED
data/lib/bson/date.rb
CHANGED
data/lib/bson/date_time.rb
CHANGED
data/lib/bson/db_pointer.rb
CHANGED
@@ -95,7 +95,13 @@ module BSON
|
|
95
95
|
#
|
96
96
|
# @see http://bsonspec.org/#/specification
|
97
97
|
def self.from_bson(buffer, **options)
|
98
|
-
|
98
|
+
ref = buffer.get_string
|
99
|
+
id = if options.empty?
|
100
|
+
ObjectId.from_bson(buffer)
|
101
|
+
else
|
102
|
+
ObjectId.from_bson(buffer, **options)
|
103
|
+
end
|
104
|
+
new(ref, id)
|
99
105
|
end
|
100
106
|
|
101
107
|
# Register this type when the module is loaded.
|
data/lib/bson/decimal128.rb
CHANGED
data/lib/bson/document.rb
CHANGED
data/lib/bson/environment.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2009-
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -41,6 +41,7 @@ module BSON
|
|
41
41
|
# @return [ true, false ] If the Ruby version is 1.9.
|
42
42
|
#
|
43
43
|
# @since 4.2.0
|
44
|
+
# @deprecated
|
44
45
|
def ruby_1_9?
|
45
46
|
@ruby_1_9 ||= RUBY_VERSION < '2.0.0'
|
46
47
|
end
|
data/lib/bson/error.rb
CHANGED
data/lib/bson/ext_json.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2019 MongoDB Inc.
|
1
|
+
# Copyright (C) 2019-2020 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -251,12 +251,13 @@ module BSON
|
|
251
251
|
when '$date'
|
252
252
|
case value
|
253
253
|
when String
|
254
|
-
::Time.parse(value)
|
254
|
+
::Time.parse(value).utc
|
255
255
|
when Hash
|
256
256
|
unless value.keys.sort == %w($numberLong)
|
257
257
|
raise Error::ExtJSONParseError, "Invalid value for $date: #{value}"
|
258
258
|
end
|
259
|
-
|
259
|
+
sec, msec = value.values.first.to_i.divmod(1000)
|
260
|
+
::Time.at(sec, msec*1000).utc
|
260
261
|
else
|
261
262
|
raise Error::ExtJSONParseError, "Invalid value for $date: #{value}"
|
262
263
|
end
|
data/lib/bson/false_class.rb
CHANGED
data/lib/bson/float.rb
CHANGED
data/lib/bson/hash.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2009-
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -108,13 +108,24 @@ module BSON
|
|
108
108
|
buffer.get_hash(**options)
|
109
109
|
else
|
110
110
|
hash = Document.allocate
|
111
|
-
|
111
|
+
start_position = buffer.read_position
|
112
|
+
expected_byte_size = buffer.get_int32
|
112
113
|
while (type = buffer.get_byte) != NULL_BYTE
|
113
114
|
field = buffer.get_cstring
|
114
115
|
cls = BSON::Registry.get(type, field)
|
115
|
-
value =
|
116
|
+
value = if options.empty?
|
117
|
+
# Compatibility with the older Ruby driver versions which define
|
118
|
+
# a DBRef class with from_bson accepting a single argument.
|
119
|
+
cls.from_bson(buffer)
|
120
|
+
else
|
121
|
+
cls.from_bson(buffer, **options)
|
122
|
+
end
|
116
123
|
hash.store(field, value)
|
117
124
|
end
|
125
|
+
actual_byte_size = buffer.read_position - start_position
|
126
|
+
if actual_byte_size != expected_byte_size
|
127
|
+
raise Error::BSONDecodeError, "Expected hash to take #{expected_byte_size} bytes but it took #{actual_byte_size} bytes"
|
128
|
+
end
|
118
129
|
hash
|
119
130
|
end
|
120
131
|
end
|
data/lib/bson/int32.rb
CHANGED
data/lib/bson/int64.rb
CHANGED
data/lib/bson/integer.rb
CHANGED
data/lib/bson/json.rb
CHANGED
data/lib/bson/max_key.rb
CHANGED
data/lib/bson/min_key.rb
CHANGED
data/lib/bson/nil_class.rb
CHANGED
data/lib/bson/object.rb
CHANGED
data/lib/bson/object_id.rb
CHANGED
data/lib/bson/open_struct.rb
CHANGED
data/lib/bson/regexp.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2009-
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -165,7 +165,13 @@ module BSON
|
|
165
165
|
#
|
166
166
|
# @since 3.1.0
|
167
167
|
def respond_to?(method, include_private = false)
|
168
|
-
|
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.
|
data/lib/bson/registry.rb
CHANGED
data/lib/bson/specialized.rb
CHANGED
data/lib/bson/string.rb
CHANGED
data/lib/bson/symbol.rb
CHANGED
data/lib/bson/time.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# Copyright (C) 2009-
|
1
|
+
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
2
|
#
|
3
3
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
4
4
|
# you may not use this file except in compliance with the License.
|
@@ -17,6 +17,20 @@ module BSON
|
|
17
17
|
# Injects behaviour for encoding and decoding time values to
|
18
18
|
# and from raw bytes as specified by the BSON spec.
|
19
19
|
#
|
20
|
+
# @note
|
21
|
+
# Ruby time can have nanosecond precision:
|
22
|
+
# +Time.utc(2020, 1, 1, 0, 0, 0, 999_999_999/1000r)+
|
23
|
+
# +Time#usec+ returns the number of microseconds in the time, and
|
24
|
+
# if the time has nanosecond precision the sub-microsecond part is
|
25
|
+
# truncated (the value is floored to the nearest millisecond).
|
26
|
+
# MongoDB only supports millisecond precision; we truncate the
|
27
|
+
# sub-millisecond part of microseconds (floor to the nearest millisecond).
|
28
|
+
# Note that if a time is constructed from a floating point value,
|
29
|
+
# the microsecond value may round to the starting floating point value
|
30
|
+
# but due to flooring, the time after serialization may end up to
|
31
|
+
# be different than the starting floating point value.
|
32
|
+
# It is recommended that time calculations use integer math only.
|
33
|
+
#
|
20
34
|
# @see http://bsonspec.org/#/specification
|
21
35
|
#
|
22
36
|
# @since 2.0.0
|
@@ -29,6 +43,8 @@ module BSON
|
|
29
43
|
|
30
44
|
# Get the time as encoded BSON.
|
31
45
|
#
|
46
|
+
# @note The time is floored to the nearest millisecond.
|
47
|
+
#
|
32
48
|
# @example Get the time as encoded BSON.
|
33
49
|
# Time.new(2012, 1, 1, 0, 0, 0).to_bson
|
34
50
|
#
|
@@ -38,15 +54,15 @@ module BSON
|
|
38
54
|
#
|
39
55
|
# @since 2.0.0
|
40
56
|
def to_bson(buffer = ByteBuffer.new, validating_keys = Config.validating_keys?)
|
41
|
-
|
42
|
-
|
43
|
-
# Turns out, usec returned incorrect value - 999 for 1 millisecond.
|
44
|
-
buffer.put_int64((to_f * 1000).round)
|
57
|
+
value = _bson_to_i * 1000 + usec.divmod(1000).first
|
58
|
+
buffer.put_int64(value)
|
45
59
|
end
|
46
60
|
|
47
61
|
# Converts this object to a representation directly serializable to
|
48
62
|
# Extended JSON (https://github.com/mongodb/specifications/blob/master/source/extended-json.rst).
|
49
63
|
#
|
64
|
+
# @note The time is floored to the nearest millisecond.
|
65
|
+
#
|
50
66
|
# @option options [ true | false ] :relaxed Whether to produce relaxed
|
51
67
|
# extended JSON representation.
|
52
68
|
#
|
@@ -55,12 +71,30 @@ module BSON
|
|
55
71
|
utc_time = utc
|
56
72
|
if options[:mode] == :relaxed && (1970..9999).include?(utc_time.year)
|
57
73
|
if utc_time.usec != 0
|
74
|
+
if utc_time.respond_to?(:floor)
|
75
|
+
# Ruby 2.7+
|
76
|
+
utc_time = utc_time.floor(3)
|
77
|
+
else
|
78
|
+
utc_time -= utc_time.usec.divmod(1000).last.to_r / 1000000
|
79
|
+
end
|
58
80
|
{'$date' => utc_time.strftime('%Y-%m-%dT%H:%M:%S.%LZ')}
|
59
81
|
else
|
60
82
|
{'$date' => utc_time.strftime('%Y-%m-%dT%H:%M:%SZ')}
|
61
83
|
end
|
62
84
|
else
|
63
|
-
|
85
|
+
sec = utc_time._bson_to_i
|
86
|
+
msec = utc_time.usec.divmod(1000).first
|
87
|
+
{'$date' => {'$numberLong' => (sec * 1000 + msec).to_s}}
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def _bson_to_i
|
92
|
+
# Workaround for JRuby's #to_i rounding negative timestamps up
|
93
|
+
# rather than down (https://github.com/jruby/jruby/issues/6104)
|
94
|
+
if BSON::Environment.jruby?
|
95
|
+
(self - usec.to_r/1000000).to_i
|
96
|
+
else
|
97
|
+
to_i
|
64
98
|
end
|
65
99
|
end
|
66
100
|
|