bson 4.12.0-java → 4.14.1-java
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/README.md +4 -7
- data/lib/bson/active_support.rb +1 -0
- data/lib/bson/array.rb +2 -1
- data/lib/bson/big_decimal.rb +67 -0
- data/lib/bson/binary.rb +5 -3
- data/lib/bson/boolean.rb +2 -1
- data/lib/bson/code.rb +2 -1
- data/lib/bson/code_with_scope.rb +2 -1
- data/lib/bson/config.rb +1 -0
- data/lib/bson/date.rb +1 -0
- data/lib/bson/date_time.rb +1 -0
- data/lib/bson/db_pointer.rb +2 -1
- data/lib/bson/dbref.rb +152 -0
- data/lib/bson/decimal128/builder.rb +27 -20
- data/lib/bson/decimal128.rb +27 -12
- data/lib/bson/document.rb +18 -0
- data/lib/bson/environment.rb +1 -0
- data/lib/bson/error.rb +7 -0
- data/lib/bson/ext_json.rb +16 -11
- data/lib/bson/false_class.rb +2 -1
- data/lib/bson/float.rb +21 -32
- data/lib/bson/hash.rb +15 -6
- data/lib/bson/int32.rb +3 -2
- data/lib/bson/int64.rb +3 -2
- data/lib/bson/integer.rb +3 -2
- data/lib/bson/json.rb +1 -0
- data/lib/bson/max_key.rb +3 -2
- data/lib/bson/min_key.rb +3 -2
- data/lib/bson/nil_class.rb +2 -1
- data/lib/bson/object.rb +1 -0
- data/lib/bson/object_id.rb +4 -3
- data/lib/bson/open_struct.rb +1 -0
- data/lib/bson/regexp.rb +17 -6
- data/lib/bson/registry.rb +1 -0
- data/lib/bson/specialized.rb +1 -0
- data/lib/bson/string.rb +3 -2
- data/lib/bson/symbol.rb +2 -1
- data/lib/bson/time.rb +4 -3
- data/lib/bson/time_with_zone.rb +1 -0
- data/lib/bson/timestamp.rb +3 -2
- data/lib/bson/true_class.rb +2 -1
- data/lib/bson/undefined.rb +2 -1
- data/lib/bson/version.rb +2 -1
- data/lib/bson-ruby.jar +0 -0
- data/lib/bson.rb +8 -5
- data/spec/README.md +14 -0
- data/spec/bson/big_decimal_spec.rb +316 -0
- data/spec/bson/dbref_legacy_spec.rb +169 -0
- data/spec/bson/dbref_spec.rb +487 -0
- data/spec/bson/decimal128_spec.rb +16 -0
- data/spec/bson/document_as_spec.rb +46 -0
- data/spec/bson/document_spec.rb +7 -1
- data/spec/bson/ext_json_parse_spec.rb +37 -0
- data/spec/bson/hash_as_spec.rb +57 -0
- data/spec/bson/hash_spec.rb +32 -0
- data/spec/bson/int64_spec.rb +4 -24
- data/spec/bson/raw_spec.rb +7 -1
- data/spec/bson/regexp_spec.rb +52 -0
- data/spec/runners/common_driver.rb +1 -1
- data/spec/shared/LICENSE +20 -0
- data/spec/shared/bin/get-mongodb-download-url +17 -0
- data/spec/shared/bin/s3-copy +45 -0
- data/spec/shared/bin/s3-upload +69 -0
- data/spec/shared/lib/mrss/child_process_helper.rb +80 -0
- data/spec/shared/lib/mrss/cluster_config.rb +231 -0
- data/spec/shared/lib/mrss/constraints.rb +386 -0
- data/spec/shared/lib/mrss/docker_runner.rb +271 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +200 -0
- data/spec/shared/lib/mrss/lite_constraints.rb +191 -0
- data/spec/shared/lib/mrss/server_version_registry.rb +120 -0
- data/spec/shared/lib/mrss/spec_organizer.rb +179 -0
- data/spec/shared/lib/mrss/utils.rb +15 -0
- data/spec/shared/share/Dockerfile.erb +338 -0
- data/spec/shared/share/haproxy-1.conf +16 -0
- data/spec/shared/share/haproxy-2.conf +17 -0
- data/spec/shared/shlib/distro.sh +74 -0
- data/spec/shared/shlib/server.sh +367 -0
- data/spec/shared/shlib/set_env.sh +131 -0
- data/spec/spec_helper.rb +20 -0
- data/spec/spec_tests/common_driver_spec.rb +2 -1
- data/spec/spec_tests/data/corpus/binary.json +18 -1
- data/spec/spec_tests/data/corpus/dbref.json +21 -1
- data/spec/spec_tests/data/corpus/document.json +4 -0
- data/spec/spec_tests/data/corpus/regex.json +2 -2
- data/spec/spec_tests/data/corpus/top.json +20 -9
- data.tar.gz.sig +0 -0
- metadata +141 -89
- metadata.gz.sig +0 -0
data/lib/bson/document.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -315,6 +316,23 @@ module BSON
|
|
315
316
|
copy
|
316
317
|
end
|
317
318
|
|
319
|
+
def symbolize_keys!
|
320
|
+
raise ArgumentError, 'symbolize_keys! is not supported on BSON::Document instances. Please convert the document to hash first (using #to_h), then call #symbolize_keys! on the Hash instance'
|
321
|
+
end
|
322
|
+
|
323
|
+
# Override the Hash implementation of to_bson_normalized_value.
|
324
|
+
#
|
325
|
+
# BSON::Document is already of the correct type and already provides
|
326
|
+
# indifferent access to keys, hence no further conversions are necessary.
|
327
|
+
#
|
328
|
+
# Attempting to perform Hash's conversion on Document instances converts
|
329
|
+
# DBRefs to Documents which is wrong.
|
330
|
+
#
|
331
|
+
# @return [ BSON::Document ] The normalized hash.
|
332
|
+
def to_bson_normalized_value
|
333
|
+
self
|
334
|
+
end
|
335
|
+
|
318
336
|
private
|
319
337
|
|
320
338
|
def convert_key(key)
|
data/lib/bson/environment.rb
CHANGED
data/lib/bson/error.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
module BSON
|
2
3
|
# Base exception class for all BSON-related errors.
|
3
4
|
#
|
@@ -23,5 +24,11 @@ module BSON
|
|
23
24
|
# itself to BSON.
|
24
25
|
class UnserializableClass < Error
|
25
26
|
end
|
27
|
+
|
28
|
+
# Exception raised when there is an invalid argument passed into the
|
29
|
+
# constructor of regexp object. This includes when the argument contains
|
30
|
+
# a null byte.
|
31
|
+
class InvalidRegexpPattern < Error
|
32
|
+
end
|
26
33
|
end
|
27
34
|
end
|
data/lib/bson/ext_json.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2019-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -138,7 +139,7 @@ module BSON
|
|
138
139
|
return {}
|
139
140
|
end
|
140
141
|
|
141
|
-
if
|
142
|
+
if dbref?(hash)
|
142
143
|
# Legacy dbref handling.
|
143
144
|
# Note that according to extended json spec, only hash values (but
|
144
145
|
# not the top-level BSON document itself) may be of type "dbref".
|
@@ -147,10 +148,6 @@ module BSON
|
|
147
148
|
# logic to top level hashes doesn't cause harm.
|
148
149
|
hash = hash.dup
|
149
150
|
ref = hash.delete('$ref')
|
150
|
-
# $ref can be a string value or an ObjectId
|
151
|
-
unless ref.is_a?(String)
|
152
|
-
raise Error::ExtJSONParseError, "Invalid $ref value: #{ref}"
|
153
|
-
end
|
154
151
|
# $id, if present, can be anything
|
155
152
|
id = hash.delete('$id')
|
156
153
|
if id.is_a?(Hash)
|
@@ -163,13 +160,9 @@ module BSON
|
|
163
160
|
out = {'$ref' => ref, '$id' => id}
|
164
161
|
if hash.key?('$db')
|
165
162
|
# $db must always be a string, if provided
|
166
|
-
db = hash.delete('$db')
|
167
|
-
unless db.is_a?(String)
|
168
|
-
raise Error::ExtJSONParseError, "Invalid $db value: #{db}"
|
169
|
-
end
|
170
|
-
out['$db'] = db
|
163
|
+
out['$db'] = hash.delete('$db')
|
171
164
|
end
|
172
|
-
return out.update(hash)
|
165
|
+
return out.update(parse_hash(hash))
|
173
166
|
end
|
174
167
|
|
175
168
|
if hash.length == 1
|
@@ -362,6 +355,9 @@ module BSON
|
|
362
355
|
|
363
356
|
module_function def map_hash(hash, **options)
|
364
357
|
::Hash[hash.map do |key, value|
|
358
|
+
if (key.is_a?(String) || key.is_a?(Symbol)) && key.to_s.include?(NULL_BYTE)
|
359
|
+
raise Error::ExtJSONParseError, "Hash key cannot contain a null byte: #{key}"
|
360
|
+
end
|
365
361
|
[key, parse_obj(value, **options)]
|
366
362
|
end]
|
367
363
|
end
|
@@ -379,5 +375,14 @@ module BSON
|
|
379
375
|
module_function def create_regexp(pattern, options)
|
380
376
|
Regexp::Raw.new(pattern, options)
|
381
377
|
end
|
378
|
+
|
379
|
+
module_function def dbref?(hash)
|
380
|
+
if db = hash.key?('$db')
|
381
|
+
unless db.is_a?(String)
|
382
|
+
return false
|
383
|
+
end
|
384
|
+
end
|
385
|
+
return hash['$ref']&.is_a?(String) && hash.key?('$id')
|
386
|
+
end
|
382
387
|
end
|
383
388
|
end
|
data/lib/bson/false_class.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -25,7 +26,7 @@ module BSON
|
|
25
26
|
# A false value in the BSON spec is 0x00.
|
26
27
|
#
|
27
28
|
# @since 2.0.0
|
28
|
-
FALSE_BYTE = 0.chr
|
29
|
+
FALSE_BYTE = String.new(0.chr, encoding: BINARY).freeze
|
29
30
|
|
30
31
|
# The BSON type for false values is the general boolean type of 0x08.
|
31
32
|
#
|
data/lib/bson/float.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -15,7 +16,7 @@
|
|
15
16
|
module BSON
|
16
17
|
|
17
18
|
# Injects behaviour for encoding and decoding floating point values
|
18
|
-
# to and from
|
19
|
+
# to and from raw bytes as specified by the BSON spec.
|
19
20
|
#
|
20
21
|
# @see http://bsonspec.org/#/specification
|
21
22
|
#
|
@@ -25,12 +26,12 @@ module BSON
|
|
25
26
|
# A floating point is type 0x01 in the BSON spec.
|
26
27
|
#
|
27
28
|
# @since 2.0.0
|
28
|
-
BSON_TYPE = 1.chr
|
29
|
+
BSON_TYPE = ::String.new(1.chr, encoding: BINARY).freeze
|
29
30
|
|
30
31
|
# The pack directive is for 8 byte floating points.
|
31
32
|
#
|
32
33
|
# @since 2.0.0
|
33
|
-
PACK = "E"
|
34
|
+
PACK = "E"
|
34
35
|
|
35
36
|
# Get the floating point as encoded BSON.
|
36
37
|
#
|
@@ -57,36 +58,24 @@ module BSON
|
|
57
58
|
#
|
58
59
|
# @return [ Hash | Float ] The extended json representation.
|
59
60
|
def as_extended_json(**options)
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
61
|
+
if infinite? == 1
|
62
|
+
{ '$numberDouble' => 'Infinity' }
|
63
|
+
elsif infinite? == -1
|
64
|
+
{ '$numberDouble' => '-Infinity' }
|
65
|
+
elsif nan?
|
66
|
+
{ '$numberDouble' => 'NaN' }
|
67
|
+
elsif options[:mode] == :relaxed || options[:mode] == :legacy
|
68
|
+
self
|
69
|
+
elsif BSON::Environment.jruby? && abs > 1e15
|
70
|
+
# Hack to make bson corpus spec tests pass.
|
71
|
+
# JRuby serializes -1.2345678901234568e+18 as
|
72
|
+
# -1234567890123456770.0, which is valid but differs from MRI
|
73
|
+
# serialization. Extended JSON spec does not define precise
|
74
|
+
# stringification of floats.
|
75
|
+
# https://jira.mongodb.org/browse/SPEC-1536
|
76
|
+
{ '$numberDouble' => ('%.17g' % to_s).upcase }
|
65
77
|
else
|
66
|
-
|
67
|
-
{'$numberDouble' => 'NaN'}
|
68
|
-
else
|
69
|
-
if options[:mode] == :relaxed || options[:mode] == :legacy
|
70
|
-
self
|
71
|
-
else
|
72
|
-
value = if BSON::Environment.jruby?
|
73
|
-
# Hack to make bson corpus spec tests pass.
|
74
|
-
# JRuby serializes -1.2345678901234568e+18 as
|
75
|
-
# -1234567890123456770.0, which is valid but differs from MRI
|
76
|
-
# serialization. Extended JSON spec does not define precise
|
77
|
-
# stringification of floats.
|
78
|
-
# https://jira.mongodb.org/browse/SPEC-1536
|
79
|
-
if abs > 1e15
|
80
|
-
'%.17g' % to_s
|
81
|
-
else
|
82
|
-
to_s
|
83
|
-
end
|
84
|
-
else
|
85
|
-
to_s
|
86
|
-
end
|
87
|
-
{'$numberDouble' => value.upcase}
|
88
|
-
end
|
89
|
-
end
|
78
|
+
{ '$numberDouble' => to_s.upcase }
|
90
79
|
end
|
91
80
|
end
|
92
81
|
|
data/lib/bson/hash.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -25,7 +26,7 @@ module BSON
|
|
25
26
|
# A hash, also called an embedded document, is type 0x03 in the BSON spec.
|
26
27
|
#
|
27
28
|
# @since 2.0.0
|
28
|
-
BSON_TYPE = 3.chr
|
29
|
+
BSON_TYPE = ::String.new(3.chr, encoding: BINARY).freeze
|
29
30
|
|
30
31
|
# Get the hash as encoded BSON.
|
31
32
|
#
|
@@ -70,7 +71,7 @@ module BSON
|
|
70
71
|
# @example Convert the hash to a normalized value.
|
71
72
|
# hash.to_bson_normalized_value
|
72
73
|
#
|
73
|
-
# @return [ BSON::Document ] The
|
74
|
+
# @return [ BSON::Document ] The normalized hash.
|
74
75
|
#
|
75
76
|
# @since 3.0.0
|
76
77
|
def to_bson_normalized_value
|
@@ -88,9 +89,7 @@ module BSON
|
|
88
89
|
#
|
89
90
|
# @return [ Hash ] This hash converted to extended json representation.
|
90
91
|
def as_extended_json(**options)
|
91
|
-
|
92
|
-
[key, value.as_extended_json(**options)]
|
93
|
-
end]
|
92
|
+
transform_values { |value| value.as_extended_json(**options) }
|
94
93
|
end
|
95
94
|
|
96
95
|
module ClassMethods
|
@@ -101,7 +100,7 @@ module BSON
|
|
101
100
|
#
|
102
101
|
# @option options [ nil | :bson ] :mode Decoding mode to use.
|
103
102
|
#
|
104
|
-
# @return [
|
103
|
+
# @return [ Hash ] The decoded hash.
|
105
104
|
#
|
106
105
|
# @see http://bsonspec.org/#/specification
|
107
106
|
#
|
@@ -129,6 +128,16 @@ module BSON
|
|
129
128
|
if actual_byte_size != expected_byte_size
|
130
129
|
raise Error::BSONDecodeError, "Expected hash to take #{expected_byte_size} bytes but it took #{actual_byte_size} bytes"
|
131
130
|
end
|
131
|
+
|
132
|
+
if hash['$ref'] && hash['$id']
|
133
|
+
# We're doing implicit decoding here. If the document is an invalid
|
134
|
+
# dbref, we should decode it as a BSON::Document.
|
135
|
+
begin
|
136
|
+
hash = DBRef.new(hash)
|
137
|
+
rescue ArgumentError
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
132
141
|
hash
|
133
142
|
end
|
134
143
|
end
|
data/lib/bson/int32.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -24,7 +25,7 @@ module BSON
|
|
24
25
|
# A boolean is type 0x08 in the BSON spec.
|
25
26
|
#
|
26
27
|
# @since 2.0.0
|
27
|
-
BSON_TYPE = 16.chr
|
28
|
+
BSON_TYPE = ::String.new(16.chr, encoding: BINARY).freeze
|
28
29
|
|
29
30
|
# The number of bytes constant.
|
30
31
|
#
|
@@ -34,7 +35,7 @@ module BSON
|
|
34
35
|
# Constant for the int 32 pack directive.
|
35
36
|
#
|
36
37
|
# @since 2.0.0
|
37
|
-
PACK = "l<"
|
38
|
+
PACK = "l<"
|
38
39
|
|
39
40
|
# Deserialize an Integer from BSON.
|
40
41
|
#
|
data/lib/bson/int64.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -24,12 +25,12 @@ module BSON
|
|
24
25
|
# A boolean is type 0x08 in the BSON spec.
|
25
26
|
#
|
26
27
|
# @since 2.0.0
|
27
|
-
BSON_TYPE = 18.chr
|
28
|
+
BSON_TYPE = ::String.new(18.chr, encoding: BINARY).freeze
|
28
29
|
|
29
30
|
# Constant for the int 64 pack directive.
|
30
31
|
#
|
31
32
|
# @since 2.0.0
|
32
|
-
PACK = "q<"
|
33
|
+
PACK = "q<"
|
33
34
|
|
34
35
|
# Deserialize an Integer from BSON.
|
35
36
|
#
|
data/lib/bson/integer.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -45,13 +46,13 @@ module BSON
|
|
45
46
|
# The BSON index size.
|
46
47
|
#
|
47
48
|
# @since 2.0.0
|
48
|
-
BSON_INDEX_SIZE = 1024
|
49
|
+
BSON_INDEX_SIZE = 1024
|
49
50
|
|
50
51
|
# A hash of index values for array optimization.
|
51
52
|
#
|
52
53
|
# @since 2.0.0
|
53
54
|
BSON_ARRAY_INDEXES = ::Array.new(BSON_INDEX_SIZE) do |i|
|
54
|
-
(i.to_s.
|
55
|
+
(i.to_s.b << NULL_BYTE).freeze
|
55
56
|
end.freeze
|
56
57
|
|
57
58
|
# Is this integer a valid BSON 32 bit value?
|
data/lib/bson/json.rb
CHANGED
data/lib/bson/max_key.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -28,12 +29,12 @@ module BSON
|
|
28
29
|
# A $maxKey is type 0x7F in the BSON spec.
|
29
30
|
#
|
30
31
|
# @since 2.0.0
|
31
|
-
BSON_TYPE = 127.chr
|
32
|
+
BSON_TYPE = ::String.new(127.chr, encoding: BINARY).freeze
|
32
33
|
|
33
34
|
# Constant for always evaluating greater in a comparison.
|
34
35
|
#
|
35
36
|
# @since 2.0.0
|
36
|
-
GREATER = 1
|
37
|
+
GREATER = 1
|
37
38
|
|
38
39
|
# When comparing a max key with any other object, the max key will always
|
39
40
|
# be greater.
|
data/lib/bson/min_key.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -28,12 +29,12 @@ module BSON
|
|
28
29
|
# A $minKey is type 0xFF in the BSON spec.
|
29
30
|
#
|
30
31
|
# @since 2.0.0
|
31
|
-
BSON_TYPE = 255.chr
|
32
|
+
BSON_TYPE = ::String.new(255.chr, encoding: BINARY).freeze
|
32
33
|
|
33
34
|
# Constant for always evaluating lesser in a comparison.
|
34
35
|
#
|
35
36
|
# @since 2.0.0
|
36
|
-
LESSER = -1
|
37
|
+
LESSER = -1
|
37
38
|
|
38
39
|
# When comparing a min key with any other object, the min key will always
|
39
40
|
# be lesser.
|
data/lib/bson/nil_class.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -26,7 +27,7 @@ module BSON
|
|
26
27
|
# A nil is type 0x0A in the BSON spec.
|
27
28
|
#
|
28
29
|
# @since 2.0.0
|
29
|
-
BSON_TYPE = 10.chr
|
30
|
+
BSON_TYPE = ::String.new(10.chr, encoding: BINARY).freeze
|
30
31
|
|
31
32
|
module ClassMethods
|
32
33
|
|
data/lib/bson/object.rb
CHANGED
data/lib/bson/object_id.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -30,7 +31,7 @@ module BSON
|
|
30
31
|
# A object_id is type 0x07 in the BSON spec.
|
31
32
|
#
|
32
33
|
# @since 2.0.0
|
33
|
-
BSON_TYPE = 7.chr
|
34
|
+
BSON_TYPE = ::String.new(7.chr, encoding: BINARY).freeze
|
34
35
|
|
35
36
|
# Check equality of the object id with another object.
|
36
37
|
#
|
@@ -112,7 +113,7 @@ module BSON
|
|
112
113
|
#
|
113
114
|
# @since 2.0.0
|
114
115
|
def generation_time
|
115
|
-
::Time.at(generate_data.
|
116
|
+
::Time.at(generate_data.unpack1("N")).utc
|
116
117
|
end
|
117
118
|
alias :to_time :generation_time
|
118
119
|
|
@@ -352,7 +353,7 @@ module BSON
|
|
352
353
|
# @since 2.0.0
|
353
354
|
def initialize
|
354
355
|
@counter = rand(0x1000000)
|
355
|
-
@machine_id = Digest::MD5.digest(Socket.gethostname).
|
356
|
+
@machine_id = Digest::MD5.digest(Socket.gethostname).unpack1("N")
|
356
357
|
@mutex = Mutex.new
|
357
358
|
end
|
358
359
|
|
data/lib/bson/open_struct.rb
CHANGED
data/lib/bson/regexp.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -26,34 +27,34 @@ module BSON
|
|
26
27
|
# A regular expression is type 0x0B in the BSON spec.
|
27
28
|
#
|
28
29
|
# @since 2.0.0
|
29
|
-
BSON_TYPE = 11.chr
|
30
|
+
BSON_TYPE = ::String.new(11.chr, encoding: BINARY).freeze
|
30
31
|
|
31
32
|
# Extended value constant.
|
32
33
|
#
|
33
34
|
# @since 3.2.6
|
34
|
-
EXTENDED_VALUE = 'x'
|
35
|
+
EXTENDED_VALUE = 'x'
|
35
36
|
|
36
37
|
# Ignore case constant.
|
37
38
|
#
|
38
39
|
# @since 3.2.6
|
39
|
-
IGNORECASE_VALUE = 'i'
|
40
|
+
IGNORECASE_VALUE = 'i'
|
40
41
|
|
41
42
|
# Multiline constant.
|
42
43
|
#
|
43
44
|
# @since 3.2.6
|
44
|
-
MULTILINE_VALUE = 'm'
|
45
|
+
MULTILINE_VALUE = 'm'
|
45
46
|
|
46
47
|
# Newline constant.
|
47
48
|
#
|
48
49
|
# @since 3.2.6
|
49
|
-
NEWLINE_VALUE = 's'
|
50
|
+
NEWLINE_VALUE = 's'
|
50
51
|
|
51
52
|
# Ruby multiline constant.
|
52
53
|
#
|
53
54
|
# @since 3.2.6
|
54
55
|
#
|
55
56
|
# @deprecated Will be removed in 5.0
|
56
|
-
RUBY_MULTILINE_VALUE = 'ms'
|
57
|
+
RUBY_MULTILINE_VALUE = 'ms'
|
57
58
|
|
58
59
|
# Get the regexp as JSON hash data.
|
59
60
|
#
|
@@ -154,6 +155,16 @@ module BSON
|
|
154
155
|
#
|
155
156
|
# @since 3.0.0
|
156
157
|
def initialize(pattern, options = '')
|
158
|
+
if pattern.include?(NULL_BYTE)
|
159
|
+
raise Error::InvalidRegexpPattern, "Regexp pattern cannot contain a null byte: #{pattern}"
|
160
|
+
elsif options.is_a?(String) || options.is_a?(Symbol)
|
161
|
+
if options.to_s.include?(NULL_BYTE)
|
162
|
+
raise Error::InvalidRegexpPattern, "Regexp options cannot contain a null byte: #{options}"
|
163
|
+
end
|
164
|
+
elsif !options.is_a?(Integer)
|
165
|
+
raise ArgumentError, "Regexp options must be a String, Symbol, or Integer"
|
166
|
+
end
|
167
|
+
|
157
168
|
@pattern = pattern
|
158
169
|
@options = options
|
159
170
|
end
|
data/lib/bson/registry.rb
CHANGED
data/lib/bson/specialized.rb
CHANGED
data/lib/bson/string.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# -*- coding: utf-8 -*-
|
2
|
+
# frozen_string_literal: true
|
2
3
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
3
4
|
#
|
4
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -26,12 +27,12 @@ module BSON
|
|
26
27
|
# A string is type 0x02 in the BSON spec.
|
27
28
|
#
|
28
29
|
# @since 2.0.0
|
29
|
-
BSON_TYPE = 2.chr
|
30
|
+
BSON_TYPE = ::String.new(2.chr, encoding: BINARY).freeze
|
30
31
|
|
31
32
|
# Regex for matching illegal BSON keys.
|
32
33
|
#
|
33
34
|
# @since 4.1.0
|
34
|
-
ILLEGAL_KEY = /(\A[$])|(\.)
|
35
|
+
ILLEGAL_KEY = /(\A[$])|(\.)/
|
35
36
|
|
36
37
|
# Get the string as encoded BSON.
|
37
38
|
#
|
data/lib/bson/symbol.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -28,7 +29,7 @@ module BSON
|
|
28
29
|
# A symbol is type 0x0E in the BSON spec.
|
29
30
|
#
|
30
31
|
# @since 2.0.0
|
31
|
-
BSON_TYPE = 14.chr
|
32
|
+
BSON_TYPE = ::String.new(14.chr, encoding: BINARY).freeze
|
32
33
|
|
33
34
|
# Symbols are serialized as strings as symbols are now removed from the
|
34
35
|
# BSON specification. Therefore the bson_type when serializing must be a
|
data/lib/bson/time.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -39,7 +40,7 @@ module BSON
|
|
39
40
|
# A time is type 0x09 in the BSON spec.
|
40
41
|
#
|
41
42
|
# @since 2.0.0
|
42
|
-
BSON_TYPE = 9.chr
|
43
|
+
BSON_TYPE = ::String.new(9.chr, encoding: BINARY).freeze
|
43
44
|
|
44
45
|
# Get the time as encoded BSON.
|
45
46
|
#
|
@@ -63,8 +64,8 @@ module BSON
|
|
63
64
|
#
|
64
65
|
# @note The time is floored to the nearest millisecond.
|
65
66
|
#
|
66
|
-
# @option
|
67
|
-
# extended JSON
|
67
|
+
# @option opts [ nil | :relaxed | :legacy ] :mode Serialization mode
|
68
|
+
# (default is canonical extended JSON)
|
68
69
|
#
|
69
70
|
# @return [ Hash ] The extended json representation.
|
70
71
|
def as_extended_json(**options)
|
data/lib/bson/time_with_zone.rb
CHANGED
data/lib/bson/timestamp.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -26,12 +27,12 @@ module BSON
|
|
26
27
|
# A timestamp is type 0x11 in the BSON spec.
|
27
28
|
#
|
28
29
|
# @since 2.0.0
|
29
|
-
BSON_TYPE = 17.chr
|
30
|
+
BSON_TYPE = ::String.new(17.chr, encoding: BINARY).freeze
|
30
31
|
|
31
32
|
# Error message if an object other than a Timestamp is compared with this object.
|
32
33
|
#
|
33
34
|
# @since 4.3.0
|
34
|
-
COMPARISON_ERROR_MESSAGE = 'comparison of %s with Timestamp failed'
|
35
|
+
COMPARISON_ERROR_MESSAGE = 'comparison of %s with Timestamp failed'
|
35
36
|
|
36
37
|
# @!attribute seconds
|
37
38
|
# @return [ Integer ] The number of seconds.
|
data/lib/bson/true_class.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -25,7 +26,7 @@ module BSON
|
|
25
26
|
# A true value in the BSON spec is 0x01.
|
26
27
|
#
|
27
28
|
# @since 2.0.0
|
28
|
-
TRUE_BYTE = 1.chr
|
29
|
+
TRUE_BYTE = ::String.new(1.chr, encoding: BINARY).freeze
|
29
30
|
|
30
31
|
# The BSON type for true values is the general boolean type of 0x08.
|
31
32
|
#
|
data/lib/bson/undefined.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -25,7 +26,7 @@ module BSON
|
|
25
26
|
# Undefined is type 0x06 in the BSON spec.
|
26
27
|
#
|
27
28
|
# @since 2.0.0
|
28
|
-
BSON_TYPE = 6.chr
|
29
|
+
BSON_TYPE = ::String.new(6.chr, encoding: BINARY).freeze
|
29
30
|
|
30
31
|
# Determine if undefined is equal to another object.
|
31
32
|
#
|
data/lib/bson/version.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
# Copyright (C) 2009-2020 MongoDB Inc.
|
2
3
|
#
|
3
4
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -13,5 +14,5 @@
|
|
13
14
|
# limitations under the License.
|
14
15
|
|
15
16
|
module BSON
|
16
|
-
VERSION = "4.
|
17
|
+
VERSION = "4.14.1"
|
17
18
|
end
|
data/lib/bson-ruby.jar
CHANGED
Binary file
|