bson 4.14.1-java → 5.0.0-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/README.md +4 -4
- data/Rakefile +5 -0
- data/lib/bson/active_support.rb +1 -0
- data/lib/bson/array.rb +57 -31
- data/lib/bson/big_decimal.rb +16 -6
- data/lib/bson/binary.rb +255 -128
- data/lib/bson/boolean.rb +1 -0
- data/lib/bson/code.rb +9 -11
- data/lib/bson/code_with_scope.rb +8 -10
- data/lib/bson/config.rb +1 -27
- data/lib/bson/date.rb +2 -1
- data/lib/bson/date_time.rb +2 -1
- data/lib/bson/db_pointer.rb +11 -12
- data/lib/bson/dbref.rb +11 -9
- data/lib/bson/decimal128/builder.rb +9 -8
- data/lib/bson/decimal128.rb +33 -109
- data/lib/bson/document.rb +1 -0
- data/lib/bson/environment.rb +1 -0
- data/lib/bson/error/bson_decode_error.rb +11 -0
- data/lib/bson/error/ext_json_parse_error.rb +11 -0
- data/lib/bson/error/illegal_key.rb +23 -0
- data/lib/bson/error/invalid_binary_type.rb +37 -0
- data/lib/bson/error/invalid_dbref_argument.rb +12 -0
- data/lib/bson/error/invalid_decimal128_argument.rb +25 -0
- data/lib/bson/error/invalid_decimal128_range.rb +27 -0
- data/lib/bson/error/invalid_decimal128_string.rb +26 -0
- data/lib/bson/error/invalid_key.rb +24 -0
- data/lib/bson/error/invalid_object_id.rb +11 -0
- data/lib/bson/error/invalid_regexp_pattern.rb +13 -0
- data/lib/bson/error/unrepresentable_precision.rb +19 -0
- data/lib/bson/error/unserializable_class.rb +13 -0
- data/lib/bson/error/unsupported_binary_subtype.rb +12 -0
- data/lib/bson/error/unsupported_type.rb +11 -0
- data/lib/bson/error.rb +16 -28
- data/lib/bson/ext_json.rb +1 -0
- data/lib/bson/false_class.rb +2 -1
- data/lib/bson/float.rb +2 -1
- data/lib/bson/hash.rb +127 -72
- data/lib/bson/int32.rb +16 -4
- data/lib/bson/int64.rb +16 -4
- data/lib/bson/integer.rb +3 -4
- data/lib/bson/json.rb +1 -0
- data/lib/bson/max_key.rb +7 -9
- data/lib/bson/min_key.rb +7 -9
- data/lib/bson/nil_class.rb +1 -0
- data/lib/bson/object.rb +5 -25
- data/lib/bson/object_id.rb +75 -121
- data/lib/bson/open_struct.rb +3 -2
- data/lib/bson/regexp.rb +35 -64
- data/lib/bson/registry.rb +2 -6
- data/lib/bson/specialized.rb +2 -1
- data/lib/bson/string.rb +4 -27
- data/lib/bson/symbol.rb +22 -19
- data/lib/bson/time.rb +2 -1
- data/lib/bson/time_with_zone.rb +13 -1
- data/lib/bson/timestamp.rb +2 -1
- data/lib/bson/true_class.rb +2 -1
- data/lib/bson/undefined.rb +14 -0
- data/lib/bson/version.rb +2 -1
- data/lib/bson-ruby.jar +0 -0
- data/lib/bson.rb +3 -2
- data/spec/bson/array_spec.rb +19 -60
- data/spec/bson/big_decimal_spec.rb +16 -4
- data/spec/bson/binary_spec.rb +83 -74
- data/spec/bson/binary_uuid_spec.rb +1 -0
- data/spec/bson/boolean_spec.rb +1 -0
- data/spec/bson/byte_buffer_read_spec.rb +1 -0
- data/spec/bson/byte_buffer_spec.rb +1 -0
- data/spec/bson/byte_buffer_write_spec.rb +1 -0
- data/spec/bson/code_spec.rb +5 -3
- data/spec/bson/code_with_scope_spec.rb +5 -3
- data/spec/bson/config_spec.rb +1 -35
- data/spec/bson/date_spec.rb +1 -0
- data/spec/bson/date_time_spec.rb +1 -0
- data/spec/bson/dbref_legacy_spec.rb +20 -3
- data/spec/bson/dbref_spec.rb +9 -9
- data/spec/bson/decimal128_spec.rb +249 -14
- data/spec/bson/document_as_spec.rb +1 -0
- data/spec/bson/document_spec.rb +1 -1
- data/spec/bson/ext_json_parse_spec.rb +1 -0
- data/spec/bson/false_class_spec.rb +8 -0
- data/spec/bson/float_spec.rb +8 -3
- data/spec/bson/hash_as_spec.rb +1 -0
- data/spec/bson/hash_spec.rb +87 -75
- data/spec/bson/int32_spec.rb +21 -6
- data/spec/bson/int64_spec.rb +21 -6
- data/spec/bson/integer_spec.rb +45 -13
- data/spec/bson/json_spec.rb +1 -0
- data/spec/bson/max_key_spec.rb +5 -3
- data/spec/bson/min_key_spec.rb +5 -3
- data/spec/bson/nil_class_spec.rb +1 -0
- data/spec/bson/object_id_spec.rb +43 -4
- data/spec/bson/object_spec.rb +2 -1
- data/spec/bson/open_struct_spec.rb +14 -71
- data/spec/bson/raw_spec.rb +9 -15
- data/spec/bson/regexp_spec.rb +4 -3
- data/spec/bson/registry_spec.rb +2 -1
- data/spec/bson/string_spec.rb +13 -38
- data/spec/bson/symbol_raw_spec.rb +25 -0
- data/spec/bson/symbol_spec.rb +15 -18
- data/spec/bson/time_spec.rb +1 -0
- data/spec/bson/time_with_zone_spec.rb +1 -0
- data/spec/bson/timestamp_spec.rb +1 -0
- data/spec/bson/true_class_spec.rb +8 -0
- data/spec/bson/undefined_spec.rb +27 -0
- data/spec/bson_spec.rb +1 -0
- data/spec/runners/common_driver.rb +6 -5
- data/spec/runners/corpus.rb +6 -0
- data/spec/runners/corpus_legacy.rb +1 -0
- data/spec/shared/lib/mrss/constraints.rb +8 -16
- data/spec/shared/lib/mrss/docker_runner.rb +30 -3
- data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
- data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
- data/spec/shared/lib/mrss/lite_constraints.rb +48 -1
- data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
- data/spec/shared/lib/mrss/session_registry.rb +69 -0
- data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
- data/spec/shared/lib/mrss/utils.rb +28 -6
- data/spec/shared/share/Dockerfile.erb +68 -85
- data/spec/shared/shlib/config.sh +27 -0
- data/spec/shared/shlib/server.sh +73 -24
- data/spec/shared/shlib/set_env.sh +39 -1
- data/spec/spec_helper.rb +1 -0
- data/spec/spec_tests/common_driver_spec.rb +9 -4
- data/spec/spec_tests/corpus_legacy_spec.rb +1 -0
- data/spec/spec_tests/corpus_spec.rb +13 -3
- data/spec/spec_tests/data/corpus/binary.json +5 -0
- data/spec/spec_tests/data/corpus/code.json +13 -13
- data/spec/spec_tests/data/corpus/decimal128-4.json +48 -0
- data/spec/spec_tests/data/corpus/decimal128-6.json +12 -0
- data/spec/spec_tests/data/corpus/decimal128-7.json +4 -0
- data/spec/spec_tests/data/corpus/document.json +20 -0
- data/spec/spec_tests/data/corpus/symbol.json +7 -7
- data/spec/spec_tests/data/corpus/top.json +18 -3
- data/spec/support/shared_examples.rb +28 -5
- data/spec/support/spec_config.rb +1 -0
- data/spec/support/utils.rb +49 -1
- data.tar.gz.sig +0 -0
- metadata +166 -141
- metadata.gz.sig +0 -0
data/lib/bson/db_pointer.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
2
3
|
# Copyright (C) 2020 MongoDB Inc.
|
3
4
|
#
|
4
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -54,24 +55,22 @@ module BSON
|
|
54
55
|
ref == other.ref && id == other.id
|
55
56
|
end
|
56
57
|
|
57
|
-
#
|
58
|
+
# Return a representation of the object for use in
|
59
|
+
# application-level JSON serialization. Since BSON::DbPointer
|
60
|
+
# is used exclusively in BSON-related contexts, this
|
61
|
+
# method returns the canonical Extended JSON representation.
|
58
62
|
#
|
59
|
-
# @return [ Hash ] The
|
60
|
-
|
61
|
-
# @deprecated Use as_extended_json instead.
|
62
|
-
def as_json(*args)
|
63
|
+
# @return [ Hash ] The extended json representation.
|
64
|
+
def as_json(*_args)
|
63
65
|
as_extended_json
|
64
66
|
end
|
65
67
|
|
66
68
|
# Converts this object to a representation directly serializable to
|
67
69
|
# Extended JSON (https://github.com/mongodb/specifications/blob/master/source/extended-json.rst).
|
68
70
|
#
|
69
|
-
# @option options [ true | false ] :relaxed Whether to produce relaxed
|
70
|
-
# extended JSON representation.
|
71
|
-
#
|
72
71
|
# @return [ Hash ] The extended json representation.
|
73
|
-
def as_extended_json(**
|
74
|
-
{'$dbPointer' => { "$ref" => ref, '$id' => id.as_extended_json }}
|
72
|
+
def as_extended_json(**_options)
|
73
|
+
{ '$dbPointer' => { "$ref" => ref, '$id' => id.as_extended_json } }
|
75
74
|
end
|
76
75
|
|
77
76
|
# Encode the DBPointer.
|
@@ -79,9 +78,9 @@ module BSON
|
|
79
78
|
# @return [ BSON::ByteBuffer ] The buffer with the encoded object.
|
80
79
|
#
|
81
80
|
# @see http://bsonspec.org/#/specification
|
82
|
-
def to_bson(buffer = ByteBuffer.new
|
81
|
+
def to_bson(buffer = ByteBuffer.new)
|
83
82
|
buffer.put_string(ref)
|
84
|
-
id.to_bson(buffer
|
83
|
+
id.to_bson(buffer)
|
85
84
|
buffer
|
86
85
|
end
|
87
86
|
|
data/lib/bson/dbref.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
-
#
|
2
|
+
# rubocop:todo all
|
3
3
|
|
4
4
|
# Copyright (C) 2015-2021 MongoDB Inc.
|
5
5
|
#
|
@@ -74,18 +74,21 @@ module BSON
|
|
74
74
|
# this parameter must be a String containing the collection name.
|
75
75
|
# @param [ Object ] id The object id, when using the legacy API.
|
76
76
|
# @param [ String ] database The database name, when using the legacy API.
|
77
|
+
#
|
78
|
+
# @raise [ BSON::Error::InvalidDBRefArgument ] if giving invalid arguments
|
79
|
+
# to the constructor.
|
77
80
|
def initialize(hash_or_collection, id = nil, database = nil)
|
78
81
|
if hash_or_collection.is_a?(Hash)
|
79
82
|
hash = hash_or_collection
|
80
83
|
|
81
84
|
unless id.nil? && database.nil?
|
82
|
-
raise
|
85
|
+
raise Error::InvalidDBRefArgument, 'When using the hash API, DBRef constructor accepts only one argument'
|
83
86
|
end
|
84
87
|
else
|
85
88
|
warn("BSON::DBRef constructor called with the legacy API - please use the hash API instead")
|
86
89
|
|
87
90
|
if id.nil?
|
88
|
-
raise
|
91
|
+
raise Error::InvalidDBRefArgument, 'When using the legacy constructor API, id must be provided'
|
89
92
|
end
|
90
93
|
|
91
94
|
hash = {
|
@@ -98,17 +101,17 @@ module BSON
|
|
98
101
|
hash = reorder_fields(hash)
|
99
102
|
%w($ref $id).each do |key|
|
100
103
|
unless hash[key]
|
101
|
-
raise
|
104
|
+
raise Error::InvalidDBRefArgument, "DBRef must have #{key}: #{hash}"
|
102
105
|
end
|
103
106
|
end
|
104
107
|
|
105
108
|
unless hash['$ref'].is_a?(String)
|
106
|
-
raise
|
109
|
+
raise Error::InvalidDBRefArgument, "The value for key $ref must be a string, got: #{hash['$ref']}"
|
107
110
|
end
|
108
111
|
|
109
112
|
if db = hash['$db']
|
110
113
|
unless db.is_a?(String)
|
111
|
-
raise
|
114
|
+
raise Error::InvalidDBRefArgument, "The value for key $db must be a string, got: #{hash['$db']}"
|
112
115
|
end
|
113
116
|
end
|
114
117
|
|
@@ -121,11 +124,10 @@ module BSON
|
|
121
124
|
# dbref.to_bson
|
122
125
|
#
|
123
126
|
# @param [ BSON::ByteBuffer ] buffer The encoded BSON buffer to append to.
|
124
|
-
# @param [ true, false ] validating_keys Whether keys should be validated when serializing.
|
125
127
|
#
|
126
128
|
# @return [ BSON::ByteBuffer ] The buffer with the encoded object.
|
127
|
-
def to_bson(buffer = ByteBuffer.new
|
128
|
-
as_json.to_bson(buffer
|
129
|
+
def to_bson(buffer = ByteBuffer.new)
|
130
|
+
as_json.to_bson(buffer)
|
129
131
|
end
|
130
132
|
|
131
133
|
private
|
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
2
3
|
# Copyright (C) 2016-2020 MongoDB Inc.
|
3
4
|
#
|
4
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -86,11 +87,11 @@ module BSON
|
|
86
87
|
|
87
88
|
def validate_range!(exponent, significand)
|
88
89
|
unless valid_exponent?(exponent)
|
89
|
-
raise
|
90
|
+
raise Error::InvalidDecimal128Range.new
|
90
91
|
end
|
91
92
|
|
92
93
|
unless valid_significand?(significand)
|
93
|
-
raise
|
94
|
+
raise Error::UnrepresentablePrecision.new
|
94
95
|
end
|
95
96
|
end
|
96
97
|
|
@@ -189,9 +190,9 @@ module BSON
|
|
189
190
|
private
|
190
191
|
|
191
192
|
def to_bits
|
192
|
-
|
193
|
-
digits,
|
194
|
-
before_decimal,
|
193
|
+
_, sign, digits_str = SIGN_AND_DIGITS_REGEX.match(@string).to_a
|
194
|
+
digits, _, scientific_exp = digits_str.partition(SCIENTIFIC_EXPONENT_REGEX)
|
195
|
+
before_decimal, _, after_decimal = digits.partition('.')
|
195
196
|
|
196
197
|
significand_str = before_decimal << after_decimal
|
197
198
|
significand_str = SIGNIFICAND_WITH_LEADING_ZEROS_REGEX.match(significand_str).to_a[2]
|
@@ -262,7 +263,7 @@ module BSON
|
|
262
263
|
end
|
263
264
|
|
264
265
|
def validate_format!
|
265
|
-
raise
|
266
|
+
raise Error::InvalidDecimal128String.new unless @string =~ VALID_DECIMAL128_STRING_REGEX
|
266
267
|
end
|
267
268
|
end
|
268
269
|
|
@@ -317,7 +318,7 @@ module BSON
|
|
317
318
|
end
|
318
319
|
|
319
320
|
def to_bits
|
320
|
-
sign, significand_str,
|
321
|
+
sign, significand_str, _, exp = @big_decimal.split
|
321
322
|
exponent = @big_decimal.zero? ? 0 : exp - significand_str.length
|
322
323
|
is_negative = (sign == ::BigDecimal::SIGN_NEGATIVE_FINITE || sign == ::BigDecimal::SIGN_NEGATIVE_ZERO)
|
323
324
|
Builder.parts_to_bits(significand_str.to_i,
|
@@ -452,4 +453,4 @@ module BSON
|
|
452
453
|
end
|
453
454
|
end
|
454
455
|
end
|
455
|
-
end
|
456
|
+
end
|
data/lib/bson/decimal128.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
2
3
|
# Copyright (C) 2016-2020 MongoDB Inc.
|
3
4
|
#
|
4
5
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
@@ -20,6 +21,7 @@ module BSON
|
|
20
21
|
|
21
22
|
class Decimal128
|
22
23
|
include JSON
|
24
|
+
include Comparable
|
23
25
|
|
24
26
|
# A Decimal128 is type 0x13 in the BSON spec.
|
25
27
|
#
|
@@ -56,17 +58,18 @@ module BSON
|
|
56
58
|
# @since 4.2.0
|
57
59
|
NATIVE_TYPE = BigDecimal
|
58
60
|
|
59
|
-
#
|
61
|
+
# Return a string representation of the Decimal128 use in standard
|
62
|
+
# application-level JSON serialization. Returns nil for non-real
|
63
|
+
# numbers such as NaN and Infinity to be compatible with ActiveSupport.
|
64
|
+
# This method is intentionally different from #as_extended_json.
|
60
65
|
#
|
61
|
-
# @example Get the Decimal128 as a JSON
|
66
|
+
# @example Get the Decimal128 as a JSON-serializable object.
|
62
67
|
# decimal.as_json
|
63
68
|
#
|
64
|
-
# @return [
|
65
|
-
#
|
66
|
-
# @since 4.2.0
|
67
|
-
# @deprecated Use as_extended_json instead.
|
69
|
+
# @return [ String | nil ] The decimal128 as a String or nil for non-representable numbers.
|
68
70
|
def as_json(*args)
|
69
|
-
|
71
|
+
value = to_s
|
72
|
+
value unless %w[NaN Infinity -Infinity].include?(value)
|
70
73
|
end
|
71
74
|
|
72
75
|
# Converts this object to a representation directly serializable to
|
@@ -76,7 +79,7 @@ module BSON
|
|
76
79
|
# (default is canonical extended JSON)
|
77
80
|
#
|
78
81
|
# @return [ Hash ] The extended json representation.
|
79
|
-
def as_extended_json(**
|
82
|
+
def as_extended_json(**_options)
|
80
83
|
{ EXTENDED_JSON_KEY => to_s }
|
81
84
|
end
|
82
85
|
|
@@ -97,7 +100,16 @@ module BSON
|
|
97
100
|
end
|
98
101
|
alias :eql? :==
|
99
102
|
|
100
|
-
|
103
|
+
def <=>(other)
|
104
|
+
to_d <=> case other
|
105
|
+
when Decimal128
|
106
|
+
other.to_d
|
107
|
+
else
|
108
|
+
other
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
# Create a new Decimal128 from a string or a BigDecimal instance.
|
101
113
|
#
|
102
114
|
# @example Create a Decimal128 from a BigDecimal.
|
103
115
|
# Decimal128.new(big_decimal)
|
@@ -105,7 +117,7 @@ module BSON
|
|
105
117
|
# @param [ String, BigDecimal ] object The BigDecimal or String to use for
|
106
118
|
# instantiating a Decimal128.
|
107
119
|
#
|
108
|
-
# @raise [
|
120
|
+
# @raise [ BSON::Error::InvalidDecimal128Argument ] When argument is not a String or BigDecimal.
|
109
121
|
#
|
110
122
|
# @since 4.2.0
|
111
123
|
def initialize(object)
|
@@ -114,10 +126,15 @@ module BSON
|
|
114
126
|
elsif object.is_a?(BigDecimal)
|
115
127
|
set_bits(*Builder::FromBigDecimal.new(object).bits)
|
116
128
|
else
|
117
|
-
raise
|
129
|
+
raise Error::InvalidDecimal128Argument.new
|
118
130
|
end
|
119
131
|
end
|
120
132
|
|
133
|
+
# Get the BSON type for Decimal128.
|
134
|
+
def bson_type
|
135
|
+
BSON_TYPE
|
136
|
+
end
|
137
|
+
|
121
138
|
# Get the decimal128 as its raw BSON data.
|
122
139
|
#
|
123
140
|
# @example Get the raw bson bytes in a buffer.
|
@@ -128,7 +145,7 @@ module BSON
|
|
128
145
|
# @see http://bsonspec.org/#/specification
|
129
146
|
#
|
130
147
|
# @since 4.2.0
|
131
|
-
def to_bson(buffer = ByteBuffer.new
|
148
|
+
def to_bson(buffer = ByteBuffer.new)
|
132
149
|
buffer.put_decimal128(@low, @high)
|
133
150
|
end
|
134
151
|
|
@@ -179,7 +196,7 @@ module BSON
|
|
179
196
|
# @example
|
180
197
|
# decimal128 = BSON::Decimal128.new("0.200")
|
181
198
|
# => BSON::Decimal128('0.200')
|
182
|
-
# big_decimal = decimal128.
|
199
|
+
# big_decimal = decimal128.to_d
|
183
200
|
# => #<BigDecimal:7fc619c95388,'0.2E0',9(18)>
|
184
201
|
# big_decimal.to_s
|
185
202
|
# => "0.2E0"
|
@@ -188,11 +205,10 @@ module BSON
|
|
188
205
|
# and -sNaN while Ruby's BigDecimal cannot.
|
189
206
|
#
|
190
207
|
# @return [ BigDecimal ] The decimal as a BigDecimal.
|
191
|
-
|
192
|
-
# @since 4.2.0
|
193
|
-
def to_big_decimal
|
208
|
+
def to_d
|
194
209
|
@big_decimal ||= BigDecimal(to_s)
|
195
210
|
end
|
211
|
+
alias :to_big_decimal :to_d
|
196
212
|
|
197
213
|
private
|
198
214
|
|
@@ -226,7 +242,7 @@ module BSON
|
|
226
242
|
#
|
227
243
|
# @param [ String ] string The string to parse.
|
228
244
|
#
|
229
|
-
# @raise [ BSON::
|
245
|
+
# @raise [ BSON::Error:InvalidDecimal128String ] If the provided string is invalid.
|
230
246
|
#
|
231
247
|
# @return [ BSON::Decimal128 ] The new decimal128.
|
232
248
|
#
|
@@ -252,97 +268,5 @@ module BSON
|
|
252
268
|
decimal
|
253
269
|
end
|
254
270
|
end
|
255
|
-
|
256
|
-
# Raised when trying to create a Decimal128 from an object that is neither a String nor a BigDecimal.
|
257
|
-
#
|
258
|
-
# @api private
|
259
|
-
#
|
260
|
-
# @since 4.2.0
|
261
|
-
class InvalidArgument < ArgumentError
|
262
|
-
|
263
|
-
# The custom error message for this error.
|
264
|
-
#
|
265
|
-
# @since 4.2.0
|
266
|
-
MESSAGE = 'A Decimal128 can only be created from a String or BigDecimal.'
|
267
|
-
|
268
|
-
# Get the custom error message for the exception.
|
269
|
-
#
|
270
|
-
# @example Get the message.
|
271
|
-
# error.message
|
272
|
-
#
|
273
|
-
# @return [ String ] The error message.
|
274
|
-
#
|
275
|
-
# @since 4.2.0
|
276
|
-
def message
|
277
|
-
MESSAGE
|
278
|
-
end
|
279
|
-
end
|
280
|
-
|
281
|
-
# Raised when trying to create a Decimal128 from a string with
|
282
|
-
# an invalid format.
|
283
|
-
#
|
284
|
-
# @api private
|
285
|
-
#
|
286
|
-
# @since 4.2.0
|
287
|
-
class InvalidString < RuntimeError
|
288
|
-
|
289
|
-
# The custom error message for this error.
|
290
|
-
#
|
291
|
-
# @since 4.2.0
|
292
|
-
MESSAGE = 'Invalid string format for creating a Decimal128 object.'
|
293
|
-
|
294
|
-
# Get the custom error message for the exception.
|
295
|
-
#
|
296
|
-
# @example Get the message.
|
297
|
-
# error.message
|
298
|
-
#
|
299
|
-
# @return [ String ] The error message.
|
300
|
-
#
|
301
|
-
# @since 4.2.0
|
302
|
-
def message
|
303
|
-
MESSAGE
|
304
|
-
end
|
305
|
-
end
|
306
|
-
|
307
|
-
# Raised when the exponent is outside the valid range.
|
308
|
-
#
|
309
|
-
# @since 4.2.0
|
310
|
-
class InvalidRange < RuntimeError
|
311
|
-
|
312
|
-
# The custom error message for this error.
|
313
|
-
#
|
314
|
-
# @since 4.2.0
|
315
|
-
# @deprecated
|
316
|
-
MESSAGE = 'Value out of range for Decimal128 representation.'
|
317
|
-
|
318
|
-
# Get the custom error message for the exception.
|
319
|
-
#
|
320
|
-
# @example Get the message.
|
321
|
-
# error.message
|
322
|
-
#
|
323
|
-
# @return [ String ] The error message.
|
324
|
-
#
|
325
|
-
# @since 4.2.0
|
326
|
-
def message
|
327
|
-
MESSAGE
|
328
|
-
end
|
329
|
-
end
|
330
|
-
|
331
|
-
# Raised when the significand provided is outside the valid range.
|
332
|
-
#
|
333
|
-
# @note This class derives from InvalidRange for backwards compatibility,
|
334
|
-
# however when RUBY-1806 is implemented it should be changed to derive
|
335
|
-
# from the base BSON exception class.
|
336
|
-
class UnrepresentablePrecision < InvalidRange
|
337
|
-
|
338
|
-
# Get the custom error message for the exception.
|
339
|
-
#
|
340
|
-
# @return [ String ] The error message.
|
341
|
-
def message
|
342
|
-
'The value contains too much precision for Decimal128 representation'
|
343
|
-
end
|
344
|
-
end
|
345
|
-
|
346
|
-
Registry.register(BSON_TYPE, self)
|
347
271
|
end
|
348
272
|
end
|
data/lib/bson/document.rb
CHANGED
data/lib/bson/environment.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
3
|
+
|
4
|
+
module BSON
|
5
|
+
class Error
|
6
|
+
|
7
|
+
# Raised when validating keys and a key is illegal in MongoDB
|
8
|
+
class IllegalKey < Error
|
9
|
+
|
10
|
+
# Instantiate the exception.
|
11
|
+
#
|
12
|
+
# @example Instantiate the exception.
|
13
|
+
# BSON::Error::IllegalKey.new(string)
|
14
|
+
#
|
15
|
+
# @param [ String ] string The illegal string.
|
16
|
+
#
|
17
|
+
# @api private
|
18
|
+
def initialize(string)
|
19
|
+
super("'#{string}' is an illegal key in MongoDB. Keys may not start with '$' or contain a '.'.")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
3
|
+
|
4
|
+
module BSON
|
5
|
+
class Error
|
6
|
+
|
7
|
+
# Raised when providing an invalid type to the Binary.
|
8
|
+
class InvalidBinaryType < Error
|
9
|
+
|
10
|
+
# @return [ Object ] The invalid type.
|
11
|
+
attr_reader :type
|
12
|
+
|
13
|
+
# Instantiate the new error.
|
14
|
+
#
|
15
|
+
# @example Instantiate the error.
|
16
|
+
# InvalidBinaryType.new(:error)
|
17
|
+
#
|
18
|
+
# @param [ Object ] type The invalid type.
|
19
|
+
#
|
20
|
+
# @api private
|
21
|
+
def initialize(type)
|
22
|
+
@type = type
|
23
|
+
end
|
24
|
+
|
25
|
+
# Get the custom error message for the exception.
|
26
|
+
#
|
27
|
+
# @example Get the message.
|
28
|
+
# error.message
|
29
|
+
#
|
30
|
+
# @return [ String ] The error message.
|
31
|
+
def message
|
32
|
+
"#{type.inspect} is not a valid binary type. " +
|
33
|
+
"Please use one of #{BSON::Binary::SUBTYPES.keys.map(&:inspect).join(", ")}."
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
3
|
+
|
4
|
+
module BSON
|
5
|
+
class Error
|
6
|
+
|
7
|
+
# Raised when trying to create a Decimal128 from an object that is neither a String nor a BigDecimal.
|
8
|
+
class InvalidDecimal128Argument < Error
|
9
|
+
|
10
|
+
# The custom error message for this error.
|
11
|
+
MESSAGE = 'A Decimal128 can only be created from a String or BigDecimal.'
|
12
|
+
|
13
|
+
# Get the custom error message for the exception.
|
14
|
+
#
|
15
|
+
# @example Get the message.
|
16
|
+
# error.message
|
17
|
+
#
|
18
|
+
# @return [ String ] The error message.
|
19
|
+
def message
|
20
|
+
MESSAGE
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
3
|
+
|
4
|
+
module BSON
|
5
|
+
class Error
|
6
|
+
|
7
|
+
# Raised when the exponent is outside the valid range.
|
8
|
+
class InvalidDecimal128Range < Error
|
9
|
+
|
10
|
+
# The custom error message for this error.
|
11
|
+
#
|
12
|
+
# @deprecated
|
13
|
+
MESSAGE = 'Value out of range for Decimal128 representation.'
|
14
|
+
|
15
|
+
# Get the custom error message for the exception.
|
16
|
+
#
|
17
|
+
# @example Get the message.
|
18
|
+
# error.message
|
19
|
+
#
|
20
|
+
# @return [ String ] The error message.
|
21
|
+
def message
|
22
|
+
MESSAGE
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
3
|
+
|
4
|
+
module BSON
|
5
|
+
class Error
|
6
|
+
|
7
|
+
# Raised when trying to create a Decimal128 from a string with
|
8
|
+
# an invalid format.
|
9
|
+
class InvalidDecimal128String < Error
|
10
|
+
|
11
|
+
# The custom error message for this error.
|
12
|
+
MESSAGE = 'Invalid string format for creating a Decimal128 object.'
|
13
|
+
|
14
|
+
# Get the custom error message for the exception.
|
15
|
+
#
|
16
|
+
# @example Get the message.
|
17
|
+
# error.message
|
18
|
+
#
|
19
|
+
# @return [ String ] The error message.
|
20
|
+
def message
|
21
|
+
MESSAGE
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
3
|
+
|
4
|
+
module BSON
|
5
|
+
class Error
|
6
|
+
|
7
|
+
# Raised when trying to serialize an object into a key.
|
8
|
+
class InvalidKey < Error
|
9
|
+
|
10
|
+
# Instantiate the exception.
|
11
|
+
#
|
12
|
+
# @example Instantiate the exception.
|
13
|
+
# BSON::Object::InvalidKey.new(object)
|
14
|
+
#
|
15
|
+
# @param [ Object ] object The object that was meant for the key.
|
16
|
+
#
|
17
|
+
# @api private
|
18
|
+
def initialize(object)
|
19
|
+
super("#{object.class} instances are not allowed as keys in a BSON document.")
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
3
|
+
|
4
|
+
module BSON
|
5
|
+
class Error
|
6
|
+
|
7
|
+
# Exception raised when there is an invalid argument passed into the
|
8
|
+
# constructor of regexp object. This includes when the argument contains
|
9
|
+
# a null byte.
|
10
|
+
class InvalidRegexpPattern < Error
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
3
|
+
|
4
|
+
module BSON
|
5
|
+
class Error
|
6
|
+
|
7
|
+
# Raised when the significand provided is outside the valid range.
|
8
|
+
class UnrepresentablePrecision < Error
|
9
|
+
|
10
|
+
# Get the custom error message for the exception.
|
11
|
+
#
|
12
|
+
# @return [ String ] The error message.
|
13
|
+
def message
|
14
|
+
'The value contains too much precision for Decimal128 representation'
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
@@ -0,0 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
# rubocop:todo all
|
3
|
+
|
4
|
+
module BSON
|
5
|
+
class Error
|
6
|
+
|
7
|
+
# Exception raised when serializing an Array or Hash to BSON and an
|
8
|
+
# array or hash element is of a class that does not define how to serialize
|
9
|
+
# itself to BSON.
|
10
|
+
class UnserializableClass < Error
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|