bson 4.14.1-java → 5.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/README.md +4 -4
  4. data/Rakefile +5 -0
  5. data/lib/bson/active_support.rb +1 -0
  6. data/lib/bson/array.rb +57 -31
  7. data/lib/bson/big_decimal.rb +16 -6
  8. data/lib/bson/binary.rb +255 -128
  9. data/lib/bson/boolean.rb +1 -0
  10. data/lib/bson/code.rb +9 -11
  11. data/lib/bson/code_with_scope.rb +8 -10
  12. data/lib/bson/config.rb +1 -27
  13. data/lib/bson/date.rb +2 -1
  14. data/lib/bson/date_time.rb +2 -1
  15. data/lib/bson/db_pointer.rb +11 -12
  16. data/lib/bson/dbref.rb +11 -9
  17. data/lib/bson/decimal128/builder.rb +9 -8
  18. data/lib/bson/decimal128.rb +33 -109
  19. data/lib/bson/document.rb +1 -0
  20. data/lib/bson/environment.rb +1 -0
  21. data/lib/bson/error/bson_decode_error.rb +11 -0
  22. data/lib/bson/error/ext_json_parse_error.rb +11 -0
  23. data/lib/bson/error/illegal_key.rb +23 -0
  24. data/lib/bson/error/invalid_binary_type.rb +37 -0
  25. data/lib/bson/error/invalid_dbref_argument.rb +12 -0
  26. data/lib/bson/error/invalid_decimal128_argument.rb +25 -0
  27. data/lib/bson/error/invalid_decimal128_range.rb +27 -0
  28. data/lib/bson/error/invalid_decimal128_string.rb +26 -0
  29. data/lib/bson/error/invalid_key.rb +24 -0
  30. data/lib/bson/error/invalid_object_id.rb +11 -0
  31. data/lib/bson/error/invalid_regexp_pattern.rb +13 -0
  32. data/lib/bson/error/unrepresentable_precision.rb +19 -0
  33. data/lib/bson/error/unserializable_class.rb +13 -0
  34. data/lib/bson/error/unsupported_binary_subtype.rb +12 -0
  35. data/lib/bson/error/unsupported_type.rb +11 -0
  36. data/lib/bson/error.rb +16 -28
  37. data/lib/bson/ext_json.rb +1 -0
  38. data/lib/bson/false_class.rb +2 -1
  39. data/lib/bson/float.rb +2 -1
  40. data/lib/bson/hash.rb +127 -72
  41. data/lib/bson/int32.rb +16 -4
  42. data/lib/bson/int64.rb +16 -4
  43. data/lib/bson/integer.rb +3 -4
  44. data/lib/bson/json.rb +1 -0
  45. data/lib/bson/max_key.rb +7 -9
  46. data/lib/bson/min_key.rb +7 -9
  47. data/lib/bson/nil_class.rb +1 -0
  48. data/lib/bson/object.rb +5 -25
  49. data/lib/bson/object_id.rb +75 -121
  50. data/lib/bson/open_struct.rb +3 -2
  51. data/lib/bson/regexp.rb +35 -64
  52. data/lib/bson/registry.rb +2 -6
  53. data/lib/bson/specialized.rb +2 -1
  54. data/lib/bson/string.rb +4 -27
  55. data/lib/bson/symbol.rb +22 -19
  56. data/lib/bson/time.rb +2 -1
  57. data/lib/bson/time_with_zone.rb +13 -1
  58. data/lib/bson/timestamp.rb +2 -1
  59. data/lib/bson/true_class.rb +2 -1
  60. data/lib/bson/undefined.rb +14 -0
  61. data/lib/bson/version.rb +2 -1
  62. data/lib/bson-ruby.jar +0 -0
  63. data/lib/bson.rb +3 -2
  64. data/spec/bson/array_spec.rb +19 -60
  65. data/spec/bson/big_decimal_spec.rb +16 -4
  66. data/spec/bson/binary_spec.rb +83 -74
  67. data/spec/bson/binary_uuid_spec.rb +1 -0
  68. data/spec/bson/boolean_spec.rb +1 -0
  69. data/spec/bson/byte_buffer_read_spec.rb +1 -0
  70. data/spec/bson/byte_buffer_spec.rb +1 -0
  71. data/spec/bson/byte_buffer_write_spec.rb +1 -0
  72. data/spec/bson/code_spec.rb +5 -3
  73. data/spec/bson/code_with_scope_spec.rb +5 -3
  74. data/spec/bson/config_spec.rb +1 -35
  75. data/spec/bson/date_spec.rb +1 -0
  76. data/spec/bson/date_time_spec.rb +1 -0
  77. data/spec/bson/dbref_legacy_spec.rb +20 -3
  78. data/spec/bson/dbref_spec.rb +9 -9
  79. data/spec/bson/decimal128_spec.rb +249 -14
  80. data/spec/bson/document_as_spec.rb +1 -0
  81. data/spec/bson/document_spec.rb +1 -1
  82. data/spec/bson/ext_json_parse_spec.rb +1 -0
  83. data/spec/bson/false_class_spec.rb +8 -0
  84. data/spec/bson/float_spec.rb +8 -3
  85. data/spec/bson/hash_as_spec.rb +1 -0
  86. data/spec/bson/hash_spec.rb +87 -75
  87. data/spec/bson/int32_spec.rb +21 -6
  88. data/spec/bson/int64_spec.rb +21 -6
  89. data/spec/bson/integer_spec.rb +45 -13
  90. data/spec/bson/json_spec.rb +1 -0
  91. data/spec/bson/max_key_spec.rb +5 -3
  92. data/spec/bson/min_key_spec.rb +5 -3
  93. data/spec/bson/nil_class_spec.rb +1 -0
  94. data/spec/bson/object_id_spec.rb +43 -4
  95. data/spec/bson/object_spec.rb +2 -1
  96. data/spec/bson/open_struct_spec.rb +14 -71
  97. data/spec/bson/raw_spec.rb +9 -15
  98. data/spec/bson/regexp_spec.rb +4 -3
  99. data/spec/bson/registry_spec.rb +2 -1
  100. data/spec/bson/string_spec.rb +13 -38
  101. data/spec/bson/symbol_raw_spec.rb +25 -0
  102. data/spec/bson/symbol_spec.rb +15 -18
  103. data/spec/bson/time_spec.rb +1 -0
  104. data/spec/bson/time_with_zone_spec.rb +1 -0
  105. data/spec/bson/timestamp_spec.rb +1 -0
  106. data/spec/bson/true_class_spec.rb +8 -0
  107. data/spec/bson/undefined_spec.rb +27 -0
  108. data/spec/bson_spec.rb +1 -0
  109. data/spec/runners/common_driver.rb +6 -5
  110. data/spec/runners/corpus.rb +6 -0
  111. data/spec/runners/corpus_legacy.rb +1 -0
  112. data/spec/shared/lib/mrss/constraints.rb +8 -16
  113. data/spec/shared/lib/mrss/docker_runner.rb +30 -3
  114. data/spec/shared/lib/mrss/eg_config_utils.rb +51 -0
  115. data/spec/shared/lib/mrss/event_subscriber.rb +15 -5
  116. data/spec/shared/lib/mrss/lite_constraints.rb +48 -1
  117. data/spec/shared/lib/mrss/server_version_registry.rb +16 -23
  118. data/spec/shared/lib/mrss/session_registry.rb +69 -0
  119. data/spec/shared/lib/mrss/session_registry_legacy.rb +60 -0
  120. data/spec/shared/lib/mrss/utils.rb +28 -6
  121. data/spec/shared/share/Dockerfile.erb +68 -85
  122. data/spec/shared/shlib/config.sh +27 -0
  123. data/spec/shared/shlib/server.sh +73 -24
  124. data/spec/shared/shlib/set_env.sh +39 -1
  125. data/spec/spec_helper.rb +1 -0
  126. data/spec/spec_tests/common_driver_spec.rb +9 -4
  127. data/spec/spec_tests/corpus_legacy_spec.rb +1 -0
  128. data/spec/spec_tests/corpus_spec.rb +13 -3
  129. data/spec/spec_tests/data/corpus/binary.json +5 -0
  130. data/spec/spec_tests/data/corpus/code.json +13 -13
  131. data/spec/spec_tests/data/corpus/decimal128-4.json +48 -0
  132. data/spec/spec_tests/data/corpus/decimal128-6.json +12 -0
  133. data/spec/spec_tests/data/corpus/decimal128-7.json +4 -0
  134. data/spec/spec_tests/data/corpus/document.json +20 -0
  135. data/spec/spec_tests/data/corpus/symbol.json +7 -7
  136. data/spec/spec_tests/data/corpus/top.json +18 -3
  137. data/spec/support/shared_examples.rb +28 -5
  138. data/spec/support/spec_config.rb +1 -0
  139. data/spec/support/utils.rb +49 -1
  140. data.tar.gz.sig +0 -0
  141. metadata +166 -141
  142. metadata.gz.sig +0 -0
@@ -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
- # Get the DBPointer as JSON hash data
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 DBPointer as a JSON hash.
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(**options)
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, validating_keys = Config.validating_keys?)
81
+ def to_bson(buffer = ByteBuffer.new)
83
82
  buffer.put_string(ref)
84
- id.to_bson(buffer, validating_keys)
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
- # encoding: utf-8
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 ArgumentError, 'When using the hash API, DBRef constructor accepts only one argument'
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 ArgumentError, 'When using the legacy constructor API, id must be provided'
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 ArgumentError, "DBRef must have #{key}: #{hash}"
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 ArgumentError, "The value for key $ref must be a string, got: #{hash['$ref']}"
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 ArgumentError, "The value for key $db must be a string, got: #{hash['$db']}"
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, validating_keys = Config.validating_keys?)
128
- as_json.to_bson(buffer, validating_keys)
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 Decimal128::InvalidRange.new
90
+ raise Error::InvalidDecimal128Range.new
90
91
  end
91
92
 
92
93
  unless valid_significand?(significand)
93
- raise Decimal128::UnrepresentablePrecision.new
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
- original, sign, digits_str = SIGN_AND_DIGITS_REGEX.match(@string).to_a
193
- digits, e, scientific_exp = digits_str.partition(SCIENTIFIC_EXPONENT_REGEX)
194
- before_decimal, decimal, after_decimal = digits.partition('.')
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 BSON::Decimal128::InvalidString.new unless @string =~ VALID_DECIMAL128_STRING_REGEX
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, base, exp = @big_decimal.split
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
@@ -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
- # Get the Decimal128 as JSON hash data.
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 hash.
66
+ # @example Get the Decimal128 as a JSON-serializable object.
62
67
  # decimal.as_json
63
68
  #
64
- # @return [ Hash ] The number as a JSON hash.
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
- as_extended_json
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(**options)
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
- # Create a new Decimal128 from a BigDecimal.
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 [ InvalidBigDecimal ] Raise error unless object argument is a BigDecimal.
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 InvalidArgument.new
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, validating_keys = Config.validating_keys?)
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.to_big_decimal
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::Decimal128::InvalidString ] If the provided string is invalid.
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
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
  # Copyright (C) 2009-2020 MongoDB Inc.
3
4
  #
4
5
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ # rubocop:todo all
2
3
  # Copyright (C) 2009-2020 MongoDB Inc.
3
4
  #
4
5
  # Licensed under the Apache License, Version 2.0 (the "License");
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ # rubocop:todo all
3
+
4
+ module BSON
5
+ class Error
6
+
7
+ # Exception raised when BSON decoding fails.
8
+ class BSONDecodeError < Error
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+ # rubocop:todo all
3
+
4
+ module BSON
5
+ class Error
6
+
7
+ # Exception raised when Extended JSON parsing fails.
8
+ class ExtJSONParseError < Error
9
+ end
10
+ end
11
+ end
@@ -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,12 @@
1
+ # frozen_string_literal: true
2
+ # rubocop:todo all
3
+
4
+ module BSON
5
+ class Error
6
+
7
+ # Raised when trying to create a BSON::DBRef from an object that is an invalid DBRef.
8
+ class InvalidDBRefArgument < Error
9
+ end
10
+ end
11
+ end
12
+
@@ -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,11 @@
1
+ # frozen_string_literal: true
2
+ # rubocop:todo all
3
+
4
+ module BSON
5
+ class Error
6
+
7
+ # Raised when trying to create an object id with invalid data.
8
+ class InvalidObjectId < Error; end
9
+ end
10
+ end
11
+
@@ -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